-
-
Notifications
You must be signed in to change notification settings - Fork 15k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
treewide: Modular setup hooks #40139
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -190,7 +190,12 @@ stdenv.mkDerivation { | |
|
||
depsTargetTargetPropagated = extraPackages; | ||
|
||
setupHook = ./setup-hook.sh; | ||
wrapperName = "BINTOOLS_WRAPPER"; | ||
|
||
setupHooks = [ | ||
../setup-hooks/role.bash | ||
./setup-hook.sh | ||
]; | ||
|
||
postFixup = | ||
'' | ||
|
@@ -289,7 +294,7 @@ stdenv.mkDerivation { | |
set +u | ||
substituteAll ${./add-flags.sh} $out/nix-support/add-flags.sh | ||
substituteAll ${./add-hardening.sh} $out/nix-support/add-hardening.sh | ||
substituteAll ${../cc-wrapper/utils.sh} $out/nix-support/utils.sh | ||
substituteAll ${../wrapper-common/utils.bash} $out/nix-support/utils.bash | ||
|
||
## | ||
## Extra custom steps | ||
|
@@ -300,7 +305,7 @@ stdenv.mkDerivation { | |
|
||
inherit dynamicLinker expand-response-params; | ||
|
||
# for substitution in utils.sh | ||
# for substitution in utils.bash | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What is making these bash scripts? I know we have in the past assumed bash - but it seemed nice to make these in theory work on non-Bash shells. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Virtually all our stuff is bash-only. Given we're not on MS-DOS with max-3 file extensions, I figure it's best to be honest on use |
||
expandResponseParams = "${expand-response-params}/bin/expand-response-params"; | ||
|
||
meta = | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
# Since the same derivation can be depend on in multiple ways, we need to | ||
# accumulate *each* role (i.e. host and target platforms relative the depending | ||
# derivation) in which the derivation is used. | ||
# | ||
# The role is intened to be use as part of other variables names like | ||
# - $NIX_${role_pre}_SOMETHING | ||
# - $NIX_SOMETHING_${role_post} | ||
|
||
function getRole() { | ||
case $1 in | ||
-1) | ||
role_pre='BUILD_' | ||
role_post='_FOR_BUILD' | ||
;; | ||
0) | ||
role_pre='' | ||
role_post='' | ||
;; | ||
1) | ||
role_pre='TARGET_' | ||
role_post='_FOR_TARGET' | ||
;; | ||
*) | ||
echo "@name@: used as improper sort of dependency" >2 | ||
return 1 | ||
;; | ||
esac | ||
} | ||
|
||
# `hostOffset` describes how the host platform of the package is slid relative | ||
# to the depending package. `targetOffset` likewise describes the target | ||
# platform of the package. Both are brought into scope of the setup hook defined | ||
# for dependency whose setup hook is being processed relative to the package | ||
# being built. | ||
|
||
function getHostRole() { | ||
getRole "$hostOffset" | ||
} | ||
function getTargetRole() { | ||
getRole "$targetOffset" | ||
} | ||
|
||
# `depHostOffset` describes how the host platform of the dependencies are slid | ||
# relative to the depending package. `depTargetOffset` likewise describes the | ||
# target platform of dependenices. Both are brought into scope of the | ||
# environment hook defined for the dependency being applied relative to the | ||
# package being built. | ||
|
||
function getHostRoleEnvHook() { | ||
getRole "$depHostOffset" | ||
} | ||
function getTargetRoleEnvHook() { | ||
getRole "$depTargetOffset" | ||
} | ||
|
||
# This variant is inteneded specifically for code-prodocing tool wrapper scripts | ||
# `NIX_@wrapperName@_@infixSalt@_TARGET_*` tracks this (needs to be an exported | ||
# env var so can't use fancier data structures). | ||
function getTargetRoleWrapper() { | ||
case $targetOffset in | ||
-1) | ||
export NIX_@wrapperName@_@infixSalt@_TARGET_BUILD=1 | ||
;; | ||
0) | ||
export NIX_@wrapperName@_@infixSalt@_TARGET_HOST=1 | ||
;; | ||
1) | ||
export NIX_@wrapperName@_@infixSalt@_TARGET_TARGET=1 | ||
;; | ||
*) | ||
echo "@name@: used as improper sort of dependency" >2 | ||
return 1 | ||
;; | ||
esac | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,5 @@ | ||
# The `hostOffset` describes how the host platform of the dependencies are slid | ||
# relative to the depending package. It is brought into scope of the setup hook | ||
# defined as the role of the dependency whose hooks is being run. | ||
case $hostOffset in | ||
-1) local role='BUILD_' ;; | ||
0) local role='' ;; | ||
1) local role='TARGET_' ;; | ||
*) echo "cc-wrapper: Error: Cannot be used with $hostOffset-offset deps" >2; | ||
return 1 ;; | ||
esac | ||
# See pkgs/build-support/setup-hooks/role.bash | ||
getHostRole | ||
|
||
export NIX_${role}CXXSTDLIB_COMPILE+=" -isystem $(echo -n @gcc@/include/c++/*) -isystem $(echo -n @gcc@/include/c++/*)/$(@gcc@/bin/gcc -dumpmachine)" | ||
export NIX_${role}CXXSTDLIB_LINK=" -stdlib=libstdc++" | ||
export NIX_${role_pre}CXXSTDLIB_COMPILE+=" -isystem $(echo -n @gcc@/include/c++/*) -isystem $(echo -n @gcc@/include/c++/*)/$(@gcc@/bin/gcc -dumpmachine)" | ||
export NIX_${role_pre}CXXSTDLIB_LINK=" -stdlib=libstdc++" |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,6 @@ | ||
# The `hostOffset` describes how the host platform of the dependencies are slid | ||
# relative to the depending package. It is brought into scope of the setup hook | ||
# defined as the role of the dependency whose hooks is being run. | ||
case $hostOffset in | ||
-1) local role='BUILD_' ;; | ||
0) local role='' ;; | ||
1) local role='TARGET_' ;; | ||
*) echo "cc-wrapper: Error: Cannot be used with $hostOffset-offset deps" >2; | ||
return 1 ;; | ||
esac | ||
# See pkgs/build-support/setup-hooks/role.bash | ||
getHostRole | ||
|
||
linkCxxAbi="@linkCxxAbi@" | ||
export NIX_${role}CXXSTDLIB_COMPILE+=" -isystem @out@/include/c++/v1" | ||
export NIX_${role}CXXSTDLIB_LINK=" -stdlib=libc++${linkCxxAbi:+" -lc++abi"}" | ||
export NIX_${role_pre}CXXSTDLIB_COMPILE+=" -isystem @out@/include/c++/v1" | ||
export NIX_${role_pre}CXXSTDLIB_LINK=" -stdlib=libc++${linkCxxAbi:+" -lc++abi"}" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could we just source this in the setup-hook.sh? That would mean we shouldn't need to add the setupHooks logic (yet).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@matthewbauer well it still needs to be part of the derivation closure which means extra hoops anyways.