Use lld linker for clangOmpss2 for LTO
This commit is contained in:
parent
5753f0c312
commit
84623ea9d0
@ -67,7 +67,7 @@ stdenv.mkDerivation rec {
|
||||
"-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;compiler-rt;flang"
|
||||
"-DLLVM_ENABLE_PROJECTS=clang;openmp;compiler-rt;flang;lld"
|
||||
"-DLLVM_ENABLE_ASSERTIONS=${enableAssertions}"
|
||||
"-DLLVM_INSTALL_TOOLCHAIN_ONLY=ON"
|
||||
"-DCMAKE_INSTALL_BINDIR=bin"
|
||||
|
@ -4,14 +4,27 @@
|
||||
, nanos6
|
||||
, clangOmpss2Unwrapped
|
||||
, wrapCCWith
|
||||
, llvmPackages
|
||||
}:
|
||||
|
||||
|
||||
let
|
||||
|
||||
# We need to replace the lld linker from bintools with our linker just built,
|
||||
# otherwise we run into incompatibility issues when mixing compiler and linker
|
||||
# versions.
|
||||
bintools-unwrapped = llvmPackages.tools.bintools-unwrapped.override {
|
||||
lld = clangOmpss2Unwrapped;
|
||||
};
|
||||
bintools = llvmPackages.tools.bintools.override {
|
||||
bintools = bintools-unwrapped;
|
||||
};
|
||||
|
||||
targetConfig = stdenv.targetPlatform.config;
|
||||
inherit gcc nanos6;
|
||||
in wrapCCWith rec {
|
||||
cc = clangOmpss2Unwrapped;
|
||||
in wrapCCWith {
|
||||
inherit cc bintools;
|
||||
extraBuildCommands = ''
|
||||
echo "-target ${targetConfig}" >> $out/nix-support/cc-cflags
|
||||
echo "-B${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}" >> $out/nix-support/cc-cflags
|
||||
|
11
overlay.nix
11
overlay.nix
@ -105,6 +105,7 @@ let
|
||||
|
||||
clangOmpss2 = appendPasstru (
|
||||
callPackage ./bsc/llvm-ompss2/default.nix {
|
||||
llvmPackages = self.llvmPackages_latest;
|
||||
clangOmpss2Unwrapped = bsc.clangOmpss2Unwrapped;
|
||||
}) { CC = "clang"; CXX = "clang++"; };
|
||||
|
||||
@ -113,6 +114,11 @@ let
|
||||
clangOmpss2Unwrapped = bsc.clangOmpss2UnwrappedGit;
|
||||
}) { CC = "clang"; CXX = "clang++"; };
|
||||
|
||||
stdenvClangOmpss2 = self.stdenv.override {
|
||||
cc = bsc.clangOmpss2;
|
||||
allowedRequisites = null;
|
||||
};
|
||||
|
||||
mcxx = bsc.mcxxRelease;
|
||||
mcxxRelease = callPackage ./bsc/mcxx/default.nix { };
|
||||
mcxxGit = callPackage ./bsc/mcxx/git.nix { };
|
||||
@ -302,6 +308,7 @@ let
|
||||
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.lto = callPackage ./test/compilers/lto.nix { };
|
||||
compilers.intel2023.icx.c = compilers.hello-c.override {
|
||||
stdenv = bsc.intel2023.stdenv;
|
||||
};
|
||||
@ -317,6 +324,9 @@ let
|
||||
compilers.intel2023.ifort = compilers.hello-f.override {
|
||||
stdenv = bsc.intel2023.stdenv-ifort;
|
||||
};
|
||||
compilers.clangOmpss2.lto = compilers.lto.override {
|
||||
stdenv = bsc.stdenvClangOmpss2;
|
||||
};
|
||||
};
|
||||
|
||||
testAll = with bsc.test; [
|
||||
@ -325,6 +335,7 @@ let
|
||||
compilers.intel2023.icx.cpp
|
||||
compilers.intel2023.icc.cpp
|
||||
compilers.intel2023.ifort
|
||||
compilers.clangOmpss2.lto
|
||||
];
|
||||
|
||||
ci = import ./test/ci.nix {
|
||||
|
43
test/compilers/lto.nix
Normal file
43
test/compilers/lto.nix
Normal file
@ -0,0 +1,43 @@
|
||||
{ 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;
|
||||
}
|
||||
'';
|
||||
in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
version = "0.0.1";
|
||||
name = "lto-c";
|
||||
buildInputs = [ stdenv which strace ];
|
||||
src = hello_c;
|
||||
dontUnpack = true;
|
||||
dontConfigure = true;
|
||||
NIX_DEBUG = 0;
|
||||
buildPhase = ''
|
||||
set -x
|
||||
echo CC=$CC
|
||||
echo LD=$LD
|
||||
echo -------------------------------------------
|
||||
env
|
||||
echo -------------------------------------------
|
||||
|
||||
cp ${hello_c} hello.c
|
||||
$CC -v -flto hello.c -o hello
|
||||
./hello
|
||||
|
||||
set +x
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
touch $out
|
||||
'';
|
||||
}
|
Loading…
Reference in New Issue
Block a user