forked from rarias/bscpkgs
Add Intel oneAPI 2023 with compilation tests
This commit is contained in:
parent
fd84af45f0
commit
115e9beb59
@ -13,7 +13,9 @@
|
|||||||
, symlinkJoin
|
, symlinkJoin
|
||||||
, libfabric
|
, libfabric
|
||||||
, gcc
|
, gcc
|
||||||
|
, gcc7
|
||||||
, wrapCCWith
|
, wrapCCWith
|
||||||
|
, linuxHeaders
|
||||||
}:
|
}:
|
||||||
|
|
||||||
# The distribution of intel packages is a mess. We are doing the installation
|
# The distribution of intel packages is a mess. We are doing the installation
|
||||||
@ -28,25 +30,24 @@
|
|||||||
|
|
||||||
let
|
let
|
||||||
|
|
||||||
# As of 2022-11-10 this is the last release for hpckit and all other
|
|
||||||
# components
|
|
||||||
v = {
|
v = {
|
||||||
hpckit = "2022.3.0";
|
hpckit = "2023.0.0";
|
||||||
compiler = "2022.2.0";
|
compiler = "2023.0.0";
|
||||||
tbb = "2021.7.1";
|
tbb = "2021.8.0";
|
||||||
mpi = "2021.7.0";
|
mpi = "2021.8.0";
|
||||||
};
|
};
|
||||||
|
|
||||||
aptPackageIndex = stdenv.mkDerivation {
|
aptPackageIndex = stdenv.mkDerivation {
|
||||||
name = "intel-oneapi-packages";
|
name = "intel-oneapi-packages";
|
||||||
srcs = [
|
srcs = [
|
||||||
|
# Set the hashes to "" to fetch them
|
||||||
(fetchurl {
|
(fetchurl {
|
||||||
url = "https://apt.repos.intel.com/oneapi/dists/all/main/binary-amd64/Packages";
|
url = "https://apt.repos.intel.com/oneapi/dists/all/main/binary-amd64/Packages";
|
||||||
sha256 = "sha256-swUGn097D5o1giK2l+3H4xFcUXSAUYtavQsPyiJlr2A=";
|
sha256 = "sha256-u0fKJRNkG19xlO3h5+uJgfeAArk+gMATOQQST2RM5pg=";
|
||||||
})
|
})
|
||||||
(fetchurl {
|
(fetchurl {
|
||||||
url = "https://apt.repos.intel.com/oneapi/dists/all/main/binary-all/Packages";
|
url = "https://apt.repos.intel.com/oneapi/dists/all/main/binary-all/Packages";
|
||||||
sha256 = "sha256-Ewpy0l0fXiJDG0FkAGykqizW1bm+/lcvI2OREyqzOLM=";
|
sha256 = "sha256-m3UCjGzq1piHc2Qh/ejM4qBsqDQOVjm3U8E4USi5MwY=";
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
phases = [ "installPhase" ];
|
phases = [ "installPhase" ];
|
||||||
@ -75,9 +76,9 @@ let
|
|||||||
getUrl = pkgList: name:
|
getUrl = pkgList: name:
|
||||||
let
|
let
|
||||||
matches = lib.filter (x: name == x.Package) pkgList;
|
matches = lib.filter (x: name == x.Package) pkgList;
|
||||||
match = assert lib.length matches == 1; lib.elemAt matches 0;
|
#match = assert lib.length matches == 1; lib.elemAt matches 0;
|
||||||
#n = lib.length matches;
|
n = lib.length matches;
|
||||||
#match = builtins.trace (name + " -- ${builtins.toString n}") (lib.elemAt matches 0);
|
match = builtins.trace (name + " -- n=${builtins.toString n}") (lib.elemAt matches 0);
|
||||||
in
|
in
|
||||||
apthost + match.Filename;
|
apthost + match.Filename;
|
||||||
|
|
||||||
@ -202,7 +203,7 @@ let
|
|||||||
phases = [ "installPhase" "fixupPhase" ];
|
phases = [ "installPhase" "fixupPhase" ];
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
|
|
||||||
autoPatchelfIgnoreMissingDeps = [ "libsycl.so.5" ];
|
autoPatchelfIgnoreMissingDeps = [ "libsycl.so.6" ];
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
mkdir -p $out/{bin,lib,include}
|
mkdir -p $out/{bin,lib,include}
|
||||||
@ -219,6 +220,7 @@ let
|
|||||||
|
|
||||||
# Libraries
|
# Libraries
|
||||||
rsync -a lib/ $out/lib/
|
rsync -a lib/ $out/lib/
|
||||||
|
rsync -a lib/x64/ $out/lib/
|
||||||
rsync -a compiler/lib/intel64_lin/ $out/lib/
|
rsync -a compiler/lib/intel64_lin/ $out/lib/
|
||||||
chmod +w $out/lib
|
chmod +w $out/lib
|
||||||
cp bin/intel64/libcilkrts.so.5 $out/lib/
|
cp bin/intel64/libcilkrts.so.5 $out/lib/
|
||||||
@ -245,6 +247,8 @@ let
|
|||||||
#"intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-runtime-${version}"
|
#"intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-runtime-${version}"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
langFortran = true;
|
||||||
|
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
intel-mpi
|
intel-mpi
|
||||||
intel-compiler-shared
|
intel-compiler-shared
|
||||||
@ -258,9 +262,6 @@ let
|
|||||||
|
|
||||||
nativeBuildInputs = [ autoPatchelfHook ];
|
nativeBuildInputs = [ autoPatchelfHook ];
|
||||||
|
|
||||||
# The gcc package is required for building other programs
|
|
||||||
propagatedBuildInputs = [ stdenv.cc intel-compiler-shared ];
|
|
||||||
|
|
||||||
phases = [ "installPhase" "fixupPhase" ];
|
phases = [ "installPhase" "fixupPhase" ];
|
||||||
|
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
@ -295,17 +296,41 @@ let
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
intel-compiler = stdenv.mkDerivation rec {
|
||||||
intel-compiler-classic = stdenv.mkDerivation rec {
|
|
||||||
version = v.compiler;
|
version = v.compiler;
|
||||||
pname = "intel-compiler-classic";
|
pname = "intel-compiler";
|
||||||
src = joinDebs pname [
|
src = joinDebs pname [
|
||||||
|
# C/C++
|
||||||
|
"intel-oneapi-dpcpp-cpp-${version}"
|
||||||
|
"intel-oneapi-compiler-dpcpp-cpp-${version}"
|
||||||
|
"intel-oneapi-compiler-dpcpp-cpp-common-${version}"
|
||||||
|
"intel-oneapi-compiler-dpcpp-cpp-runtime-${version}"
|
||||||
"intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-${version}"
|
"intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-${version}"
|
||||||
|
"intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-common-${version}"
|
||||||
"intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-runtime-${version}"
|
"intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-runtime-${version}"
|
||||||
"intel-oneapi-compiler-dpcpp-cpp-classic-fortran-shared-runtime-${version}"
|
"intel-oneapi-compiler-dpcpp-cpp-classic-fortran-shared-runtime-${version}"
|
||||||
"intel-oneapi-dpcpp-cpp-${version}"
|
|
||||||
"intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-common-${version}"
|
|
||||||
];
|
];
|
||||||
|
# From https://aur.archlinux.org/packages/intel-oneapi-compiler:
|
||||||
|
# - intel-oneapi-compiler-cpp-eclipse-cfg-2023.0.0-25370_all.deb
|
||||||
|
# + intel-oneapi-compiler-dpcpp-cpp-2023.0.0-2023.0.0-25370_amd64.deb
|
||||||
|
# x intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-2023.0.0-2023.0.0-25370_amd64.deb (empty)
|
||||||
|
# + intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-2023.0.0-25370_amd64.deb
|
||||||
|
# + intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-common-2023.0.0-2023.0.0-25370_all.deb
|
||||||
|
# + intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-runtime-2023.0.0-2023.0.0-25370_amd64.deb
|
||||||
|
# + intel-oneapi-compiler-dpcpp-cpp-classic-fortran-shared-runtime-2023.0.0-2023.0.0-25370_amd64.deb
|
||||||
|
# + intel-oneapi-compiler-dpcpp-cpp-common-2023.0.0-2023.0.0-25370_all.deb
|
||||||
|
# + intel-oneapi-compiler-dpcpp-cpp-runtime-2023.0.0-2023.0.0-25370_amd64.deb
|
||||||
|
# - intel-oneapi-compiler-dpcpp-eclipse-cfg-2023.0.0-25370_all.deb
|
||||||
|
# - intel-oneapi-compiler-fortran-2023.0.0-2023.0.0-25370_amd64.deb
|
||||||
|
# - intel-oneapi-compiler-fortran-common-2023.0.0-2023.0.0-25370_all.deb
|
||||||
|
# - intel-oneapi-compiler-fortran-runtime-2023.0.0-2023.0.0-25370_amd64.deb
|
||||||
|
# - intel-oneapi-compiler-fortran-runtime-2023.0.0-25370_amd64.deb
|
||||||
|
# - intel-oneapi-compiler-shared-2023.0.0-2023.0.0-25370_amd64.deb
|
||||||
|
# - intel-oneapi-compiler-shared-common-2023.0.0-2023.0.0-25370_all.deb
|
||||||
|
# - intel-oneapi-compiler-shared-runtime-2023.0.0-2023.0.0-25370_amd64.deb
|
||||||
|
# - intel-oneapi-dpcpp-cpp-2023.0.0-2023.0.0-25370_amd64.deb
|
||||||
|
# - intel-oneapi-openmp-2023.0.0-2023.0.0-25370_amd64.deb
|
||||||
|
# - intel-oneapi-openmp-common-2023.0.0-2023.0.0-25370_all.deb
|
||||||
|
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
intel-compiler-shared
|
intel-compiler-shared
|
||||||
@ -318,9 +343,7 @@ let
|
|||||||
];
|
];
|
||||||
|
|
||||||
nativeBuildInputs = [ autoPatchelfHook ];
|
nativeBuildInputs = [ autoPatchelfHook ];
|
||||||
|
autoPatchelfIgnoreMissingDeps = [ "libtbb.so.12" "libtbbmalloc.so.2" "libze_loader.so.1" ];
|
||||||
# The gcc package is required for building other programs
|
|
||||||
propagatedBuildInputs = [ stdenv.cc intel-compiler-shared ];
|
|
||||||
|
|
||||||
phases = [ "installPhase" "fixupPhase" ];
|
phases = [ "installPhase" "fixupPhase" ];
|
||||||
|
|
||||||
@ -337,10 +360,18 @@ let
|
|||||||
pushd linux
|
pushd linux
|
||||||
# Binaries
|
# Binaries
|
||||||
rsync -a bin/ $out/bin/
|
rsync -a bin/ $out/bin/
|
||||||
|
rsync -a bin-llvm/ $out/bin/
|
||||||
rsync -a bin/intel64/ $out/bin/
|
rsync -a bin/intel64/ $out/bin/
|
||||||
|
|
||||||
# Libraries
|
# Libraries
|
||||||
rsync -a --exclude oclfpga lib/ $out/lib/
|
rsync -a --exclude oclfpga lib/ $out/lib/
|
||||||
|
rsync -a compiler/lib/intel64_lin/ $out/lib/
|
||||||
|
|
||||||
|
# Headers
|
||||||
|
rsync -a compiler/include/ $out/include/ # Intrinsics for icc
|
||||||
|
rsync -a include/ $out/include/
|
||||||
|
chmod +w $out/include
|
||||||
|
ln -s $out/lib/clang/16.0.0/include/ $out/include/icx # For icx
|
||||||
popd
|
popd
|
||||||
|
|
||||||
# Manuals
|
# Manuals
|
||||||
@ -349,35 +380,97 @@ let
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
intel-compiler-classic-wrapper =
|
wrapIntel = { cc, mygcc, extraBuild ? "", extraInstall ? "" }:
|
||||||
let
|
let
|
||||||
targetConfig = stdenv.targetPlatform.config;
|
targetConfig = stdenv.targetPlatform.config;
|
||||||
inherit gcc;
|
in (wrapCCWith {
|
||||||
in wrapCCWith rec {
|
cc = cc;
|
||||||
cc = intel-compiler-classic;
|
|
||||||
extraBuildCommands = ''
|
extraBuildCommands = ''
|
||||||
echo "-B${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}" >> $out/nix-support/cc-cflags
|
|
||||||
echo "-isystem ${cc}/include" >> $out/nix-support/cc-cflags
|
echo "-isystem ${cc}/include" >> $out/nix-support/cc-cflags
|
||||||
echo "-isystem ${cc}/include/intel64" >> $out/nix-support/cc-cflags
|
echo "-isystem ${cc}/include/intel64" >> $out/nix-support/cc-cflags
|
||||||
echo "-L${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}" >> $out/nix-support/cc-ldflags
|
|
||||||
echo "-L${gcc.cc.lib}/lib" >> $out/nix-support/cc-ldflags
|
echo "-L${mygcc.cc}/lib/gcc/${targetConfig}/${mygcc.version}" >> $out/nix-support/cc-ldflags
|
||||||
|
echo "-L${mygcc.cc.lib}/lib" >> $out/nix-support/cc-ldflags
|
||||||
echo "-L${intel-compiler-shared}/lib" >> $out/nix-support/cc-ldflags
|
echo "-L${intel-compiler-shared}/lib" >> $out/nix-support/cc-ldflags
|
||||||
|
echo "-L${cc}/lib" >> $out/nix-support/cc-ldflags
|
||||||
|
|
||||||
cat "${cc}/nix-support/propagated-build-inputs" >> \
|
# Need the gcc in the path
|
||||||
$out/nix-support/propagated-build-inputs
|
echo 'export "PATH=${mygcc}/bin:$PATH"' >> $out/nix-support/cc-wrapper-hook
|
||||||
|
|
||||||
# Create the wrappers for icc and icpc
|
# Disable hardening by default
|
||||||
wrap icc $wrapper $ccPath/icc
|
echo "" > $out/nix-support/add-hardening.sh
|
||||||
wrap icpc $wrapper $ccPath/icpc
|
'' + extraBuild;
|
||||||
wrap mcpcom $wrapper $ccPath/mcpcom
|
}).overrideAttrs (old: {
|
||||||
'';
|
installPhase = old.installPhase + extraInstall;
|
||||||
};
|
});
|
||||||
|
|
||||||
|
icx-wrapper = wrapIntel rec {
|
||||||
|
cc = intel-compiler;
|
||||||
|
mygcc = gcc;
|
||||||
|
extraBuild = ''
|
||||||
|
wrap icx $wrapper $ccPath/icx
|
||||||
|
wrap icpx $wrapper $ccPath/icpx
|
||||||
|
echo "-isystem ${cc}/include/icx" >> $out/nix-support/cc-cflags
|
||||||
|
echo "--gcc-toolchain=${mygcc.cc}" >> $out/nix-support/cc-cflags
|
||||||
|
'';
|
||||||
|
extraInstall = ''
|
||||||
|
export named_cc="icx"
|
||||||
|
export named_cxx="icpx"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
# Legacy
|
||||||
|
icc-wrapper = wrapIntel rec {
|
||||||
|
cc = intel-compiler;
|
||||||
|
# Intel icc classic compiler tries to behave like the gcc found in $PATH.
|
||||||
|
# EVEN if it doesn't support some of the features. See:
|
||||||
|
# https://community.intel.com/t5/Intel-C-Compiler/builtin-shuffle-GCC-compatibility-and-has-builtin/td-p/1143619
|
||||||
|
mygcc = gcc;
|
||||||
|
extraBuild = ''
|
||||||
|
wrap icc $wrapper $ccPath/icc
|
||||||
|
wrap icpc $wrapper $ccPath/icpc
|
||||||
|
echo "-isystem ${cc}/include/icc" >> $out/nix-support/cc-cflags
|
||||||
|
'';
|
||||||
|
extraInstall = ''
|
||||||
|
export named_cc="icc"
|
||||||
|
export named_cxx="icpc"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
ifort-wrapper = wrapIntel rec {
|
||||||
|
cc = intel-compiler-fortran;
|
||||||
|
mygcc = gcc;
|
||||||
|
extraBuild = ''
|
||||||
|
wrap ifort $wrapper $ccPath/ifort
|
||||||
|
'';
|
||||||
|
extraInstall = ''
|
||||||
|
export named_fc="ifort"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
stdenv-icc = stdenv.override {
|
||||||
|
cc = icc-wrapper;
|
||||||
|
allowedRequisites = null;
|
||||||
|
};
|
||||||
|
|
||||||
|
stdenv-icx = stdenv.override {
|
||||||
|
cc = icx-wrapper;
|
||||||
|
allowedRequisites = null;
|
||||||
|
};
|
||||||
|
|
||||||
|
stdenv-ifort = stdenv.override {
|
||||||
|
cc = ifort-wrapper;
|
||||||
|
allowedRequisites = null;
|
||||||
|
};
|
||||||
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
inherit
|
inherit aptPackages;
|
||||||
intel-compiler-classic
|
icx = icx-wrapper;
|
||||||
intel-compiler-classic-wrapper
|
icc = icc-wrapper;
|
||||||
intel-compiler-fortran
|
ifort = ifort-wrapper;
|
||||||
intel-compiler-shared;
|
|
||||||
|
stdenv = stdenv-icx;
|
||||||
|
stdenv-icc = stdenv-icc;
|
||||||
|
stdenv-ifort = stdenv-ifort;
|
||||||
}
|
}
|
64
overlay.nix
64
overlay.nix
@ -39,13 +39,24 @@ let
|
|||||||
|
|
||||||
icc2021Unwrapped = callPackage ./bsc/intel-compiler/icc2021.nix { };
|
icc2021Unwrapped = callPackage ./bsc/intel-compiler/icc2021.nix { };
|
||||||
|
|
||||||
#icc2022Unwrapped = callPackage ./bsc/intel-oneapi/2022.3.1.nix { };
|
intel-oneapi-2023 = callPackage ./bsc/intel-oneapi/2023.nix {
|
||||||
|
libffi = self.libffi_3_3;
|
||||||
|
};
|
||||||
|
|
||||||
intel-oneapi = callPackage ./bsc/intel-oneapi/ifort.nix { };
|
intel2023 = {
|
||||||
ifort2022Unwrapped = bsc.intel-oneapi.intel-compiler-fortran;
|
inherit (bsc.intel-oneapi-2023)
|
||||||
icc2022Unwrapped = bsc.intel-oneapi.intel-compiler-classic;
|
stdenv icx stdenv-ifort ifort
|
||||||
|
# Deprecated in mid 2023
|
||||||
|
stdenv-icc icc;
|
||||||
|
};
|
||||||
|
|
||||||
#oneapi2022 = callPackage ./bsc/intel-oneapi/oneapi.nix { };
|
intel2022 = {
|
||||||
|
icc = bsc.icc2021;
|
||||||
|
};
|
||||||
|
|
||||||
|
intel2021 = {
|
||||||
|
icc = bsc.icc2021;
|
||||||
|
};
|
||||||
|
|
||||||
# A wrapper script that puts all the flags and environment vars
|
# A wrapper script that puts all the flags and environment vars
|
||||||
# properly and calls the intel compiler binary
|
# properly and calls the intel compiler binary
|
||||||
@ -63,12 +74,9 @@ let
|
|||||||
intelLicense = bsc.intelLicense;
|
intelLicense = bsc.intelLicense;
|
||||||
};
|
};
|
||||||
|
|
||||||
ifort = bsc.ifort2022;
|
icx = bsc.intel2023.icx;
|
||||||
|
icc = bsc.intel2023.icc;
|
||||||
icc2022 = bsc.intel-oneapi.intel-compiler-classic-wrapper;
|
ifort = bsc.intel2023.ifort;
|
||||||
|
|
||||||
|
|
||||||
icc = bsc.icc2022;
|
|
||||||
|
|
||||||
# We need to set the cc.CC and cc.CXX attributes, in order to
|
# We need to set the cc.CC and cc.CXX attributes, in order to
|
||||||
# determine the name of the compiler
|
# determine the name of the compiler
|
||||||
@ -118,6 +126,12 @@ let
|
|||||||
nanos6 = bsc.nanos6Release;
|
nanos6 = bsc.nanos6Release;
|
||||||
nanos6Release = callPackage ./bsc/nanos6/default.nix { };
|
nanos6Release = callPackage ./bsc/nanos6/default.nix { };
|
||||||
nanos6Git = callPackage ./bsc/nanos6/git.nix { };
|
nanos6Git = callPackage ./bsc/nanos6/git.nix { };
|
||||||
|
nanos6-icx = bsc.nanos6.override {
|
||||||
|
stdenv = bsc.intel2023.stdenv;
|
||||||
|
};
|
||||||
|
nanos6-icc = bsc.nanos6.override {
|
||||||
|
stdenv = bsc.intel2023.stdenv-icc;
|
||||||
|
};
|
||||||
|
|
||||||
nanos6Debug = bsc.nanos6.overrideAttrs (old: {
|
nanos6Debug = bsc.nanos6.overrideAttrs (old: {
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
@ -283,11 +297,37 @@ let
|
|||||||
inherit self super bsc callPackage;
|
inherit self super bsc callPackage;
|
||||||
};
|
};
|
||||||
|
|
||||||
test = {
|
test = rec {
|
||||||
# hwloc = callPackage ./test/bugs/hwloc.nix { };
|
# hwloc = callPackage ./test/bugs/hwloc.nix { };
|
||||||
sigsegv = callPackage ./test/reproducers/sigsegv.nix { };
|
sigsegv = callPackage ./test/reproducers/sigsegv.nix { };
|
||||||
|
compilers.hello-c = callPackage ./test/compilers/hello-c.nix { };
|
||||||
|
compilers.hello-cpp = callPackage ./test/compilers/hello-cpp.nix { };
|
||||||
|
compilers.hello-f = callPackage ./test/compilers/hello-f.nix { };
|
||||||
|
compilers.intel2023.icx.c = compilers.hello-c.override {
|
||||||
|
stdenv = bsc.intel2023.stdenv;
|
||||||
|
};
|
||||||
|
compilers.intel2023.icc.c = compilers.hello-c.override {
|
||||||
|
stdenv = bsc.intel2023.stdenv-icc;
|
||||||
|
};
|
||||||
|
compilers.intel2023.icx.cpp = compilers.hello-cpp.override {
|
||||||
|
stdenv = bsc.intel2023.stdenv;
|
||||||
|
};
|
||||||
|
compilers.intel2023.icc.cpp = compilers.hello-cpp.override {
|
||||||
|
stdenv = bsc.intel2023.stdenv-icc;
|
||||||
|
};
|
||||||
|
compilers.intel2023.ifort = compilers.hello-f.override {
|
||||||
|
stdenv = bsc.intel2023.stdenv-ifort;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
testAll = with bsc.test; [
|
||||||
|
compilers.intel2023.icx.c
|
||||||
|
compilers.intel2023.icc.c
|
||||||
|
compilers.intel2023.icx.cpp
|
||||||
|
compilers.intel2023.icc.cpp
|
||||||
|
compilers.intel2023.ifort
|
||||||
|
];
|
||||||
|
|
||||||
ci = import ./test/ci.nix {
|
ci = import ./test/ci.nix {
|
||||||
inherit self super bsc callPackage;
|
inherit self super bsc callPackage;
|
||||||
};
|
};
|
||||||
|
@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
|
|||||||
wxparaver
|
wxparaver
|
||||||
# Runtimes
|
# Runtimes
|
||||||
nanos6
|
nanos6
|
||||||
];
|
] ++ bsc.testAll;
|
||||||
|
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
if [ -e /boot ]; then
|
if [ -e /boot ]; then
|
||||||
|
68
test/compilers/hello-c.nix
Normal file
68
test/compilers/hello-c.nix
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
{ stdenv, writeText, which, strace }:
|
||||||
|
|
||||||
|
let
|
||||||
|
hello_c = writeText "hello.c" ''
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <xmmintrin.h>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
printf("Hello world!\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
shuffle_c = writeText "shuffle.c" ''
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
typedef int v4si __attribute__ ((vector_size (16)));
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
v4si a = {1,2,3,4};
|
||||||
|
v4si b = {5,6,7,8};
|
||||||
|
v4si mask1 = {0,1,1,3};
|
||||||
|
v4si mask2 = {0,4,2,5};
|
||||||
|
v4si res;
|
||||||
|
|
||||||
|
#if defined(__GNUC__) && (__GNUC__ >= 7)
|
||||||
|
res = __builtin_shuffle (a, mask1); /* res is {1,2,2,4} */
|
||||||
|
res = __builtin_shuffle (a, b, mask2); /* res is {1,5,3,6} */
|
||||||
|
|
||||||
|
printf("%d %d %d %d\n", res[0], res[1], res[2], res[3]);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
version = "0.0.1";
|
||||||
|
name = "hello-c";
|
||||||
|
buildInputs = [ stdenv which strace ];
|
||||||
|
src = hello_c;
|
||||||
|
dontUnpack = true;
|
||||||
|
dontConfigure = true;
|
||||||
|
NIX_DEBUG = 0;
|
||||||
|
buildPhase = ''
|
||||||
|
set -x
|
||||||
|
echo CC=$CC
|
||||||
|
which $CC
|
||||||
|
$CC -v
|
||||||
|
|
||||||
|
cp ${hello_c} hello.c
|
||||||
|
$CC -v hello.c -o hello
|
||||||
|
./hello
|
||||||
|
|
||||||
|
# Only gcc
|
||||||
|
#cp ${shuffle_c} shuffle.c
|
||||||
|
#$CC shuffle.c -o shuffle
|
||||||
|
#./shuffle
|
||||||
|
|
||||||
|
set +x
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
touch $out
|
||||||
|
'';
|
||||||
|
}
|
36
test/compilers/hello-cpp.nix
Normal file
36
test/compilers/hello-cpp.nix
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
{ stdenv, writeText, which, strace }:
|
||||||
|
|
||||||
|
let
|
||||||
|
hello_cpp = writeText "hello.cpp" ''
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
printf("Hello world!\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
version = "0.0.1";
|
||||||
|
name = "hello-cpp";
|
||||||
|
buildInputs = [ stdenv which strace ];
|
||||||
|
src = hello_cpp;
|
||||||
|
dontUnpack = true;
|
||||||
|
dontConfigure = true;
|
||||||
|
NIX_DEBUG = 0;
|
||||||
|
buildPhase = ''
|
||||||
|
cp $src hello.cpp
|
||||||
|
set -x
|
||||||
|
echo CXX=$CXX
|
||||||
|
which $CXX
|
||||||
|
$CXX hello.cpp -o hello
|
||||||
|
./hello
|
||||||
|
set +x
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
touch $out
|
||||||
|
'';
|
||||||
|
}
|
35
test/compilers/hello-f.nix
Normal file
35
test/compilers/hello-f.nix
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
{ stdenv, writeText, which, strace }:
|
||||||
|
|
||||||
|
let
|
||||||
|
hello_f90 = writeText "hello.f90" ''
|
||||||
|
program hello
|
||||||
|
print *, 'Hello, World!'
|
||||||
|
end program hello
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
version = "0.0.1";
|
||||||
|
name = "hello-f90";
|
||||||
|
buildInputs = [ stdenv which strace ];
|
||||||
|
src = hello_f90;
|
||||||
|
dontUnpack = true;
|
||||||
|
dontConfigure = true;
|
||||||
|
NIX_DEBUG = 0;
|
||||||
|
buildPhase = ''
|
||||||
|
set -x
|
||||||
|
echo FC=$FC
|
||||||
|
which $FC
|
||||||
|
$FC -v
|
||||||
|
|
||||||
|
cp ${hello_f90} hello.f90
|
||||||
|
$FC hello.f90 -o hello
|
||||||
|
./hello
|
||||||
|
|
||||||
|
set +x
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
touch $out
|
||||||
|
'';
|
||||||
|
}
|
50
test/compilers/suffle-c.nix
Normal file
50
test/compilers/suffle-c.nix
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
{ stdenv, writeText, which, strace }:
|
||||||
|
|
||||||
|
let
|
||||||
|
shuffle_c = writeText "shuffle.c" ''
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
typedef int v4si __attribute__ ((vector_size (16)));
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
v4si a = {1,2,3,4};
|
||||||
|
v4si b = {5,6,7,8};
|
||||||
|
v4si mask1 = {0,1,1,3};
|
||||||
|
v4si mask2 = {0,4,2,5};
|
||||||
|
v4si res;
|
||||||
|
|
||||||
|
#if defined(__GNUC__) && (__GNUC__ >= 7)
|
||||||
|
res = __builtin_shuffle (a, mask1); /* res is {1,2,2,4} */
|
||||||
|
res = __builtin_shuffle (a, b, mask2); /* res is {1,5,3,6} */
|
||||||
|
|
||||||
|
printf("%d %d %d %d\n", res[0], res[1], res[2], res[3]);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
version = "0.0.1";
|
||||||
|
name = "hello-c";
|
||||||
|
buildInputs = [ stdenv which strace ];
|
||||||
|
src = hello_c;
|
||||||
|
dontUnpack = true;
|
||||||
|
dontConfigure = true;
|
||||||
|
NIX_DEBUG = 0;
|
||||||
|
buildPhase = ''
|
||||||
|
cp $src hello.c
|
||||||
|
set -x
|
||||||
|
echo CC=$CC
|
||||||
|
which $CC
|
||||||
|
#strace -ff -e trace=execve -s99999999 $CC hello.c -o hello
|
||||||
|
$CC hello.c -o hello
|
||||||
|
./hello
|
||||||
|
set +x
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
touch $out
|
||||||
|
'';
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user