From 1f3674345921cbdd03f628eced7ede052ae4778a Mon Sep 17 00:00:00 2001 From: Rodrigo Arias Mallo Date: Wed, 1 Jul 2020 17:58:29 +0200 Subject: [PATCH] Add intel compiler --- bsc/apps/nbody/default.nix | 7 +++-- bsc/intel-compiler/default.nix | 57 ++++++++++++++-------------------- bsc/intel-compiler/icc.nix | 47 ++++++++++++++++++++++++++++ bsc/intel-compiler/license.nix | 39 +++++++++++++++++++++++ default.nix | 10 ++++-- 5 files changed, 121 insertions(+), 39 deletions(-) create mode 100644 bsc/intel-compiler/icc.nix create mode 100644 bsc/intel-compiler/license.nix diff --git a/bsc/apps/nbody/default.nix b/bsc/apps/nbody/default.nix index 2bee99a..49e8597 100644 --- a/bsc/apps/nbody/default.nix +++ b/bsc/apps/nbody/default.nix @@ -4,6 +4,7 @@ , mpi , tampi , mcxx +, icc }: stdenv.mkDerivation rec { @@ -15,15 +16,14 @@ stdenv.mkDerivation rec { ref = "master"; }; - dontStrip = true; - patchPhase = '' - sed -i 's/mpicc/mpigcc/g' Makefile + #sed -i 's/gcc/icc/g' Makefile ''; buildInputs = [ nanos6 mpi + icc tampi mcxx ]; @@ -32,4 +32,5 @@ stdenv.mkDerivation rec { mkdir -p $out/bin cp nbody_* $out/bin/ ''; + } diff --git a/bsc/intel-compiler/default.nix b/bsc/intel-compiler/default.nix index 875b72e..f9964a8 100644 --- a/bsc/intel-compiler/default.nix +++ b/bsc/intel-compiler/default.nix @@ -1,40 +1,29 @@ -{ stdenv -, fetchurl -, rpmextract +{ + stdenv +, gcc +, nanos6 +, icc-unwrapped +, wrapCCWith +, libstdcxxHook +, intel-license }: -stdenv.mkDerivation rec { - version = "2019.1.217"; - name = "intel-compiler-${version}"; +let + targetConfig = stdenv.targetPlatform.config; + inherit gcc; +in wrapCCWith rec { + cc = icc-unwrapped; + extraPackages = [ libstdcxxHook ]; + extraBuildCommands = '' + 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}/lib" >> $out/nix-support/cc-ldflags - # From Arch Linux PKGBUILD - dir_nr="16526"; - year="2020"; - v_a="1"; - v_b="217"; - update="1"; - composer_xe_dir="compilers_and_libraries_${year}.${v_a}.${v_b}"; - tgz="parallel_studio_xe_2020_update${update}_cluster_edition.tgz"; - - # sha256-/RHY3nKyvWBHT4vOe0Y+TLsiVZabnq8k9olXWqKiq6s= - src = fetchurl { - url = "http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/${dir_nr}/${tgz}"; - sha256 = "1axblai5lmw9yqjaz7lvjraj5fsc7r37pklb9x3n1gdjfbgdh4gx"; - }; + echo "export INTEL_LICENSE_FILE=${intel-license}" \ + >> $out/nix-support/setup-hook - buildInputs = [ - rpmextract - ]; - - installPhase = '' - rpmextract rpm/intel-icc-*.rpm - rpmextract rpm/intel-comp-*.rpm - - mkdir -p $out/{bin,lib,include} - - pushd ./opt/intel/${composer_xe_dir}/linux/ - cp -a bin/intel64/* $out/bin/ - cp -a compiler/include/* $out/include/ - popd + # Create the wrappers for icc and icpc + wrap icc $wrapper $ccPath/icc + wrap icpc $wrapper $ccPath/icpc ''; } diff --git a/bsc/intel-compiler/icc.nix b/bsc/intel-compiler/icc.nix new file mode 100644 index 0000000..620e3dc --- /dev/null +++ b/bsc/intel-compiler/icc.nix @@ -0,0 +1,47 @@ +{ stdenv +, fetchurl +, rpmextract +, autoPatchelfHook +, gcc +}: + +stdenv.mkDerivation rec { + version = "2019.1.217"; + name = "intel-compiler-${version}"; + + # From Arch Linux PKGBUILD + dir_nr="16526"; + year="2020"; + v_a="1"; + v_b="217"; + update="1"; + composer_xe_dir="compilers_and_libraries_${year}.${v_a}.${v_b}"; + tgz="parallel_studio_xe_2020_update${update}_cluster_edition.tgz"; + + src = fetchurl { + url = "http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/${dir_nr}/${tgz}"; + sha256 = "1axblai5lmw9yqjaz7lvjraj5fsc7r37pklb9x3n1gdjfbgdh4gx"; + }; + + buildInputs = [ + rpmextract + autoPatchelfHook + gcc.cc.lib + ]; + + installPhase = '' + rpmextract rpm/intel-icc-*.rpm + rpmextract rpm/intel-comp-*.rpm + rpmextract rpm/intel-c-comp-*.rpm + rpmextract rpm/intel-openmp*.rpm + + mkdir -p $out/{bin,lib,include} + + pushd ./opt/intel/${composer_xe_dir}/linux/ + cp -a bin/intel64/* $out/bin/ + cp -a compiler/include/* $out/include/ + cp -a compiler/lib/intel64_lin/* $out/lib/ + rm $out/lib/*.dbg + popd + ''; +} diff --git a/bsc/intel-compiler/license.nix b/bsc/intel-compiler/license.nix new file mode 100644 index 0000000..acfba21 --- /dev/null +++ b/bsc/intel-compiler/license.nix @@ -0,0 +1,39 @@ +{ stdenv +, requireFile +}: + +stdenv.mkDerivation rec { + name = "intel-compiler-license"; + version = "2019.7.217"; + + src = requireFile { + name = "license.lic"; + sha256 = "06g2xgm1lch6zqfkhb768wacdx46kf61mfvj5wfpyssw0anr0x9q"; + message = '' + The Intel Compiler requires a license. You can get one (free of charge) if + you meet the requeriments at the website: + + https://software.intel.com/content/www/us/en/develop/articles/qualify-for-free-software.html#opensourcecontributor + + Or you can use your own license. Add it to the store with: + + $ nix-store --add-fixed sha256 license.lic + /nix/store/2p9v0nvsl3scshjx348z6j32rh7ac0db-license.lic + + Notice that the name must match exactly "license.lic". + + Then update the hash in the bsc/intel-compiler/license.nix file using the + nix-hash command with: + + $ nix-hash --type sha256 --base32 --flat /nix/store/2p9v0nvsl3scshjx348z6j32rh7ac0db-license.lic + 06g2xgm1lch6zqfkhb768wacdx46kf61mfvj5wfpyssw0anr0x9q + ''; + }; + + dontUnpack = true; + + installPhase = '' + mkdir -p $out + cp $src $out/ + ''; +} diff --git a/default.nix b/default.nix index a593fb2..ec25a8a 100644 --- a/default.nix +++ b/default.nix @@ -43,8 +43,14 @@ let enableDebug = false; }; - intel-compiler = intel-compiler-2020; - intel-compiler-2020 = callPackage ./bsc/intel-compiler/default.nix { + icc-unwrapped = callPackage ./bsc/intel-compiler/icc.nix { + }; + + icc = callPackage bsc/intel-compiler/default.nix { + intel-license = icc-license; + }; + + icc-license = callPackage bsc/intel-compiler/license.nix { }; fftw = callPackage ./bsc/fftw/default.nix {