{bintools,cc}-wrapper: Fix setup hook to respect the role of the cc-compiler

We now have the information to properly determine the role the
cc-wrapper dependency has, by taking advantage of `offset`. No longer
use the soon-to-be-deprecated crossConfig environment variable, the
temp hack used before this change.
This commit is contained in:
John Ericson 2017-08-03 12:45:06 -04:00
parent 7f3ca3e21a
commit a036473a0a
3 changed files with 75 additions and 30 deletions

View File

@ -2,12 +2,17 @@
# #
# See comments in cc-wrapper's setup hook. This works exactly the same way. # See comments in cc-wrapper's setup hook. This works exactly the same way.
set -u
# Skip setup hook if we're not a build-time dep
(( "$hostOffset" < 0 )) || return 0
bintoolsWrapper_addLDVars () { bintoolsWrapper_addLDVars () {
case $depOffset in case $depHostOffset in
-1) local role='BUILD_' ;; -1) local role='BUILD_' ;;
0) local role='' ;; 0) local role='' ;;
1) local role='TARGET_' ;; 1) local role='TARGET_' ;;
*) echo "bintools-wrapper: Error: Cannot be used with $depOffset-offset deps, " >2; *) echo "bintools-wrapper: Error: Cannot be used with $depHostOffset-offset deps" >2;
return 1 ;; return 1 ;;
esac esac
@ -20,17 +25,29 @@ bintoolsWrapper_addLDVars () {
fi fi
} }
if [ -n "${crossConfig:-}" ]; then case $targetOffset in
export NIX_BINTOOLS_WRAPPER_@infixSalt@_TARGET_BUILD=1 -1)
role_pre='BUILD_' export NIX_BINTOOLS_WRAPPER_@infixSalt@_TARGET_BUILD=1
role_post='_FOR_BUILD' role_pre='BUILD_'
else role_post='_FOR_BUILD'
export NIX_BINTOOLS_WRAPPER_@infixSalt@_TARGET_HOST=1 ;;
role_pre="" 0)
role_post='' export NIX_BINTOOLS_WRAPPER_@infixSalt@_TARGET_HOST=1
fi role_pre=''
role_post=''
;;
1)
export NIX_BINTOOLS_WRAPPER_@infixSalt@_TARGET_TARGET=1
role_pre='TARGET_'
role_post='_FOR_TARGET'
;;
*)
echo "cc-wrapper: used as improper sort of dependency" >2;
return 1
;;
esac
envHooks+=(bintoolsWrapper_addLDVars) addEnvHooks "$targetOffset" bintoolsWrapper_addLDVars
# shellcheck disable=SC2157 # shellcheck disable=SC2157
if [ -n "@bintools_bin@" ]; then if [ -n "@bintools_bin@" ]; then
@ -65,3 +82,4 @@ done
# No local scope in sourced file # No local scope in sourced file
unset -v role_pre role_post cmd upper_case unset -v role_pre role_post cmd upper_case
set +u

View File

@ -54,19 +54,23 @@
# For more details, read the individual files where the mechanisms used to # For more details, read the individual files where the mechanisms used to
# accomplish this will be individually documented. # accomplish this will be individually documented.
set -u
# Skip setup hook if we're not a build-time dep
(( "$hostOffset" < 0 )) || return 0
# It's fine that any other cc-wrapper will redefine this. Bash functions close # It's fine that any other cc-wrapper will redefine this. Bash functions close
# over no state, and there's no @-substitutions within, so any redefined # over no state, and there's no @-substitutions within, so any redefined
# function is guaranteed to be exactly the same. # function is guaranteed to be exactly the same.
ccWrapper_addCVars () { ccWrapper_addCVars () {
# The `depOffset` describes how the platforms of the dependencies are slid # The `depHostOffset` describes how the host platform of the dependencies
# relative to the depending package. It is brought into scope of the # are slid relative to the depending package. It is brought into scope of
# environment hook defined as the role of the dependency being applied. # the environment hook defined as the role of the dependency being applied.
case $depOffset in case $depHostOffset in
-1) local role='BUILD_' ;; -1) local role='BUILD_' ;;
0) local role='' ;; 0) local role='' ;;
1) local role='TARGET_' ;; 1) local role='TARGET_' ;;
*) echo "cc-wrapper: Error: Cannot be used with $depOffset-offset deps, " >2; *) echo "cc-wrapper: Error: Cannot be used with $depHostOffset-offset deps" >2;
return 1 ;; return 1 ;;
esac esac
@ -87,20 +91,31 @@ ccWrapper_addCVars () {
# #
# We also need to worry about what role is being added on *this* invocation of # We also need to worry about what role is being added on *this* invocation of
# setup-hook, which `role` tracks. # setup-hook, which `role` tracks.
if [ -n "${crossConfig:-}" ]; then case $targetOffset in
export NIX_CC_WRAPPER_@infixSalt@_TARGET_BUILD=1 -1)
role_pre='BUILD_' export NIX_CC_WRAPPER_@infixSalt@_TARGET_BUILD=1
role_post='_FOR_BUILD' role_pre='BUILD_'
else role_post='_FOR_BUILD'
export NIX_CC_WRAPPER_@infixSalt@_TARGET_HOST=1 ;;
role_pre='' 0)
role_post='' export NIX_CC_WRAPPER_@infixSalt@_TARGET_HOST=1
fi role_pre=''
role_post=''
;;
1)
export NIX_CC_WRAPPER_@infixSalt@_TARGET_TARGET=1
role_pre='TARGET_'
role_post='_FOR_TARGET'
;;
*)
echo "cc-wrapper: used as improper sort of dependency" >2;
return 1
;;
esac
# Eventually the exact sort of env-hook we create will depend on the role. This # We use the `targetOffset` to choose the right env hook to accumulate the right
# is because based on what relative platform we are targeting, we use different # sort of deps (those with that offset).
# dependencies. addEnvHooks "$targetOffset" ccWrapper_addCVars
envHooks+=(ccWrapper_addCVars)
# Note 1: these come *after* $out in the PATH (see setup.sh). # Note 1: these come *after* $out in the PATH (see setup.sh).
# Note 2: phase separation makes this look useless to shellcheck. # Note 2: phase separation makes this look useless to shellcheck.
@ -131,3 +146,4 @@ export CXX${role_post}=@named_cxx@
# No local scope in sourced file # No local scope in sourced file
unset -v role_pre role_post unset -v role_pre role_post
set +u

View File

@ -326,6 +326,17 @@ declare -ra pkgTargetHookVars=(envTargetTargetHook)
declare -ra pkgHookVarVars=(pkgBuildHookVars pkgHostHookVars pkgTargetHookVars) declare -ra pkgHookVarVars=(pkgBuildHookVars pkgHostHookVars pkgTargetHookVars)
# Add env hooks for all sorts of deps with the specified host offset.
addEnvHooks() {
local depHostOffset="$1"
shift
local pkgHookVarsSlice="${pkgHookVarVars[$depHostOffset + 1]}[@]"
local pkgHookVar
for pkgHookVar in "${!pkgHookVarsSlice}"; do
eval "${pkgHookVar}s"'+=("$@")'
done
}
# Propagated dep files # Propagated dep files