diff --git a/bsc/cpic/default.nix b/bsc/cpic/default.nix index 3104d50..284c269 100644 --- a/bsc/cpic/default.nix +++ b/bsc/cpic/default.nix @@ -27,12 +27,12 @@ stdenv.mkDerivation rec { # }; postConfigure = '' - env | grep NIX + env ''; +# export NANOS6_HOME="${nanos6}" preConfigure = '' - export NANOS6_HOME="${nanos6}" export TAMPI_HOME="${tampi}" ''; diff --git a/bsc/llvm-ompss2/clang.nix b/bsc/llvm-ompss2/clang.nix new file mode 100644 index 0000000..7ea8e60 --- /dev/null +++ b/bsc/llvm-ompss2/clang.nix @@ -0,0 +1,68 @@ +{ + stdenv +, fetchgit +, cmake +, lld +, bash +, python3 +, perl +, clang +, which +, libelf +, libffi +, pkg-config +, enableDebug ? true +}: + +stdenv.mkDerivation rec { + version = "11.0.0"; + pname = "clang-ompss2"; + enableParallelBuilding = true; + #isClang = true; + #isGNU = true; + + isClangWithOmpss = true; + + buildInputs = [ + which + clang + bash + python3 + perl + cmake + lld + libelf + libffi + pkg-config + ]; + + cmakeBuildType = if enableDebug then "Debug" else "Release"; + + dontUseCmakeBuildDir = true; + + preConfigure = '' + mkdir -p build + cd build + cmakeDir="../llvm" + cmakeFlagsArray=( + "-DLLVM_ENABLE_LLD=ON" + "-DCMAKE_CXX_FLAGS_DEBUG=-g -ggnu-pubnames" + "-DCMAKE_EXE_LINKER_FLAGS_DEBUG=-Wl,-gdb-index" + "-DLLVM_LIT_ARGS=-sv --xunit-xml-output=xunit.xml" + "-DLLVM_ENABLE_PROJECTS=clang;openmp" + "-DLLVM_ENABLE_ASSERTIONS=ON" + "-DLLVM_INSTALL_TOOLCHAIN_ONLY=ON" + ) + ''; + +# About "-DCLANG_DEFAULT_NANOS6_HOME=${nanos6}", we could specify a default +# nanos6 installation, but this is would require a recompilation of clang each +# time nanos6 is changed. Better to use the environment variable NANOS6_HOME, +# and specify nanos6 at run time. + + src = builtins.fetchGit { + url = "git@bscpm02.bsc.es:llvm-ompss/llvm-mono.git"; + rev = "38e2e6aac04d40b6b2823751ce25f6b414f52263"; + ref = "master"; + }; +} diff --git a/bsc/llvm-ompss2/default.nix b/bsc/llvm-ompss2/default.nix index db05719..6bb282b 100644 --- a/bsc/llvm-ompss2/default.nix +++ b/bsc/llvm-ompss2/default.nix @@ -1,63 +1,27 @@ { stdenv -, fetchgit -, cmake -, lld -, bash -, python3 -, perl -, clang -, which -, libelf -, libffi -, pkg-config -, enableDebug ? true +, gcc +, nanos6 +, clang-ompss2-unwrapped +, wrapCCWith +, libstdcxxHook }: -stdenv.mkDerivation rec { - version = "11.0.0"; - pname = "clang-ompss2"; - enableParallelBuilding = true; - isClang = true; - isGNU = true; - isClangWithOmpss = true; +let + targetConfig = stdenv.targetPlatform.config; + inherit gcc nanos6; +in wrapCCWith rec { + cc = clang-ompss2-unwrapped; + extraPackages = [ libstdcxxHook ]; + extraBuildCommands = '' + echo "-target ${targetConfig}" >> $out/nix-support/cc-cflags + echo "-B${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}" >> $out/nix-support/cc-cflags + echo "-L${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}" >> $out/nix-support/cc-ldflags + echo "-L${gcc.cc.lib}/${targetConfig}/lib" >> $out/nix-support/cc-ldflags + echo "--gcc-toolchain=${gcc}" >> $out/nix-support/cc-cflags - buildInputs = [ - which - clang - bash - python3 - perl - cmake - lld - libelf - libffi - pkg-config - ]; - - cmakeBuildType = if enableDebug then "Debug" else "Release"; - - dontUseCmakeBuildDir = true; - - preConfigure = '' - mkdir -p build - cd build - cmakeDir="../llvm" - cmakeFlagsArray=( - "-DLLVM_ENABLE_LLD=ON" - "-DCMAKE_CXX_FLAGS_DEBUG=-g -ggnu-pubnames" - "-DCMAKE_EXE_LINKER_FLAGS_DEBUG=-Wl,-gdb-index" - "-DLLVM_LIT_ARGS=-sv --xunit-xml-output=xunit.xml" - "-DLLVM_ENABLE_PROJECTS=clang;openmp" - "-DLLVM_ENABLE_ASSERTIONS=ON" - "-DLLVM_INSTALL_TOOLCHAIN_ONLY=ON" - ) + echo "# Hack to include NANOS6_HOME" >> $out/nix-support/setup-hook + echo "export NANOS6_HOME=${nanos6}" >> $out/nix-support/setup-hook ''; - - src = builtins.fetchGit { - url = "git@bscpm02.bsc.es:llvm-ompss/llvm-mono.git"; - rev = "38e2e6aac04d40b6b2823751ce25f6b414f52263"; - ref = "master"; - }; } diff --git a/default.nix b/default.nix index 6621209..a420226 100644 --- a/default.nix +++ b/default.nix @@ -3,11 +3,8 @@ let inherit (pkgs.lib) callPackageWith; inherit (pkgs.lib) callPackagesWith; - inherit (pkgs) pythonPackages; - inherit (pkgs) perlPackages; - inherit (pkgs) buildPerlPackage; + #callPackage = callPackageWith (pkgs); callPackage = callPackageWith (pkgs // self.bsc); - callPackage_i686 = callPackageWith (pkgs.pkgsi686Linux // self.bsc); callPackages = callPackagesWith (pkgs // self.bsc); self.bsc = rec { @@ -51,20 +48,22 @@ let extrae = extrae; }; - clang-ompss2-unwrapped = callPackage ./bsc/llvm-ompss2/default.nix { }; +# +# clang-ompss2 = import ./bsc/cc-wrapper/default.nix { +## inherit stdenv binutils coreutils ; +## stdenv = bsc.stdenv; +# coreutils = pkgs.coreutils; +# bintools = pkgs.binutils; +# gnugrep = pkgs.gnugrep; +# stdenvNoCC = pkgs.stdenvNoCC; +# libc = pkgs.glibc; +# nativeTools = false; +# nativeLibc = false; +# cc = clang-ompss2-unwrapped; +# }; - clang-ompss2 = import ./bsc/cc-wrapper/default.nix { -# inherit stdenv binutils coreutils ; -# stdenv = bsc.stdenv; - coreutils = pkgs.coreutils; - bintools = pkgs.binutils; - gnugrep = pkgs.gnugrep; - stdenvNoCC = pkgs.stdenvNoCC; - libc = pkgs.glibc; - nativeTools = false; - nativeLibc = false; - cc = clang-ompss2-unwrapped; - }; + + # gcc = lib.makeOverridable (import ./bsc/cc-wrapper/default.nix) { # nativeTools = false; @@ -110,22 +109,50 @@ let # llvmPackages_latest = llvmPackages_10; - stdenv_nanos6 = pkgs.clangStdenv.override { - cc = clang-ompss2; - }; - - cpic = callPackage ./bsc/cpic/default.nix { - stdenv = stdenv_nanos6; - tampi = tampi; - mpi = mpi; - nanos6 = nanos6-git; -# llvm-ompss2 = llvm-ompss2; - }; +# +# cpic = callPackage ./bsc/cpic/default.nix { +# stdenv = stdenv_nanos6; +# tampi = tampi; +# mpi = mpi; +# nanos6 = nanos6-git; +## llvm-ompss2 = llvm-ompss2; +# }; dummy = callPackage ./bsc/dummy/default.nix { }; chroot = callPackage ./test/chroot.nix {}; +# llvmOmpss2Packages = callPackage bsc/llvm-ompss2/11/default.nix {}; + + + clang-ompss2-unwrapped = callPackage ./bsc/llvm-ompss2/clang.nix { + stdenv = pkgs.llvmPackages_10.stdenv; + }; + + clang-ompss2 = callPackage bsc/llvm-ompss2/default.nix { + nanos6 = nanos6-git; + inherit clang-ompss2-unwrapped; + }; + + stdenv-nanos6 = pkgs.clangStdenv.override { + cc = clang-ompss2; + }; + + test-clang-ompss2 = callPackage ./test/compilers/clang-ompss2.nix { + stdenv = stdenv-nanos6; + nanos6 = nanos6-git; + inherit clang-ompss2; + }; + + cpic = callPackage ./bsc/cpic/default.nix { + stdenv = stdenv-nanos6; + tampi = tampi; + mpi = mpi; + nanos6 = nanos6-git; +# llvm-ompss2 = llvm-ompss2; + }; + }; + in pkgs // self diff --git a/test/compilers/clang-ompss2.nix b/test/compilers/clang-ompss2.nix new file mode 100644 index 0000000..6fe0e45 --- /dev/null +++ b/test/compilers/clang-ompss2.nix @@ -0,0 +1,20 @@ +{stdenv, clang-ompss2, nanos6}: + +stdenv.mkDerivation rec { + version = "0.0.1"; + name = "test-clang-ompss2"; + src = ./.; + buildInputs = [ clang-ompss2 nanos6 ]; + + buildPhase = '' + export NIX_DEBUG=6 + clang -fompss-2 hello.c -o hello + ./hello + clang -fompss-2 hello.cc -o hello + ./hello + ''; + + installPhase = '' + mkdir -p $out + ''; +} diff --git a/test/compilers/hello.c b/test/compilers/hello.c new file mode 100644 index 0000000..f170c55 --- /dev/null +++ b/test/compilers/hello.c @@ -0,0 +1,7 @@ +#include + +int main() +{ + printf("Hello world!\n"); + return 0; +} diff --git a/test/compilers/hello.cc b/test/compilers/hello.cc new file mode 100644 index 0000000..f170c55 --- /dev/null +++ b/test/compilers/hello.cc @@ -0,0 +1,7 @@ +#include + +int main() +{ + printf("Hello world!\n"); + return 0; +}