{ lib, stdenv, langJit, }: { # Note [Cross-compiler stripping] # gcc requires delicate stripping as it installs ELF files for both # HOST and TARGET platforms. It requires according strip tool otherwise # strip could remove sections it's not aware of. # Example ARM breakage by x86_64 strip: https://bugs.gentoo.org/697428 # # Let's recap the file layout for directories with object files for a # cross-compiler: # # $out (host != target) # `- bin: HOST # lib/*.{a,o}: HOST # `- gcc///*.{a,o}: TARGET # `- plugin/: HOST # `- lib{,32,64,x32}: symlink to lib or identical layout # `- libexec/: HOST # `- /: TARGET # # $out (host == target) has identical directory layout. # # $lib (host != target): # `- /lib/*.{la,so}: TARGET # # $lib (host == target): # `- lib/*.{la,so}: HOST # The rest of stripDebugList{Host,Target} will be populated in # postInstall to disambiguate lib/ object files. stripDebugList = [ "bin" "libexec" ]; stripDebugListTarget = [ stdenv.targetPlatform.config ]; preFixup = '' # Populate most delicated lib/ part of stripDebugList{,Target} updateDebugListPaths() { local oldOpts oldOpts="$(shopt -p nullglob)" || true shopt -s nullglob pushd $out local -ar outHostFiles=( lib{,32,64}/*.{a,o,so*} lib{,32,64}/gcc/${stdenv.targetPlatform.config}/*/plugin ) local -ar outTargetFiles=( lib{,32,64}/gcc/${stdenv.targetPlatform.config}/*/*.{a,o,so*} ) popd '' + lib.optionalString (!langJit) '' ${ # keep indentation "" } pushd $lib local -ar libHostFiles=( lib{,32,64}/*.{a,o,so*} ) local -ar libTargetFiles=( lib{,32,64}/${stdenv.targetPlatform.config}/*.{a,o,so*} ) popd '' + '' eval "$oldOpts" stripDebugList="$stripDebugList ''${outHostFiles[*]} ''${libHostFiles[*]}" stripDebugListTarget="$stripDebugListTarget ''${outTargetFiles[*]} ''${libTargetFiles[*]}" } updateDebugListPaths ''; }