summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMoritz Angermann <moritz.angermann@gmail.com>2021-04-27 10:57:05 +0800
committerMarge Bot <ben+marge-bot@smart-cactus.org>2021-05-25 05:52:02 -0400
commit544414ba604b13e0992ad87e90b8bdf45c43011c (patch)
tree3209dd75e5a99aff970f1729acd9f5749422b5a5
parentc67c9e8239a767aa870c1b7aa2adf2a363205837 (diff)
downloadhaskell-544414ba604b13e0992ad87e90b8bdf45c43011c.tar.gz
[ci/darwin] use system provided iconv and curses
Also make sure to be able to build with non-apple-clang, while using apple's SDK on macOS
-rw-r--r--.gitlab-ci.yml4
-rw-r--r--.gitlab/shell.nix34
-rw-r--r--libraries/base/configure.ac2
-rw-r--r--libraries/ghc-bignum/gmp/ghc.mk5
4 files changed, 35 insertions, 10 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 63251727c2..610deab361 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -547,7 +547,7 @@ validate-x86_64-darwin:
CPUS: 8
LANG: "en_US.UTF-8"
# WARNING: this is overridden in the shell.nix, see shell.nix!
- CONFIGURE_ARGS: "--with-intree-gmp"
+ CONFIGURE_ARGS: "--with-intree-gmp --with-curses-libraries=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib --with-iconv-includes=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include --with-iconv-libraries=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib"
HADRIAN_ARGS: "--docs=no-sphinx"
TEST_ENV: "x86_64-darwin-hadrian"
BIN_DIST_NAME: "ghc-amd64-apple-darwin"
@@ -644,7 +644,7 @@ validate-aarch64-darwin:
CPUS: 8
LANG: "en_US.UTF-8"
# WARNING: this is overridden in the shell.nix, see shell.nix!
- CONFIGURE_ARGS: "--with-intree-gmp"
+ CONFIGURE_ARGS: "--with-intree-gmp --with-curses-libraries=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib --with-iconv-includes=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include --with-iconv-libraries=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib"
HADRIAN_ARGS: "--docs=no-sphinx"
BIN_DIST_NAME: "ghc-arm64-apple-darwin"
TEST_ENV: "aarch64-darwin-hadrian"
diff --git a/.gitlab/shell.nix b/.gitlab/shell.nix
index 5e32847735..cff0e89b7f 100644
--- a/.gitlab/shell.nix
+++ b/.gitlab/shell.nix
@@ -12,7 +12,8 @@
# we need to inject ncurses into --with-curses-libraries.
# the real fix is to teach terminfo to use libcurses on macOS.
- CONFIGURE_ARGS = "--with-intree-gmp --with-curses-libraries=${pkgs.ncurses.out}/lib";
+ # CONFIGURE_ARGS = "--with-intree-gmp --with-curses-libraries=${pkgs.ncurses.out}/lib";
+ CONFIGURE_ARGS = "--with-intree-gmp --with-curses-libraries=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib --with-iconv-includes=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include --with-iconv-libraries=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib";
# magic speedup pony :facepalm:
#
@@ -22,24 +23,45 @@
export NIX_LDFLAGS=$(for a in $NIX_LDFLAGS; do echo $a; done |sort|uniq|xargs)
export NIX_LDFLAGS_FOR_TARGET=$(for a in $NIX_LDFLAGS_FOR_TARGET; do echo $a; done |sort|uniq|xargs)
export NIX_LDFLAGS_FOR_TARGET=$(comm -3 <(for l in $NIX_LDFLAGS_FOR_TARGET; do echo $l; done) <(for l in $NIX_LDFLAGS; do echo $l; done))
+
+
+ # Impurity hack for GHC releases.
+ #################################
+ # We don't want binary releases to depend on nix, thus we'll need to make sure we don't leak in references.
+ # GHC externally depends only on iconv and curses. However we can't force a specific curses library for
+ # the terminfo package, as such we'll need to make sure we only look in the system path for the curses library
+ # and not pick up the tinfo from the nix provided ncurses package.
+ #
+ # We also need to force us to use the systems COREFOUNDATION, not the one that nix builds. Again this is impure,
+ # but it will allow us to have proper binary distributions.
+ #
+ # do not use nixpkgs provided core foundation
+ export NIX_COREFOUNDATION_RPATH=/System/Library/Frameworks
+ # drop curses from the LDFLAGS, we really want the system ones, not the nix ones.
+ export NIX_LDFLAGS=$(for lib in $NIX_LDFLAGS; do case "$lib" in *curses*);; *) echo -n "$lib ";; esac; done;)
+ export NIX_CFLAGS_COMPILE+=" -Wno-nullability-completeness -Wno-availability -Wno-expansion-to-defined -Wno-builtin-requires-header -Wno-unused-command-line-argument"
+
+ # unconditionally add the MacOSX.sdk and TargetConditional.h
+ export NIX_CFLAGS_COMPILE+=" -isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include"
'';
nativeBuildInputs = (with pkgs; [
+ # This needs to come *before* ghc,
+ # otherwise we migth end up with the clang from
+ # the bootstrap GHC in PATH with higher priority.
+ clang_11
+ llvm_11
+
haskell.compiler.${compiler}
haskell.packages.${compiler}.cabal-install
haskell.packages.${compiler}.alex
haskell.packages.${compiler}.happy # _1_19_12 is needed for older GHCs.
- clang_11
- llvm_11
-
automake
autoconf
m4
gmp
- ncurses
- libiconv
zlib.out
zlib.dev
glibcLocales
diff --git a/libraries/base/configure.ac b/libraries/base/configure.ac
index 68295563af..f0b4f371c4 100644
--- a/libraries/base/configure.ac
+++ b/libraries/base/configure.ac
@@ -103,7 +103,7 @@ dnl--------------------------------------------------------------------
AC_ARG_WITH([iconv-includes],
[AS_HELP_STRING([--with-iconv-includes],
[directory containing iconv.h])],
- [ICONV_INCLUDE_DIRS=$withval; CPPFLAGS="-I$withval $CPPFLAGS"],
+ [ICONV_INCLUDE_DIRS=$withval],
[ICONV_INCLUDE_DIRS=])
AC_ARG_WITH([iconv-libraries],
diff --git a/libraries/ghc-bignum/gmp/ghc.mk b/libraries/ghc-bignum/gmp/ghc.mk
index fe8ba7c171..9a7ae88577 100644
--- a/libraries/ghc-bignum/gmp/ghc.mk
+++ b/libraries/ghc-bignum/gmp/ghc.mk
@@ -124,9 +124,12 @@ libraries/ghc-bignum/gmp/libgmp.a libraries/ghc-bignum/gmp/gmp.h:
# Note: We must pass `TARGETPLATFORM` to the `--host` argument of GMP's
# `./configure`, not `HOSTPLATFORM`: the 'host' on which GMP will
# run is the 'target' platform of the compiler we're building.
+ # Note2: we pass --with-readline=no, to prevent getting an indirect
+ # dependency on ncurses through gmp. readline is only relevant
+ # for gmp test programs. (See gmp's configure)
cd libraries/ghc-bignum/gmp/gmpbuild; \
CC=$(CCX) CXX=$(CCX) NM=$(NM) AR=$(AR_STAGE1) ./configure \
- --enable-shared=no --with-pic=yes \
+ --enable-shared=no --with-pic=yes --with-readline=no \
--host=$(TARGETPLATFORM) --build=$(BUILDPLATFORM)
$(MAKE) -C libraries/ghc-bignum/gmp/gmpbuild MAKEFLAGS=
$(CP) libraries/ghc-bignum/gmp/gmpbuild/gmp.h libraries/ghc-bignum/gmp/