X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=mk%2Ftarget.mk;h=57b5628c86228cd66ea714c699a2d06cbd4b9897;hb=90fdf6fe22eebb4140f0b26bf138be6fdad43198;hp=c0228889eccc5ebfa3733dc1282401323de2d8ad;hpb=ebe6fa3258fc2b0abd237c69727a8eb977b8a590;p=ghc-hetmet.git diff --git a/mk/target.mk b/mk/target.mk index c022888..57b5628 100644 --- a/mk/target.mk +++ b/mk/target.mk @@ -308,6 +308,12 @@ ifneq "$(way)" "" SRC_HC_OPTS += -hisuf $(way_)hi -hcsuf $(way_)hc -osuf $(way_)o endif +# add syslib dependencies and current package name +SRC_HC_OPTS += $(patsubst %, -package %, $(PACKAGE_DEPS)) +ifneq "$(PACKAGE)" "" +SRC_HC_OPTS += -package-name $(PACKAGE) +endif + #---------------------------------------- # C programs @@ -321,15 +327,29 @@ endif #---------------------------------------- # Building HsLibs libraries. +# +# Inputs: +# $(PACKAGE) is the name of the library to build +# $(IS_CBITS_LIB) should be "YES" for a "cbits" library +# +# Outputs: +# $(LIBRARY) the name of the library.a +# $(GHIC_LIBRARY) the name of the library.o (for GHCi0 +# $(LIBOBJS) objects to put in library +# $(STUBOBJS) more objects to put in library +# +# $(LIBOBJS) is set to $(HS_OBJS) or $(C_OBJS) depending +# on whether or not it's a "cbits" library. But you can +# override this by setting $(LIBOBJS) yourself -ifneq "$(HSLIB)" "" +ifneq "$(PACKAGE)" "" ifeq "$(IS_CBITS_LIB)" "YES" _cbits := _cbits endif -LIBRARY = libHS$(HSLIB)$(_cbits)$(_way).a -GHCI_LIBRARY = HS$(HSLIB)$(_cbits)$(_way).o +LIBRARY = libHS$(PACKAGE)$(_cbits)$(_way).a +GHCI_LIBRARY = HS$(PACKAGE)$(_cbits)$(_way).o ifneq "$(IS_CBITS_LIB)" "YES" WAYS=$(GhcLibWays) @@ -348,15 +368,24 @@ SRC_CC_OPTS += -I$(GHC_INCLUDE_DIR) -I$(GHC_RUNTIME_DIR) ifeq "$(IS_CBITS_LIB)" "YES" override datadir:=$(libdir)/includes -INSTALL_DATAS += Hs$(shell perl -e 'print ucfirst "$(HSLIB)"').h +INSTALL_DATAS += Hs$(shell perl -e 'print ucfirst "$(PACKAGE)"').h else SRC_CC_OPTS += -Icbits endif -endif # HSLIB +endif # PACKAGE #---------------------------------------- # Libraries/archives +# +# Build $(LIBRARY) from $(LIBOJBS)+$(STUBOBJS) +# +# Inputs: +# $(LIBOBJS) +# $(STUBOBJS) +# +# Outputs: +# Rule to build $(LIBRARY) ifneq "$(LIBRARY)" "" all :: $(LIBRARY) @@ -397,7 +426,7 @@ ifeq "$(GhcWithInterpreter)" "YES" HC_SPLIT_POST = ld -r -x -o $@ $(basename $@)/*.$(way_)o else HC_SPLIT_POST = touch $@ -endif +endif # GhcWithInterpreter == YES SRC_HC_PRE_OPTS += $(HC_SPLIT_PRE); SRC_HC_POST_OPTS += $(HC_SPLIT_POST); @@ -430,35 +459,57 @@ SRC_HC_POST_OPTS += \ else SRC_HC_POST_OPTS += \ ld -r -x -o $@.tmp $@; $(MV) $@.tmp $@ -endif -endif +endif # SplitObjs +endif # StripLibraries $(LIBRARY) :: $(STUBOBJS) $(LIBOBJS) $(BUILD_LIB) -endif +endif # LIBRARY = "" #-------------------------------------------------------------- # Build dynamically-linkable libraries for GHCi # +# Build $(GHCI_LIBRARY) from $(LIBOBJS)+$(STUBOBJS) +# +# Why? GHCi can only link .o files (at the moment), not .a files +# so we have to build libFoo.o as well as libFoo.a +# +# Furthermore, GHCi currently never loads +# profiling libraries (or other non-std ways) +# +# Inputs: +# $(GHCI_LIBRARY) +# +# Outputs: +# Rule to build $(GHCI_LIBRARY) + ifneq "$(GHCI_LIBRARY)" "" ifeq "$(way)" "" ifeq "$(GhcWithInterpreter)" "YES" + +INSTALL_LIBS += $(GHCI_LIBRARY) +CLEAN_FILES += $(GHCI_LIBRARY) + all :: $(GHCI_LIBRARY) -ifeq "$(GHCI_LIBOBJS)" "" -GHCI_LIBOBJS = $(LIBOBJS) +ifneq "$(GHCI_LIBRARY)" "HSstd.o" +# An annoying gotcha is that the Prelude is a bit special, +# for reasons described in ghc/lib/std/Makefile. +# So we only put in this standard rule for packages other than std +# The rule for the Prelude is in ghc/lib/std/Makefile +# We check for GHCI_LIBRARY being HSstd.o rather than +# PACKAGE being std, because we want to still use the boilerplate rule +# for cbits. +$(GHCI_LIBRARY) :: $(LIBOBJS) + ld -r -x -o $@ $(LIBOBJS) $(STUBOBJS) endif -$(GHCI_LIBRARY) :: $(GHCI_LIBOBJS) - ld -r -x -o $@ $(GHCI_LIBOBJS) $(STUBOBJS) +endif # GhcWithInterpreter +endif # way +endif # GHCI_LIBRARY -INSTALL_LIBS += $(GHCI_LIBRARY) -CLEAN_FILES += $(GHCI_LIBRARY) -endif -endif -endif #---------------------------------------- # Building Win32 DLLs @@ -466,13 +517,13 @@ endif ifeq "$(DLLized)" "YES" -ifneq "$(HSLIB)" "" +ifneq "$(PACKAGE)" "" -SRC_BLD_DLL_OPTS += --export-all --output-def=HS$(HSLIB)$(_cbits)$(_way).def DllVersionInfo.$(way_)o -ifneq "$(HSLIB)" "rts" +SRC_BLD_DLL_OPTS += --export-all --output-def=HS$(PACKAGE)$(_cbits)$(_way).def DllVersionInfo.$(way_)o +ifneq "$(PACKAGE)" "rts" SRC_BLD_DLL_OPTS += -lHSstd_cbits_imp -L$(GHC_LIB_DIR)/std/cbits SRC_BLD_DLL_OPTS += -lHSrts_$(way_)imp -L$(GHC_RUNTIME_DIR) -ifneq "$(HSLIB)" "std" +ifneq "$(PACKAGE)" "std" ifeq "$(IS_CBITS_LIB)" "" SRC_BLD_DLL_OPTS += -lHSstd_$(way_)imp -L$(GHC_LIB_DIR)/std endif @@ -480,15 +531,15 @@ endif endif SRC_BLD_DLL_OPTS += -lgmp -L. -L$(GHC_RUNTIME_DIR)/gmp ifeq "$(IS_CBITS_LIB)" "" -SRC_BLD_DLL_OPTS += $(patsubst %,-lHS%_$(way_)imp, $(HSLIB_DEPS)) -SRC_BLD_DLL_OPTS += $(patsubst %,-L../%, $(HSLIB_DEPS)) +SRC_BLD_DLL_OPTS += $(patsubst %,-lHS%_$(way_)imp, $(PACKAGE_DEPS)) +SRC_BLD_DLL_OPTS += $(patsubst %,-L../%, $(PACKAGE_DEPS)) endif ifneq "$(HAS_CBITS)" "" -SRC_BLD_DLL_OPTS += -lHS$(HSLIB)_cbits_imp -Lcbits +SRC_BLD_DLL_OPTS += -lHS$(PACKAGE)_cbits_imp -Lcbits endif SRC_BLD_DLL_OPTS += -lwsock32 -lwinmm -endif # HSLIB != "" +endif # PACKAGE != "" SplitObjs = NO