From a6549c1908a83e8071493712bef67f9c19b7f847 Mon Sep 17 00:00:00 2001 From: Rodrigo Arias Mallo Date: Wed, 16 Jun 2021 14:26:48 +0200 Subject: [PATCH] intel: add intel compiler 2021.2.0 --- bsc/intel-compiler/icc2021.nix | 145 +++++++++++++++++++++++++++++ bsc/intel-compiler/wrapper2021.nix | 26 ++++++ overlay.nix | 10 +- 3 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 bsc/intel-compiler/icc2021.nix create mode 100644 bsc/intel-compiler/wrapper2021.nix diff --git a/bsc/intel-compiler/icc2021.nix b/bsc/intel-compiler/icc2021.nix new file mode 100644 index 0000000..c995b5f --- /dev/null +++ b/bsc/intel-compiler/icc2021.nix @@ -0,0 +1,145 @@ +{ stdenv +, lib +, fetchurl +, dpkg +, rsync +, libffi +, libelf +, libxml2 +, hwloc +, autoPatchelfHook +}: + +with lib; + +let + + getsrc = url: sha256: fetchurl { inherit url sha256; }; + + version = "2021.2.0"; + _debpkgrel = "610"; + tbbrel = "357"; + + # Shorhands + main = "intel-oneapi-dpcpp-cpp"; + compiler = "intel-oneapi-compiler-dpcpp-cpp"; + shared = "intel-oneapi-compiler-shared"; + openmp = "intel-oneapi-openmp"; + tbb = "intel-oneapi-tbb"; + + # From Arch Linux PKGBUILD: + # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=intel-oneapi-compiler-dpcpp-cpp + debs = [ + # From intel-oneapi-compiler-dpcpp-cpp + "${main}-${version}-${version}-${_debpkgrel}_amd64.deb" + "${compiler}-common-${version}-${version}-${_debpkgrel}_all.deb" + "${compiler}-runtime-${version}-${version}-${_debpkgrel}_amd64.deb" + + # From intel-oneapi-compiler-shared + "${shared}-${version}-${version}-${_debpkgrel}_amd64.deb" + "${shared}-runtime-${version}-${version}-${_debpkgrel}_amd64.deb" + "${shared}-common-${version}-${version}-${_debpkgrel}_all.deb" + "${shared}-common-runtime-${version}-${version}-${_debpkgrel}_all.deb" + "${compiler}-classic-fortran-shared-runtime-${version}-${version}-${_debpkgrel}_amd64.deb" + + # From intel-oneapi-openmp + "${openmp}-${version}-${version}-${_debpkgrel}_amd64.deb" + "${openmp}-common-${version}-${version}-${_debpkgrel}_all.deb" + + # From intel-oneapi-tbb + "${tbb}-${version}-${version}-${tbbrel}_amd64.deb" + "${tbb}-devel-${version}-${version}-${tbbrel}_amd64.deb" + "${tbb}-common-${version}-${version}-${tbbrel}_all.deb" + "${tbb}-common-devel-${version}-${version}-${tbbrel}_all.deb" + ]; + + apthost = "https://apt.repos.intel.com/oneapi/pool/main/"; + urls = map (x: apthost + x) debs; + + sums = [ + # From intel-oneapi-compiler-dpcpp-cpp + "0pwsfzkazr9yf6v6lgwb3p2in6ch3rlcc9qcfarkyqn052p760kk" + "0vzsanldhs4ym4gsfn0zjqm03x53ma1zjkj24hpkhpsvlr2r069w" + "0nx62v6g0wl70lqdh7sh7gfgxbynhrrips9gpj9if60ngz6fm21m" + + # From intel-oneapi-compiler-shared + "1al80pcy2r3q2r2pm04sva7rd3z6y287mkdv5jq4p5bfd8yi14d4" + "07rp0cjmbgj48wly9dm6ibxzbsanmgrsjjqr7mx688ms6qbhv314" + "1pf4xckyyhssjknhs6hwampjsz2qjlg81jw2fc441zaccwf25yf3" + "0hk0x4wq60g9wnn9j051v25zcmbasjdzp34xfvrihmcvyws0s69g" + "0dhbw8kshw4abqc9zf891z5ic0x13x3kvhk56nrqkqgcfwps9w8a" + + # From intel-oneapi-openmp + "1wqy2sjwlqdh72zhfrxl9pm106hjzfdbbm98cxigbg20fb5lbv5a" + "19nbqypvqcf8c3mwriaqrmp5igjpwvwrb9mq2fxa5i40w7bhlxjl" + + # From intel-oneapi-tbb + "1dpii3g861kimky0x7dqcj6hg7zb6i5kw1wgwrxdc5yxhi5slbm9" + "0bl1flm6w0w9nzrh34ig4p9qz2gbdgw9q14as2pwp8flicd8p899" + "0w3kip6q713v1xlfc10ai4v15cbwmbqrv8r1f5x6pfqdbb0bpmbv" + "0v95nmddyi0mjjdvm07w9fm3vq4a0wkx7zxlyzn2f4xg38qc5j73" + ]; + +in + stdenv.mkDerivation { + inherit version; + name = "intel-compiler-${version}"; + + passthru = { + CC = "icc"; + CXX = "icpc"; + }; + + srcs = zipListsWith getsrc urls sums; + + buildInputs = [ + dpkg + rsync + libffi + libelf + libxml2 + hwloc + autoPatchelfHook + ]; + + dontBuild = true; + + # The gcc package is required for building other programs + #propagatedBuildInputs = [ gcc ]; + + unpackCmd = '' + dpkg -x $curSrc . + ''; + + # FIXME: Some dependencies are missing + autoPatchelfIgnoreMissingDeps=true; + + # Compiler + installPhase = '' + mkdir -p $out/{bin,lib,include} + + pushd intel/oneapi/compiler/${version}/linux + # Binaries + rsync -a bin/ $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 include/ $out/include/ + rsync -a compiler/include/ $out/include/ + popd + + # TBB + pushd intel/oneapi/tbb/${version} + # Libraries + rsync -a lib/intel64/gcc4.8/ $out/lib/ + + # Headers + rsync -a include/ $out/include/ + popd + ''; + + } diff --git a/bsc/intel-compiler/wrapper2021.nix b/bsc/intel-compiler/wrapper2021.nix new file mode 100644 index 0000000..b1c6185 --- /dev/null +++ b/bsc/intel-compiler/wrapper2021.nix @@ -0,0 +1,26 @@ +{ + stdenv +, gcc +, iccUnwrapped +, wrapCCWith +}: + +let + targetConfig = stdenv.targetPlatform.config; + inherit gcc; +in wrapCCWith rec { + cc = iccUnwrapped; + extraBuildCommands = '' + echo "-B${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}" >> $out/nix-support/cc-cflags + echo "-isystem ${iccUnwrapped}/include" >> $out/nix-support/cc-cflags + echo "-isystem ${iccUnwrapped}/include/icc" >> $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 + + # Create the wrappers for icc and icpc + wrap icx $wrapper $ccPath/icx + wrap icx $wrapper $ccPath/icpx + wrap icx $wrapper $ccPath/clang + wrap icx $wrapper $ccPath/clang++ + ''; +} diff --git a/overlay.nix b/overlay.nix index 3599ecf..4d7a302 100644 --- a/overlay.nix +++ b/overlay.nix @@ -37,13 +37,21 @@ let intel-mpi = bsc.intelMpi; }; + icc2021Unwrapped = callPackage ./bsc/intel-compiler/icc2021.nix { }; + # A wrapper script that puts all the flags and environment vars # properly and calls the intel compiler binary - icc = appendPasstru (callPackage ./bsc/intel-compiler/default.nix { + icc2020 = appendPasstru (callPackage ./bsc/intel-compiler/default.nix { iccUnwrapped = bsc.iccUnwrapped; intelLicense = bsc.intelLicense; }) { CC = "icc"; CXX = "icpc"; }; + icc2021 = appendPasstru (callPackage ./bsc/intel-compiler/wrapper2021.nix { + iccUnwrapped = bsc.icc2021Unwrapped; + }) { CC = "icc"; CXX = "icpc"; }; + + icc = bsc.icc2020; + # We need to set the cc.CC and cc.CXX attributes, in order to # determine the name of the compiler gcc = appendPasstru self.gcc { CC = "gcc"; CXX = "g++"; };