diff --git a/flake/src.nix b/flake/src.nix index cea54038..056407ab 100644 --- a/flake/src.nix +++ b/flake/src.nix @@ -131,6 +131,7 @@ "intel.oneapi.lin.mpi.runtime,v=2021.15.0+493" "intel.oneapi.lin.umf,v=0.10.0+355" "intel.oneapi.lin.tbb.runtime,v=2022.1.0+425" + "intel.oneapi.lin.compilers-common,v=2025.1.1+10" ]; }; } diff --git a/packages/default.nix b/packages/default.nix index 7248753c..fe9c8559 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -125,10 +125,11 @@ inputs: rec blog = inputs.pkgs.callPackage inputs.topInputs.blog { inherit (inputs.topInputs) hextra; }; phono3py = inputs.pkgs.python3Packages.callPackage ./phono3py.nix { src = inputs.topInputs.phono3py; }; vm = inputs.pkgs.callPackage ./vm { inherit biu; stdenv = inputs.pkgs.clang18Stdenv; }; - oneapiPackages = + oneapiPackages = inputs.pkgs.lib.makeScope inputs.pkgs.newScope (final: { - stdenv = inputs.pkgs.callPackage ./oneapi/stdenv.nix { src = inputs.topInputs.self.src.oneapi; }; - }; + stdenv = inputs.pkgs.callPackage ./oneapi/stdenv.nix { src = inputs.topInputs.self.src.oneapi; inherit gccFull; }; + fmt = (inputs.pkgs.fmt.override { inherit (final) stdenv; }).overrideAttrs { doCheck = false; env.VERBOSE = "1"; }; + }); fromYaml = content: builtins.fromJSON (builtins.readFile (inputs.pkgs.runCommand "toJSON" {} diff --git a/packages/oneapi/stdenv.nix b/packages/oneapi/stdenv.nix index a156d8e1..fed9b1b1 100644 --- a/packages/oneapi/stdenv.nix +++ b/packages/oneapi/stdenv.nix @@ -1,6 +1,6 @@ { src, stdenv, autoPatchelfHook, wrapCCWith, config, overrideCC, makeSetupHook, writeScript, overrideInStdenv, - runCommand, + runCommand, lib, gccFull, gcc, glibc, zlib, zstd, libxml2, flock, numactl, ncurses, openssl, gmp, kdePackages, libxcrypt-legacy, libfabric, rdma-core, xorg, bash, p7zip, hwloc }: @@ -34,6 +34,14 @@ let popd cp -r install/compiler/${src.version}/{bin,include,lib,share} $out cp -r install/{mpi,tbb,umf}/*/lib $out + + # mv $out/bin/compiler/* $out/bin + # rm -r $out/bin/compiler + # mv $out/bin/clang%2B%2B $out/bin/clang++ + mv $out/bin/compiler/clang%2B%2B $out/bin/compiler/clang++ + + # mv $out/lib/crt/* $out/lib + # rm -r $out/lib/crt ''; autoPatchelfIgnoreMissingDeps = [ "libze_loader.so.1" "libcuda.so.1" "libhwloc.so.5" ]; passthru = { inherit src; }; @@ -42,32 +50,38 @@ let { cc = oneapi; extraBuildCommands = - '' - # provide libgcc_s.so but not libgomp.so - echo "-L${gcc.cc.libgcc}/lib" >> $out/nix-support/cc-ldflags + let + gcc = stdenv.cc.cc; + gccVersion = builtins.concatStringsSep "." (lib.take 3 (builtins.splitVersion gcc.version)); + in + '' + echo "-isystem ${oneapi}/include" >> $out/nix-support/cc-cflags + echo "-isystem ${oneapi}/include/intel64" >> $out/nix-support/cc-cflags + echo "-isystem ${oneapi}/include/icx" >> $out/nix-support/cc-cflags + echo "-isystem ${gcc}/include/c++/${gcc.version}/${stdenv.targetPlatform.config}" >> $out/nix-support/cc-cflags + echo "-isystem ${gcc}/include/c++/${gcc.version}" >> $out/nix-support/cc-cflags + echo "--gcc-toolchain=${stdenv.cc}/lib/gcc/x86_64-unknown-linux-gnu/14.2.1" >> $out/nix-support/cc-cflags + echo "-march=${config.oneapiArch}" >> $out/nix-support/cc-cflags-before - echo "-tp=${config.nvhpcArch}" >> $out/nix-support/cc-cflags-before + echo "-L${gcc.lib}/lib" >> $out/nix-support/cc-ldflags + echo "-L${gcc}/lib/gcc/${stdenv.targetPlatform.config}/${gccVersion}" >> $out/nix-support/cc-ldflags + echo "-L${oneapi}/lib" >> $out/nix-support/cc-ldflags + echo "-Lsome_path_does_not_exist" >> $out/nix-support/cc-ldflags - echo "-noswitcherror" >> $out/nix-support/cc-cflags + # echo 'export "PATH=${gcc}/bin:$PATH"' >> $out/nix-support/cc-wrapper-hook - # print verbose output for debugging - # echo "-v" >> $out/nix-support/cc-cflags + echo "" > $out/nix-support/add-hardening.sh - # echo "" > $out/nix-support/add-hardening.sh + echo "-v" >> $out/nix-support/cc-cflags - # substitute -idirafter in libc-cflags - # somehow -isystem does not work - sed -i 's/-idirafter/-I/g' $out/nix-support/libc-cflags - - for i in nvc nvc++ nvcc nvfortran; do - wrap $i $wrapper ${oneapi}/bin/$i - done - ''; + for i in icx icpx ifx; do + wrap $i $wrapper ${oneapi}/bin/$i + done + ''; }).overrideAttrs (prev: { installPhase = prev.installPhase + '' - export named_cc=nvc - export named_cxx=nvc++ - export named_fc=nvfortran + export named_cc=icx + export named_cxx=icpx + export named_fc=ifx '';}); -# in overrideInStdenv (overrideCC stdenv wrapper) [ ] -in oneapi +in overrideInStdenv (overrideCC stdenv wrapper) [ ]