Add Intel oneAPI 2023 with compilation tests
This commit is contained in:
parent
fd84af45f0
commit
115e9beb59
@ -13,7 +13,9 @@
|
||||
, symlinkJoin
|
||||
, libfabric
|
||||
, gcc
|
||||
, gcc7
|
||||
, wrapCCWith
|
||||
, linuxHeaders
|
||||
}:
|
||||
|
||||
# The distribution of intel packages is a mess. We are doing the installation
|
||||
@ -28,25 +30,24 @@
|
||||
|
||||
let
|
||||
|
||||
# As of 2022-11-10 this is the last release for hpckit and all other
|
||||
# components
|
||||
v = {
|
||||
hpckit = "2022.3.0";
|
||||
compiler = "2022.2.0";
|
||||
tbb = "2021.7.1";
|
||||
mpi = "2021.7.0";
|
||||
hpckit = "2023.0.0";
|
||||
compiler = "2023.0.0";
|
||||
tbb = "2021.8.0";
|
||||
mpi = "2021.8.0";
|
||||
};
|
||||
|
||||
aptPackageIndex = stdenv.mkDerivation {
|
||||
name = "intel-oneapi-packages";
|
||||
srcs = [
|
||||
# Set the hashes to "" to fetch them
|
||||
(fetchurl {
|
||||
url = "https://apt.repos.intel.com/oneapi/dists/all/main/binary-amd64/Packages";
|
||||
sha256 = "sha256-swUGn097D5o1giK2l+3H4xFcUXSAUYtavQsPyiJlr2A=";
|
||||
sha256 = "sha256-u0fKJRNkG19xlO3h5+uJgfeAArk+gMATOQQST2RM5pg=";
|
||||
})
|
||||
(fetchurl {
|
||||
url = "https://apt.repos.intel.com/oneapi/dists/all/main/binary-all/Packages";
|
||||
sha256 = "sha256-Ewpy0l0fXiJDG0FkAGykqizW1bm+/lcvI2OREyqzOLM=";
|
||||
sha256 = "sha256-m3UCjGzq1piHc2Qh/ejM4qBsqDQOVjm3U8E4USi5MwY=";
|
||||
})
|
||||
];
|
||||
phases = [ "installPhase" ];
|
||||
@ -75,9 +76,9 @@ let
|
||||
getUrl = pkgList: name:
|
||||
let
|
||||
matches = lib.filter (x: name == x.Package) pkgList;
|
||||
match = assert lib.length matches == 1; lib.elemAt matches 0;
|
||||
#n = lib.length matches;
|
||||
#match = builtins.trace (name + " -- ${builtins.toString n}") (lib.elemAt matches 0);
|
||||
#match = assert lib.length matches == 1; lib.elemAt matches 0;
|
||||
n = lib.length matches;
|
||||
match = builtins.trace (name + " -- n=${builtins.toString n}") (lib.elemAt matches 0);
|
||||
in
|
||||
apthost + match.Filename;
|
||||
|
||||
@ -202,7 +203,7 @@ let
|
||||
phases = [ "installPhase" "fixupPhase" ];
|
||||
dontStrip = true;
|
||||
|
||||
autoPatchelfIgnoreMissingDeps = [ "libsycl.so.5" ];
|
||||
autoPatchelfIgnoreMissingDeps = [ "libsycl.so.6" ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/{bin,lib,include}
|
||||
@ -219,6 +220,7 @@ let
|
||||
|
||||
# Libraries
|
||||
rsync -a lib/ $out/lib/
|
||||
rsync -a lib/x64/ $out/lib/
|
||||
rsync -a compiler/lib/intel64_lin/ $out/lib/
|
||||
chmod +w $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}"
|
||||
];
|
||||
|
||||
langFortran = true;
|
||||
|
||||
buildInputs = [
|
||||
intel-mpi
|
||||
intel-compiler-shared
|
||||
@ -258,9 +262,6 @@ let
|
||||
|
||||
nativeBuildInputs = [ autoPatchelfHook ];
|
||||
|
||||
# The gcc package is required for building other programs
|
||||
propagatedBuildInputs = [ stdenv.cc intel-compiler-shared ];
|
||||
|
||||
phases = [ "installPhase" "fixupPhase" ];
|
||||
|
||||
dontStrip = true;
|
||||
@ -295,17 +296,41 @@ let
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
intel-compiler-classic = stdenv.mkDerivation rec {
|
||||
intel-compiler = stdenv.mkDerivation rec {
|
||||
version = v.compiler;
|
||||
pname = "intel-compiler-classic";
|
||||
pname = "intel-compiler";
|
||||
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-common-${version}"
|
||||
"intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-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 = [
|
||||
intel-compiler-shared
|
||||
@ -318,9 +343,7 @@ let
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ autoPatchelfHook ];
|
||||
|
||||
# The gcc package is required for building other programs
|
||||
propagatedBuildInputs = [ stdenv.cc intel-compiler-shared ];
|
||||
autoPatchelfIgnoreMissingDeps = [ "libtbb.so.12" "libtbbmalloc.so.2" "libze_loader.so.1" ];
|
||||
|
||||
phases = [ "installPhase" "fixupPhase" ];
|
||||
|
||||
@ -337,10 +360,18 @@ let
|
||||
pushd linux
|
||||
# Binaries
|
||||
rsync -a bin/ $out/bin/
|
||||
rsync -a bin-llvm/ $out/bin/
|
||||
rsync -a bin/intel64/ $out/bin/
|
||||
|
||||
# Libraries
|
||||
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
|
||||
|
||||
# Manuals
|
||||
@ -349,35 +380,97 @@ let
|
||||
'';
|
||||
};
|
||||
|
||||
intel-compiler-classic-wrapper =
|
||||
wrapIntel = { cc, mygcc, extraBuild ? "", extraInstall ? "" }:
|
||||
let
|
||||
targetConfig = stdenv.targetPlatform.config;
|
||||
inherit gcc;
|
||||
in wrapCCWith rec {
|
||||
cc = intel-compiler-classic;
|
||||
in (wrapCCWith {
|
||||
cc = cc;
|
||||
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/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${cc}/lib" >> $out/nix-support/cc-ldflags
|
||||
|
||||
cat "${cc}/nix-support/propagated-build-inputs" >> \
|
||||
$out/nix-support/propagated-build-inputs
|
||||
# Need the gcc in the path
|
||||
echo 'export "PATH=${mygcc}/bin:$PATH"' >> $out/nix-support/cc-wrapper-hook
|
||||
|
||||
# Create the wrappers for icc and icpc
|
||||
# Disable hardening by default
|
||||
echo "" > $out/nix-support/add-hardening.sh
|
||||
'' + extraBuild;
|
||||
}).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
|
||||
wrap mcpcom $wrapper $ccPath/mcpcom
|
||||
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
|
||||
{
|
||||
inherit
|
||||
intel-compiler-classic
|
||||
intel-compiler-classic-wrapper
|
||||
intel-compiler-fortran
|
||||
intel-compiler-shared;
|
||||
inherit aptPackages;
|
||||
icx = icx-wrapper;
|
||||
icc = icc-wrapper;
|
||||
ifort = ifort-wrapper;
|
||||
|
||||
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 { };
|
||||
|
||||
#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 { };
|
||||
ifort2022Unwrapped = bsc.intel-oneapi.intel-compiler-fortran;
|
||||
icc2022Unwrapped = bsc.intel-oneapi.intel-compiler-classic;
|
||||
intel2023 = {
|
||||
inherit (bsc.intel-oneapi-2023)
|
||||
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
|
||||
# properly and calls the intel compiler binary
|
||||
@ -63,12 +74,9 @@ let
|
||||
intelLicense = bsc.intelLicense;
|
||||
};
|
||||
|
||||
ifort = bsc.ifort2022;
|
||||
|
||||
icc2022 = bsc.intel-oneapi.intel-compiler-classic-wrapper;
|
||||
|
||||
|
||||
icc = bsc.icc2022;
|
||||
icx = bsc.intel2023.icx;
|
||||
icc = bsc.intel2023.icc;
|
||||
ifort = bsc.intel2023.ifort;
|
||||
|
||||
# We need to set the cc.CC and cc.CXX attributes, in order to
|
||||
# determine the name of the compiler
|
||||
@ -118,6 +126,12 @@ let
|
||||
nanos6 = bsc.nanos6Release;
|
||||
nanos6Release = callPackage ./bsc/nanos6/default.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: {
|
||||
dontStrip = true;
|
||||
@ -283,10 +297,36 @@ let
|
||||
inherit self super bsc callPackage;
|
||||
};
|
||||
|
||||
test = {
|
||||
test = rec {
|
||||
# hwloc = callPackage ./test/bugs/hwloc.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 {
|
||||
inherit self super bsc callPackage;
|
||||
|
@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
|
||||
wxparaver
|
||||
# Runtimes
|
||||
nanos6
|
||||
];
|
||||
] ++ bsc.testAll;
|
||||
|
||||
buildPhase = ''
|
||||
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…
Reference in New Issue
Block a user