This changes cygwin stdenv, but I don't think it will hurt much people. This allows mkDerivation to get "dontRebase=true" to skip the usual cygwin rebase. This is required, if we are using this stdenv to build DLLs for win32 inside x86_64-cygwin, because /bin/rebase crashes at finding an arch mismatch. Additionally, we don't need any rebase for libraries built by visual studio and meant for visual studio (my use case). I'm using nix in x86_64-cygwin to build libraries with visual studio, both for x86_64 and x86.
25 lines
664 B
Bash
25 lines
664 B
Bash
postFixupHooks+=(_cygwinFixAutoImageBase)
|
|
|
|
_cygwinFixAutoImageBase() {
|
|
if [ "$dontRebase" == 1 ]; then
|
|
return
|
|
fi
|
|
find $out -name "*.dll" | while read DLL; do
|
|
if [ -f /etc/rebasenix.nextbase ]; then
|
|
NEXTBASE="$(</etc/rebasenix.nextbase)"
|
|
fi
|
|
NEXTBASE=${NEXTBASE:-0x62000000}
|
|
|
|
REBASE=(`/bin/rebase -i $DLL`)
|
|
BASE=${REBASE[2]}
|
|
SIZE=${REBASE[4]}
|
|
SKIP=$(((($SIZE>>16)+1)<<16))
|
|
|
|
echo "REBASE FIX: $DLL $BASE -> $NEXTBASE"
|
|
/bin/rebase -b $NEXTBASE $DLL
|
|
NEXTBASE="0x`printf %x $(($NEXTBASE+$SKIP))`"
|
|
|
|
echo $NEXTBASE > /etc/rebasenix.nextbase
|
|
done
|
|
}
|