-
-
Notifications
You must be signed in to change notification settings - Fork 14.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
treewide: Use pkgs/build-support/roles.bash to remove copy pasta
Also fix some setup hooks that unnecessarily used environment hooks, which revolted in the same variable being modified too many times.
- Loading branch information
1 parent
34a3233
commit 2110c0b
Showing
29 changed files
with
203 additions
and
261 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -66,55 +66,22 @@ set -u | |
# over no state, and there's no @-substitutions within, so any redefined | ||
# function is guaranteed to be exactly the same. | ||
ccWrapper_addCVars () { | ||
# The `depHostOffset` describes how the host platform of the dependencies | ||
# are slid relative to the depending package. It is brought into scope of | ||
# the environment hook defined as the role of the dependency being applied. | ||
case $depHostOffset in | ||
-1) local role='BUILD_' ;; | ||
0) local role='' ;; | ||
1) local role='TARGET_' ;; | ||
*) echo "cc-wrapper: Error: Cannot be used with $depHostOffset-offset deps" >2; | ||
return 1 ;; | ||
esac | ||
# See ../setup-hooks/role.bash | ||
local role_post role_pre | ||
getTargetRoleEnvHook | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
ElvishJerricco
Contributor
|
||
|
||
if [[ -d "$1/include" ]]; then | ||
export NIX_${role}CFLAGS_COMPILE+=" ${ccIncludeFlag:--isystem} $1/include" | ||
export NIX_${role_pre}CFLAGS_COMPILE+=" ${ccIncludeFlag:--isystem} $1/include" | ||
fi | ||
|
||
if [[ -d "$1/Library/Frameworks" ]]; then | ||
export NIX_${role}CFLAGS_COMPILE+=" -F$1/Library/Frameworks" | ||
export NIX_${role_pre}CFLAGS_COMPILE+=" -F$1/Library/Frameworks" | ||
fi | ||
} | ||
|
||
# Since the same cc-wrapper derivation can be depend on in multiple ways, we | ||
# need to accumulate *each* role (i.e. target platform relative the depending | ||
# derivation) in which the cc-wrapper derivation is used. | ||
# `NIX_CC_WRAPPER_@infixSalt@_TARGET_*` tracks this (needs to be an exported env | ||
# var so can't use fancier data structures). | ||
# | ||
# We also need to worry about what role is being added on *this* invocation of | ||
# setup-hook, which `role` tracks. | ||
case $targetOffset in | ||
-1) | ||
export NIX_CC_WRAPPER_@infixSalt@_TARGET_BUILD=1 | ||
role_pre='BUILD_' | ||
role_post='_FOR_BUILD' | ||
;; | ||
0) | ||
export NIX_CC_WRAPPER_@infixSalt@_TARGET_HOST=1 | ||
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 | ||
# See ../setup-hooks/role.bash | ||
getTargetRole | ||
getTargetRoleWrapper | ||
|
||
# We use the `targetOffset` to choose the right env hook to accumulate the right | ||
# sort of deps (those with that offset). | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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++" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"}" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"}" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,6 @@ | ||
# The `hostOffset` describes how the host platform of the dependencies | ||
# 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"}" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,6 @@ | ||
# The `hostOffset` describes how the host platform of the dependencies | ||
# 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"}" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,6 @@ | ||
# The `hostOffset` describes how the host platform of the dependencies | ||
# 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"}" |
Oops, something went wrong.
2 comments
on commit 2110c0b
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.
This commit broke cross compiling acl
, which breaks cross compiling NixOS. Investigating...
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.
I did the wrappers wrong. There is a staging commit fixing it.
@Ericson2314 I'm not sure what's correct, but this is definitely a change in behavior. Previously, we checked
depHostOffset
, and now we checkdepTargetOffset
. The symptom I'm seeing of this is that a library depended on inbuildInputs
is not having itsinclude
directory added to the C flags.