diff --git a/mk/config.mk.in b/mk/config.mk.in index f18a1e742b1cb9ba94bd9f0c0ca04c23f2bc9d44..c52eeda5fbcfb51f468a101c328391e62343defb 100644 --- a/mk/config.mk.in +++ b/mk/config.mk.in @@ -216,11 +216,15 @@ endif # things (incl "+") happens when compiling with this compiler GhcLibHcOpts=-O -SplitObjs = YES + # Win32 only: Enable the RTS and libraries to be built as DLLs -# +# Don't split object files for libs if we're building DLLs EnableWin32DLLs=@EnableWin32DLLs@ +ifeq "($EnableWin32DLLs)" "YES" +SplitObjs=NO +endif + # Strip local symbols from libraries? This can make the libraries smaller, # but makes debugging somewhat more difficult. Doesn't work with all ld's. diff --git a/mk/suffix.mk b/mk/suffix.mk index 1efd5b469f0d6f828f060a294ec211449b7dcad0..3793f73b1375223fb01e80d1632067dbffefe87a 100644 --- a/mk/suffix.mk +++ b/mk/suffix.mk @@ -35,8 +35,10 @@ HC_SPLIT_PRE= \ $(FIND) $(basename $@) -name '*.$(way_)o' -print | xargs $(RM) __rm_food ; fi HC_SPLIT_POST = touch $@ -HC_PRE__ = $(patsubst %,$(HC_SPLIT_PRE) ; ,$(filter -split-objs,$(HC_OPTS))) -HC_POST__ = $(patsubst %,$(HC_SPLIT_POST) ; ,$(filter -split-objs,$(HC_OPTS))) +ifeq "$(SplitObjs)" "YES" +HC_PRE__ = $(HC_SPLIT_PRE) ; +HC_POST__ = $(HC_SPLIT_POST) ; +endif SRC_HC_POST_OPTS += $(HC_POST__) SRC_HC_PRE_OPTS += $(HC_PRE__) diff --git a/mk/target.mk b/mk/target.mk index 93f131caafb9b9a2a52c755ab62afde1b7a1c813..49e462d4e60623c86f2c5f111434372b447702d9 100644 --- a/mk/target.mk +++ b/mk/target.mk @@ -449,7 +449,7 @@ endef # ifneq "$(HS_SRCS)" "" -ifneq "$(filter -split-objs,$(HC_OPTS))" "" +ifeq "$(SplitObjs)" "YES" define BUILD_LIB $(RM) $@ TMPDIR=$(TMPDIR); export TMPDIR; $(FIND) $(patsubst %.$(way_)o,%,$(LIBOBJS)) -name '*.$(way_)o' -print | xargs ar q $@ @@ -463,7 +463,7 @@ endif # ifeq "$(StripLibraries)" "YES" -ifneq "$(filter -split-objs,$(HC_OPTS))" "" +ifeq "$(SplitObjs)" "YES" SRC_HC_POST_OPTS += \ for i in $(basename $@)/*; do \ ld -r -x -o $$i.tmp $$i; \ @@ -495,8 +495,7 @@ DLL_IMPLIB_NAME = $(patsubst %.a, %_imp.a, $(LIBRARY)) endif $(DLL_NAME) :: $(LIBRARY) - $(BLD_DLL) --output-lib $(DLL_IMPLIB_NAME) -o $(DLL_NAME) $(LIBRARY) $(BLD_DLL_OPTS) - touch dLL_ifs.hi + $(BLD_DLL) --output-lib $(DLL_IMPLIB_NAME) -o $(DLL_NAME) $(LIBRARY) $(BLD_DLL_OPTS) endif #