diff options
author | Manuel Mendez <github@i.m.mmlb.dev> | 2022-06-03 17:00:10 -0400 |
---|---|---|
committer | Manuel Mendez <github@i.m.mmlb.dev> | 2022-06-09 16:57:15 -0400 |
commit | 19b6ccd9acb89585cb9df7fae22e68baacda3534 (patch) | |
tree | ca0b1fa08a7636923f17bcb9771cdd12b12dba37 /pkgs/build-support/cc-wrapper | |
parent | e91b5670e3fc0a7e39b9f3e469bedfe742d42eda (diff) |
cc-wrapper: Allow for override of -target for clang/clang++
This enables users to make use of clang's multi-platform/target support without having to go through full cross system setup. This is especially useful for generating bpf object files, I'm not even usre what would a no-userland cross compile system tuple even look like to even try going that route. Fixes #176128
Diffstat (limited to 'pkgs/build-support/cc-wrapper')
-rw-r--r-- | pkgs/build-support/cc-wrapper/cc-wrapper.sh | 6 | ||||
-rw-r--r-- | pkgs/build-support/cc-wrapper/default.nix | 13 |
2 files changed, 11 insertions, 8 deletions
diff --git a/pkgs/build-support/cc-wrapper/cc-wrapper.sh b/pkgs/build-support/cc-wrapper/cc-wrapper.sh index 334bd72e4d4d6..b8049dafb9830 100644 --- a/pkgs/build-support/cc-wrapper/cc-wrapper.sh +++ b/pkgs/build-support/cc-wrapper/cc-wrapper.sh @@ -29,6 +29,7 @@ cc1=0 cxxInclude=1 cxxLibrary=1 cInclude=1 +needsTarget=@needsTarget@ expandResponseParams "$@" linkType=$(checkLinkType "${params[@]}") @@ -46,6 +47,7 @@ while (( "$n" < "$nParams" )); do -nostdinc) cInclude=0 cxxInclude=0 ;; -nostdinc++) cxxInclude=0 ;; -nostdlib) cxxLibrary=0 ;; + -target|--target=*) needsTarget=0;; -x) case "$p2" in *-header) dontLink=1 ;; @@ -159,6 +161,10 @@ if [ "$dontLink" != 1 ]; then export NIX_LINK_TYPE_@suffixSalt@=$linkType fi +if [ $needsTarget == 1 ]; then + extraAfter+=(-target @defaultTarget@) +fi + # As a very special hack, if the arguments are just `-v', then don't # add anything. This is to prevent `gcc -v' (which normally prints # out the version number and returns exit code 0) from printing out diff --git a/pkgs/build-support/cc-wrapper/default.nix b/pkgs/build-support/cc-wrapper/default.nix index 35d714f9b41e1..1fc0491cbec7f 100644 --- a/pkgs/build-support/cc-wrapper/default.nix +++ b/pkgs/build-support/cc-wrapper/default.nix @@ -208,6 +208,7 @@ stdenv.mkDerivation { + '' export named_cc=${targetPrefix}cc export named_cxx=${targetPrefix}c++ + export needsTarget=0 if [ -e $ccPath/${targetPrefix}gcc ]; then wrap ${targetPrefix}gcc $wrapper $ccPath/${targetPrefix}gcc @@ -215,6 +216,8 @@ stdenv.mkDerivation { export named_cc=${targetPrefix}gcc export named_cxx=${targetPrefix}g++ elif [ -e $ccPath/clang ]; then + needsTarget=1 + export defaultTarget=${targetPlatform.config} wrap ${targetPrefix}clang $wrapper $ccPath/clang ln -s ${targetPrefix}clang $out/bin/${targetPrefix}cc export named_cc=${targetPrefix}clang @@ -225,6 +228,8 @@ stdenv.mkDerivation { wrap ${targetPrefix}g++ $wrapper $ccPath/${targetPrefix}g++ ln -s ${targetPrefix}g++ $out/bin/${targetPrefix}c++ elif [ -e $ccPath/clang++ ]; then + needsTarget=1 + export defaultTarget=${targetPlatform.config} wrap ${targetPrefix}clang++ $wrapper $ccPath/clang++ ln -s ${targetPrefix}clang++ $out/bin/${targetPrefix}c++ fi @@ -298,14 +303,6 @@ stdenv.mkDerivation { '' ## - ## General Clang support - ## - + optionalString isClang '' - - echo "-target ${targetPlatform.config}" >> $out/nix-support/cc-cflags - '' - - ## ## GCC libs for non-GCC support ## + optionalString useGccForLibs '' |