diff options
author | Alec Theriault <alec.theriault@gmail.com> | 2018-12-05 20:46:21 -0800 |
---|---|---|
committer | Ben Gamari <ben@well-typed.com> | 2019-01-23 14:07:28 -0500 |
commit | efc95841503a78504c0aa00925fb22c4ec4627af (patch) | |
tree | 88ccd49a18f83f19418131e8cb31b635bb8cfddb | |
parent | daff24bc74c1fed7efb1acde2d8f90dc9621a308 (diff) | |
download | haskell-efc95841503a78504c0aa00925fb22c4ec4627af.tar.gz |
Hadrian: support in-tree GMP
Summary:
This adds top-level configure flags '--with-intree-gmp' and
'--with-framework-preferred', both of which are especially relevant
on MacOS.
Besides gaining two new flags, Hadrian also had to be taught what to
do with the 'framework' in .cabal files.
Test Plan:
./boot && ./configure --with-intree-gmp && ./hadrian/build.sh
./boot && ./configure --with-gmp-framework-preferred && ./hadrian/build.sh # on macos
Reviewers: carter, snowleopard, alpmestan, hvr, goldfire, bgamari
Subscribers: rwbarton, erikd
GHC Trac Issues: #16001
Differential Revision: https://phabricator.haskell.org/D5417
-rw-r--r-- | aclocal.m4 | 14 | ||||
-rw-r--r-- | hadrian/cfg/system.config.in | 6 | ||||
-rw-r--r-- | hadrian/src/Hadrian/Haskell/Cabal/Parse.hs | 3 | ||||
-rw-r--r-- | hadrian/src/Hadrian/Haskell/Cabal/Type.hs | 1 | ||||
-rw-r--r-- | hadrian/src/Oracles/Flag.hs | 4 | ||||
-rw-r--r-- | hadrian/src/Settings/Builders/Ghc.hs | 2 | ||||
-rw-r--r-- | hadrian/src/Settings/Packages.hs | 12 | ||||
-rw-r--r-- | libraries/integer-gmp/config.mk.in | 2 | ||||
-rw-r--r-- | libraries/integer-gmp/configure.ac | 4 | ||||
-rw-r--r-- | mk/config.mk.in | 2 | ||||
-rw-r--r-- | rules/build-package-data.mk | 8 |
11 files changed, 45 insertions, 13 deletions
diff --git a/aclocal.m4 b/aclocal.m4 index a7026e217a..62825c3068 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1780,8 +1780,22 @@ AC_DEFUN([FP_GMP], [directory containing gmp library])], [GMP_LIB_DIRS=$withval]) + AC_ARG_ENABLE([intree-gmp], + [AC_HELP_STRING([--with-intree-gmp], + [force using the in-tree GMP])], + [GMP_FORCE_INTREE=YES], + [GMP_FORCE_INTREE=NO]) + + AC_ARG_ENABLE([gmp-framework-preferred], + [AC_HELP_STRING([--with-gmp-framework-preferred], + [on OSX, prefer the GMP framework to the gmp lib])], + [GMP_PREFER_FRAMEWORK=YES], + [GMP_PREFER_FRAMEWORK=NO]) + AC_SUBST(GMP_INCLUDE_DIRS) AC_SUBST(GMP_LIB_DIRS) + AC_SUBST(GMP_FORCE_INTREE) + AC_SUBST(GMP_PREFER_FRAMEWORK) ])# FP_GMP # FP_CURSES diff --git a/hadrian/cfg/system.config.in b/hadrian/cfg/system.config.in index 7e132f7d77..7b92b29a6d 100644 --- a/hadrian/cfg/system.config.in +++ b/hadrian/cfg/system.config.in @@ -118,8 +118,10 @@ curses-lib-dir = @CURSES_LIB_DIRS@ iconv-include-dir = @ICONV_INCLUDE_DIRS@ iconv-lib-dir = @ICONV_LIB_DIRS@ -gmp-include-dir = @GMP_INCLUDE_DIRS@ -gmp-lib-dir = @GMP_LIB_DIRS@ +intree-gmp = @GMP_FORCE_INTREE@ +gmp-framework-preferred = @GMP_PREFER_FRAMEWORK@ +gmp-include-dir = @GMP_INCLUDE_DIRS@ +gmp-lib-dir = @GMP_LIB_DIRS@ use-system-ffi = @UseSystemLibFFI@ ffi-include-dir = @FFIIncludeDir@ diff --git a/hadrian/src/Hadrian/Haskell/Cabal/Parse.hs b/hadrian/src/Hadrian/Haskell/Cabal/Parse.hs index 995270184b..8df343b423 100644 --- a/hadrian/src/Hadrian/Haskell/Cabal/Parse.hs +++ b/hadrian/src/Hadrian/Haskell/Cabal/Parse.hs @@ -280,7 +280,8 @@ resolveContextData context@Context {..} = do , depIncludeDirs = forDeps Installed.includeDirs , depCcOpts = forDeps Installed.ccOptions , depLdOpts = forDeps Installed.ldOptions - , buildGhciLib = C.withGHCiLib lbi' } + , buildGhciLib = C.withGHCiLib lbi' + , frameworks = C.frameworks buildInfo } -- | Look for a @.buildinfo@ in all of the specified directories, stopping on -- the first one we find. diff --git a/hadrian/src/Hadrian/Haskell/Cabal/Type.hs b/hadrian/src/Hadrian/Haskell/Cabal/Type.hs index dd6e4bdcc6..b2a7002d6c 100644 --- a/hadrian/src/Hadrian/Haskell/Cabal/Type.hs +++ b/hadrian/src/Hadrian/Haskell/Cabal/Type.hs @@ -64,6 +64,7 @@ data ContextData = ContextData , depCcOpts :: [String] , depLdOpts :: [String] , buildGhciLib :: Bool + , frameworks :: [String] } deriving (Eq, Generic, Show, Typeable) instance Binary PackageData diff --git a/hadrian/src/Oracles/Flag.hs b/hadrian/src/Oracles/Flag.hs index 57dbf2decb..b294cebc93 100644 --- a/hadrian/src/Oracles/Flag.hs +++ b/hadrian/src/Oracles/Flag.hs @@ -13,6 +13,8 @@ data Flag = ArSupportsAtFile | CrossCompiling | GccIsClang | GhcUnregisterised + | GmpInTree + | GmpFrameworkPref | LeadingUnderscore | SolarisBrokenShld | SplitObjectsBroken @@ -29,6 +31,8 @@ flag f = do CrossCompiling -> "cross-compiling" GccIsClang -> "gcc-is-clang" GhcUnregisterised -> "ghc-unregisterised" + GmpInTree -> "intree-gmp" + GmpFrameworkPref -> "gmp-framework-preferred" LeadingUnderscore -> "leading-underscore" SolarisBrokenShld -> "solaris-broken-shld" SplitObjectsBroken -> "split-objects-broken" diff --git a/hadrian/src/Settings/Builders/Ghc.hs b/hadrian/src/Settings/Builders/Ghc.hs index 4957de77fe..488e551cdc 100644 --- a/hadrian/src/Settings/Builders/Ghc.hs +++ b/hadrian/src/Settings/Builders/Ghc.hs @@ -45,6 +45,7 @@ ghcLinkArgs = builder (Ghc LinkHs) ? do pkg <- getPackage libs <- getContextData extraLibs libDirs <- getContextData extraLibDirs + fmwks <- getContextData frameworks dynamic <- requiresDynamic darwin <- expr osxHost @@ -71,6 +72,7 @@ ghcLinkArgs = builder (Ghc LinkHs) ? do , not (nonHsMainPackage pkg) ? arg "-rtsopts" , pure [ "-l" ++ lib | lib <- libs ] , pure [ "-L" ++ libDir | libDir <- libDirs ] + , darwin ? pure (concat [ ["-framework", fmwk] | fmwk <- fmwks ]) ] findHsDependencies :: Args diff --git a/hadrian/src/Settings/Packages.hs b/hadrian/src/Settings/Packages.hs index 5993723bee..4be0fba740 100644 --- a/hadrian/src/Settings/Packages.hs +++ b/hadrian/src/Settings/Packages.hs @@ -136,14 +136,10 @@ packageArgs = do [ builder Cc ? arg includeGmp , builder (Cabal Setup) ? mconcat - [ -- TODO: This should respect some settings flag "InTreeGmp". - -- Depending on @IncludeDir@ and @LibDir@ is bound to fail, since - -- these are only set if the configure script was explicilty - -- called with GMP include and lib dirs. Their absense as such - -- does not imply @in-tree-gmp@. - -- (null gmpIncludeDir && null gmpLibDir) ? - -- arg "--configure-option=--with-intree-gmp" - arg ("--configure-option=CFLAGS=" ++ includeGmp) + [ flag GmpInTree ? arg "--configure-option=--with-intree-gmp" + , flag GmpFrameworkPref ? + arg "--configure-option=--with-gmp-framework-preferred" + , arg ("--configure-option=CFLAGS=" ++ includeGmp) , arg ("--gcc-options=" ++ includeGmp) ] ] ---------------------------------- rts --------------------------------- diff --git a/libraries/integer-gmp/config.mk.in b/libraries/integer-gmp/config.mk.in index b66f94c5ad..2556326b2d 100644 --- a/libraries/integer-gmp/config.mk.in +++ b/libraries/integer-gmp/config.mk.in @@ -10,6 +10,8 @@ ifeq "$(HaveFrameworkGMP)" "" HaveFrameworkGMP = @HaveFrameworkGMP@ endif +GMP_FORCE_INTREE = @GMP_FORCE_INTREE@ +GMP_PREFER_FRAMEWORK = @GMP_PREFER_FRAMEWORK@ GMP_INCLUDE_DIRS = @GMP_INCLUDE_DIRS@ GMP_LIB_DIRS = @GMP_LIB_DIRS@ diff --git a/libraries/integer-gmp/configure.ac b/libraries/integer-gmp/configure.ac index 1ccd48e698..d189375616 100644 --- a/libraries/integer-gmp/configure.ac +++ b/libraries/integer-gmp/configure.ac @@ -27,13 +27,13 @@ AC_ARG_WITH([gmp-libraries], [GMP_LIB_DIRS=$withval; LDFLAGS="-L$withval"], [GMP_LIB_DIRS=]) -AC_ARG_WITH([gmp-framework-preferred], +AC_ARG_ENABLE([gmp-framework-preferred], [AC_HELP_STRING([--with-gmp-framework-preferred], [on OSX, prefer the GMP framework to the gmp lib])], [GMP_PREFER_FRAMEWORK=YES], [GMP_PREFER_FRAMEWORK=NO]) -AC_ARG_WITH([intree-gmp], +AC_ARG_ENABLE([intree-gmp], [AC_HELP_STRING([--with-intree-gmp], [force using the in-tree GMP])], [GMP_FORCE_INTREE=YES], diff --git a/mk/config.mk.in b/mk/config.mk.in index fb823ae29b..0119e9a984 100644 --- a/mk/config.mk.in +++ b/mk/config.mk.in @@ -898,6 +898,8 @@ ICONV_LIB_DIRS = @ICONV_LIB_DIRS@ GMP_INCLUDE_DIRS = @GMP_INCLUDE_DIRS@ GMP_LIB_DIRS = @GMP_LIB_DIRS@ +GMP_PREFER_FRAMEWORK = @GMP_PREFER_FRAMEWORK@ +GMP_FORCE_INTREE = @GMP_FORCE_INTREE@ CURSES_LIB_DIRS = @CURSES_LIB_DIRS@ diff --git a/rules/build-package-data.mk b/rules/build-package-data.mk index 2f0d7c9f2a..af1ead8099 100644 --- a/rules/build-package-data.mk +++ b/rules/build-package-data.mk @@ -90,6 +90,14 @@ ifneq "$$(GMP_LIB_DIRS)" "" $1_$2_CONFIGURE_OPTS += --configure-option=--with-gmp-libraries="$$(GMP_LIB_DIRS)" endif +ifeq "$$(GMP_PREFER_FRAMEWORK)" "YES" +$1_$2_CONFIGURE_OPTS += --configure-option=--with-gmp-framework-preferred +endif + +ifeq "$$(GMP_FORCE_INTREE)" "YES" +$1_$2_CONFIGURE_OPTS += --configure-option=--with-intree-gmp +endif + ifneq "$$(CURSES_LIB_DIRS)" "" $1_$2_CONFIGURE_OPTS += --configure-option=--with-curses-libraries="$$(CURSES_LIB_DIRS)" endif |