Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
The icu4c cross-build process requires access to a full buildRoot of a native build, so we add a variant of the build that just does the buildPhase and copies the buildRoot to $out for access by the cross compile.
- Loading branch information
Showing
2 changed files
with
86 additions
and
53 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,66 +1,95 @@ | ||
{ version, sha256, patches ? [], patchFlags ? "" }: | ||
{ stdenv, fetchurl, fetchpatch, fixDarwinDylibNames }: | ||
{ stdenv, fetchurl, fetchpatch, fixDarwinDylibNames | ||
# Cross-compiled icu4c requires a build-root of a native compile | ||
, buildRootOnly ? false, nativeBuildRoot, buildPlatform, hostPlatform | ||
}: | ||
|
||
let | ||
pname = "icu4c"; | ||
in | ||
stdenv.mkDerivation { | ||
name = pname + "-" + version; | ||
|
||
src = fetchurl { | ||
url = "http://download.icu-project.org/files/${pname}/${version}/${pname}-" | ||
+ (stdenv.lib.replaceChars ["."] ["_"] version) + "-src.tgz"; | ||
inherit sha256; | ||
}; | ||
baseAttrs = { | ||
src = fetchurl { | ||
url = "http://download.icu-project.org/files/${pname}/${version}/${pname}-" | ||
+ (stdenv.lib.replaceChars ["."] ["_"] version) + "-src.tgz"; | ||
inherit sha256; | ||
}; | ||
|
||
postUnpack = '' | ||
sourceRoot=''${sourceRoot}/source | ||
echo Source root reset to ''${sourceRoot} | ||
''; | ||
|
||
# https://sourceware.org/glibc/wiki/Release/2.26#Removal_of_.27xlocale.h.27 | ||
postPatch = if (stdenv.hostPlatform.libc == "glibc" || stdenv.hostPlatform.libc == "musl") | ||
then "substituteInPlace i18n/digitlst.cpp --replace '<xlocale.h>' '<locale.h>'" | ||
else null; # won't find locale_t on darwin | ||
|
||
inherit patchFlags patches; | ||
|
||
outputs = [ "out" "dev" ]; | ||
outputBin = "dev"; | ||
preConfigure = '' | ||
sed -i -e "s|/bin/sh|${stdenv.shell}|" configure | ||
# FIXME: This fixes dylib references in the dylibs themselves, but | ||
# not in the programs in $out/bin. | ||
buildInputs = stdenv.lib.optional stdenv.isDarwin fixDarwinDylibNames; | ||
# $(includedir) is different from $(prefix)/include due to multiple outputs | ||
sed -i -e 's|^\(CPPFLAGS = .*\) -I\$(prefix)/include|\1 -I$(includedir)|' config/Makefile.inc.in | ||
'' + stdenv.lib.optionalString stdenv.isArm '' | ||
# From https://archlinuxarm.org/packages/armv7h/icu/files/icudata-stdlibs.patch | ||
sed -e 's/LDFLAGSICUDT=-nodefaultlibs -nostdlib/LDFLAGSICUDT=/' -i config/mh-linux | ||
''; | ||
|
||
postUnpack = '' | ||
sourceRoot=''${sourceRoot}/source | ||
echo Source root reset to ''${sourceRoot} | ||
''; | ||
configureFlags = "--disable-debug" + | ||
stdenv.lib.optionalString (stdenv.isFreeBSD || stdenv.isDarwin) " --enable-rpath" + | ||
stdenv.lib.optionalString (buildPlatform != hostPlatform) " --with-cross-build=${nativeBuildRoot}"; | ||
|
||
# https://sourceware.org/glibc/wiki/Release/2.26#Removal_of_.27xlocale.h.27 | ||
postPatch = if (stdenv.hostPlatform.libc == "glibc" || stdenv.hostPlatform.libc == "musl") | ||
then "substituteInPlace i18n/digitlst.cpp --replace '<xlocale.h>' '<locale.h>'" | ||
else null; # won't find locale_t on darwin | ||
enableParallelBuilding = true; | ||
|
||
inherit patchFlags patches; | ||
meta = with stdenv.lib; { | ||
description = "Unicode and globalization support library"; | ||
homepage = http://site.icu-project.org/; | ||
maintainers = with maintainers; [ raskin ]; | ||
platforms = platforms.all; | ||
}; | ||
}; | ||
|
||
realAttrs = baseAttrs // { | ||
name = pname + "-" + version; | ||
|
||
preConfigure = '' | ||
sed -i -e "s|/bin/sh|${stdenv.shell}|" configure | ||
outputs = [ "out" "dev" ]; | ||
outputBin = "dev"; | ||
|
||
# $(includedir) is different from $(prefix)/include due to multiple outputs | ||
sed -i -e 's|^\(CPPFLAGS = .*\) -I\$(prefix)/include|\1 -I$(includedir)|' config/Makefile.inc.in | ||
'' + stdenv.lib.optionalString stdenv.isArm '' | ||
# From https://archlinuxarm.org/packages/armv7h/icu/files/icudata-stdlibs.patch | ||
sed -e 's/LDFLAGSICUDT=-nodefaultlibs -nostdlib/LDFLAGSICUDT=/' -i config/mh-linux | ||
''; | ||
# FIXME: This fixes dylib references in the dylibs themselves, but | ||
# not in the programs in $out/bin. | ||
buildInputs = stdenv.lib.optional stdenv.isDarwin fixDarwinDylibNames; | ||
|
||
configureFlags = "--disable-debug" + | ||
stdenv.lib.optionalString (stdenv.isFreeBSD || stdenv.isDarwin) " --enable-rpath"; | ||
# remove dependency on bootstrap-tools in early stdenv build | ||
postInstall = stdenv.lib.optionalString stdenv.isDarwin '' | ||
sed -i 's/INSTALL_CMD=.*install/INSTALL_CMD=install/' $out/lib/icu/${version}/pkgdata.inc | ||
'' + '' | ||
substituteInPlace "$dev/bin/icu-config" \ | ||
--replace \''${pkglibdir}/Makefile.inc "$dev/lib/icu/Makefile.inc" | ||
''; | ||
|
||
# remove dependency on bootstrap-tools in early stdenv build | ||
postInstall = stdenv.lib.optionalString stdenv.isDarwin '' | ||
sed -i 's/INSTALL_CMD=.*install/INSTALL_CMD=install/' $out/lib/icu/${version}/pkgdata.inc | ||
'' + '' | ||
substituteInPlace "$dev/bin/icu-config" \ | ||
--replace \''${pkglibdir}/Makefile.inc "$dev/lib/icu/Makefile.inc" | ||
''; | ||
postFixup = ''moveToOutput lib/icu "$dev" ''; | ||
}; | ||
|
||
postFixup = ''moveToOutput lib/icu "$dev" ''; | ||
buildRootOnlyAttrs = baseAttrs // { | ||
name = pname + "-build-root-" + version; | ||
|
||
enableParallelBuilding = true; | ||
preConfigure = baseAttrs.preConfigure + '' | ||
mkdir build | ||
cd build | ||
configureScript=../configure | ||
''; | ||
|
||
meta = with stdenv.lib; { | ||
description = "Unicode and globalization support library"; | ||
homepage = http://site.icu-project.org/; | ||
maintainers = with maintainers; [ raskin ]; | ||
platforms = platforms.all; | ||
postBuild = '' | ||
cd .. | ||
mv build $out | ||
echo "Doing build-root only, exiting now" >&2 | ||
exit 0 | ||
''; | ||
}; | ||
} | ||
|
||
attrs = if buildRootOnly | ||
then buildRootOnlyAttrs | ||
else realAttrs; | ||
in | ||
stdenv.mkDerivation attrs |
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
7142440
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.
@Ericson2314 FYI
7142440
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 breaks evaluation:
7142440
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.
Fixed in 80cb13b
7142440
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.
Looks good to me. Sometimes we have the cross build just depend on the native build but I see how this is different.