X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=mk%2Ftarget.mk;h=72420c92272050abff8a75c25e89e896c69ae13c;hb=4574f821b6c47a7a6304e76bf36f618cda06ef6d;hp=1f200e05a5429ed7152593c95cf1f9f6b8c9e4d5;hpb=fd9d1f1bac257284321b76d74b06abb3fde2f5e4;p=ghc-hetmet.git diff --git a/mk/target.mk b/mk/target.mk index 1f200e0..72420c9 100644 --- a/mk/target.mk +++ b/mk/target.mk @@ -288,12 +288,14 @@ endif # whether HS_SRCS is empty or not. # +# can't split objs in way 'u', so we disable it here +ifeq "$(way)" "u" +SplitObjs = NO +endif + ifneq "$(HS_SRCS)" "" ifeq "$(SplitObjs)" "YES" -# can't split objs in way 'u', so we disable it here -ifneq "$(way)" "u" - SRC_HC_OPTS += -split-objs # We generate the archive into a temporary file libfoo.a.tmp, then @@ -324,7 +326,23 @@ HC_SPLIT_PRE = \ $(RM) $@; if [ ! -d $(basename $@)_split ]; then mkdir $(basename $@)_split; else \ $(FIND) $(basename $@)_split -name '*.$(way_)o' -print | xargs $(RM) __rm_food; fi ifeq "$(GhcWithInterpreter)" "YES" -HC_SPLIT_POST = (cd $(basename $@)_split && $(LD) -r $(LD_X) -o ../$(notdir $@) *.$(way_)o) +ifeq "$(LdIsGNULd)" "YES" +# If ld is GNU ld, we can use a linker script to pass the names of the +# input files. This avoids problems with limits on the length of the +# ld command line, which we run into for large Haskell modules. +HC_SPLIT_POST = \ + ( cd $(basename $@)_split; \ + $(RM) ld.script; \ + touch ld.script; \ + echo "INPUT(" *.$(way_)o ")" >>ld.script; \ + $(LD) -r $(LD_X) -o ../$(notdir $@) ld.script; \ + ) +else +HC_SPLIT_POST = \ + ( cd $(basename $@)_split; \ + $(LD) -r $(LD_X) -o ../$(notdir $@) *.$(way_)o; \ + ) +endif # LdIsGNULd == YES else HC_SPLIT_POST = touch $@ endif # GhcWithInterpreter == YES @@ -342,7 +360,6 @@ extraclean :: $(FIND) $(patsubst %.$(way_)o,%_split,$(HS_OBJS)) -name '*.$(way_)o' -print | xargs $(RM) __rm_food -rmdir $(patsubst %.$(way_)o,%_split,$(HS_OBJS)) > /dev/null 2>&1 -endif # $(way) == u endif # $(SplitObjs) endif # $(HS_SRCS) @@ -353,7 +370,7 @@ endif # $(HS_SRCS) ifeq "$(StripLibraries)" "YES" ifeq "$(SplitObjs)" "YES" SRC_HC_POST_OPTS += \ - for i in $(basename $@)_split/*; do \ + for i in $(basename $@)_split/*.$(way_)o; do \ $(LD) -r $(LD_X) -o $$i.tmp $$i; \ $(MV) $$i.tmp $$i; \ done @@ -1194,3 +1211,17 @@ ifneq "$(SUBDIRS)" "" $(SUBDIRS) :: $(MAKE) -C $@ $(MFLAGS) endif + +# ----------------------------------------------------------------------------- +# Further cleaning + +# Sometimes we want to clean things only after the recursve cleaning +# has heppened (eg. if the files we're about to remove would affect +# the recursive traversal). + +distclean:: + rm -f $(LATE_DIST_CLEAN_FILES) + +maintainer-clean:: + rm -f $(LATE_DIST_CLEAN_FILES) +