diff options
-rw-r--r-- | aclocal.m4 | 5 | ||||
-rw-r--r-- | configure.ac | 13 | ||||
-rw-r--r-- | libffi/ghc.mk | 2 | ||||
-rw-r--r-- | mk/config.mk.in | 1 | ||||
-rw-r--r-- | rules/build-package-data.mk | 2 | ||||
-rw-r--r-- | rules/distdir-opts.mk | 1 |
6 files changed, 19 insertions, 5 deletions
diff --git a/aclocal.m4 b/aclocal.m4 index a4944c1357..871dacc370 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -565,6 +565,11 @@ AC_DEFUN([FPTOOLS_SET_C_LD_FLAGS], $3="$$3 -D_HPUX_SOURCE" $5="$$5 -D_HPUX_SOURCE" ;; + arm*linux*) + # On arm/linux and arm/android, tell gcc to link using the gold linker. + # Forcing LD to be ld.gold is done in configre.ac. + $3="$$3 -fuse-ld=gold" + ;; esac # If gcc knows about the stack protector, turn it off. diff --git a/configure.ac b/configure.ac index c64af90b62..e7d467f470 100644 --- a/configure.ac +++ b/configure.ac @@ -438,7 +438,18 @@ AC_SUBST([HaskellCPPArgs]) dnl ** Which ld to use? dnl -------------------------------------------------------------- FP_ARG_WITH_PATH_GNU_PROG([LD], [ld], [ld]) -LdCmd="$LD" +case $target in +arm*linux*) + # Arm requires use of the binutils ld.gold linker. + # This case should catch at least arm-unknown-linux-gnueabihf and + # arm-linux-androideabi. + FP_ARG_WITH_PATH_GNU_PROG([LD_GOLD], [ld.gold], [ld.gold]) + LdCmd="$LD_GOLD" + ;; +*) + LdCmd="$LD" + ;; +esac AC_SUBST([LdCmd]) dnl ** Which nm to use? diff --git a/libffi/ghc.mk b/libffi/ghc.mk index abbe87f23c..a5645de9ba 100644 --- a/libffi/ghc.mk +++ b/libffi/ghc.mk @@ -100,7 +100,7 @@ $(libffi_STAMP_CONFIGURE): $(TOUCH_DEP) NM=$(NM) \ RANLIB=$(REAL_RANLIB_CMD) \ CFLAGS="$(SRC_CC_OPTS) $(CONF_CC_OPTS_STAGE1) -w" \ - LDFLAGS="$(SRC_LD_OPTS) $(CONF_GCC_LINKER_OPTS_STAGE1) -w" \ + LDFLAGS="$(SRC_LD_OPTS) -w" \ "$(SHELL)" ./configure \ --prefix=$(TOP)/libffi/build/inst \ --libdir=$(TOP)/libffi/build/inst/lib \ diff --git a/mk/config.mk.in b/mk/config.mk.in index b32f227f08..a6f757aa51 100644 --- a/mk/config.mk.in +++ b/mk/config.mk.in @@ -568,7 +568,6 @@ define set_stage_HSC2HS_OPTS # $1 = stage SRC_HSC2HS_OPTS_STAGE$1 += $$(addprefix --cflag=,$$(filter-out -O,$$(SRC_CC_OPTS) $$(CONF_CC_OPTS_STAGE$1))) SRC_HSC2HS_OPTS_STAGE$1 += $$(addprefix --cflag=,$$(CONF_CPP_OPTS_STAGE$1)) -SRC_HSC2HS_OPTS_STAGE$1 += $$(addprefix --lflag=,$$(CONF_GCC_LINKER_OPTS_STAGE$1)) endef $(eval $(call set_stage_HSC2HS_OPTS,0)) $(eval $(call set_stage_HSC2HS_OPTS,1)) diff --git a/rules/build-package-data.mk b/rules/build-package-data.mk index 494b89afc5..817bf8db9e 100644 --- a/rules/build-package-data.mk +++ b/rules/build-package-data.mk @@ -50,7 +50,7 @@ endif # for a feature it may not generate warning-free C code, and thus may # think that the feature doesn't exist if -Werror is on. $1_$2_CONFIGURE_CFLAGS = $$(filter-out -Werror,$$(SRC_CC_OPTS)) $$(CONF_CC_OPTS_STAGE$3) $$($1_CC_OPTS) $$($1_$2_CC_OPTS) $$(SRC_CC_WARNING_OPTS) -$1_$2_CONFIGURE_LDFLAGS = $$(SRC_LD_OPTS) $$(CONF_GCC_LINKER_OPTS_STAGE$3) $$($1_LD_OPTS) $$($1_$2_LD_OPTS) +$1_$2_CONFIGURE_LDFLAGS = $$(SRC_LD_OPTS) $$($1_LD_OPTS) $$($1_$2_LD_OPTS) $1_$2_CONFIGURE_CPPFLAGS = $$(SRC_CPP_OPTS) $$(CONF_CPP_OPTS_STAGE$3) $$($1_CPP_OPTS) $$($1_$2_CPP_OPTS) $1_$2_CONFIGURE_OPTS += --configure-option=CFLAGS="$$($1_$2_CONFIGURE_CFLAGS)" diff --git a/rules/distdir-opts.mk b/rules/distdir-opts.mk index 3126a8832e..b2f0d1b9ff 100644 --- a/rules/distdir-opts.mk +++ b/rules/distdir-opts.mk @@ -65,7 +65,6 @@ $1_$2_DIST_LD_LIB_DIRS := $$(subst $$(space)',$$(space)-L',$$(space)$$($1_$2_DEP endif $1_$2_DIST_LD_OPTS = \ - $$(CONF_GCC_LINKER_OPTS_STAGE$3) \ $$(SRC_LD_OPTS) \ $$($1_LD_OPTS) \ $$($1_$2_LD_OPTS) \ |