X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=mk%2Ftarget.mk;h=51b5d98ad2d01bba9709eafd4f2e52ae95b62ad3;hb=c6d90de6e5236d32df49609bb9179b0108033c86;hp=0497cec16c1b7e6ffb034a005b5019fe69ae100c;hpb=be0242d094f9b3091b15f200ac9d978576b7b681;p=ghc-hetmet.git diff --git a/mk/target.mk b/mk/target.mk index 0497cec..51b5d98 100644 --- a/mk/target.mk +++ b/mk/target.mk @@ -324,7 +324,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 @@ -353,7 +369,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 @@ -823,8 +839,9 @@ install-docs:: $(foreach i,$(XMLDocWays),$(INSTALL_XML_DOC)$(patsubst %.html-no- @for i in $(XMLDocWays); do \ if [ $$i = "html" ]; then \ $(INSTALL_DIR) $(datadir)/html; \ - echo "( cd $(INSTALL_XML_DOC) && $(CP) * $(datadir)/html )" ; \ - ( cd $(INSTALL_XML_DOC) && $(CP) * $(datadir)/html ) ; \ + $(INSTALL_DIR) $(datadir)/html/$(INSTALL_XML_DOC); \ + echo "( cd $(INSTALL_XML_DOC) && $(CP) * $(datadir)/html/$(INSTALL_XML_DOC) )" ; \ + ( cd $(INSTALL_XML_DOC) && $(CP) * $(datadir)/html/$(INSTALL_XML_DOC) ) ; \ else \ echo $(INSTALL_DATA) $(INSTALL_OPTS) $(INSTALL_XML_DOC)`echo .$$i | sed s/\.htmlhelp/.chm/ | sed s/\.html-no-chunks/.html/` $(datadir); \ $(INSTALL_DATA) $(INSTALL_OPTS) $(INSTALL_XML_DOC)`echo .$$i | sed s/\.htmlhelp/.chm/ | sed s/\.html-no-chunks/.html/` $(datadir); \ @@ -1193,3 +1210,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) +