X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FMakefile;h=ab1eb3d7d80577077a97bd9b74da75e5b4ab9b75;hb=abd113f06ebf3ac29f852e80c5a8c0060f979202;hp=db1c31e069067b23a91647758d8fc36d5f6c9fdf;hpb=1f9d5a8835940fa332f2b1b51ff59e0239b5fc3a;p=ghc-hetmet.git diff --git a/rts/Makefile b/rts/Makefile index db1c31e..ab1eb3d 100644 --- a/rts/Makefile +++ b/rts/Makefile @@ -36,7 +36,7 @@ endif # ----------------------------------------------------------------------------- # RTS ways -WAYS=$(GhcLibWays) $(GhcRTSWays) +WAYS=$(strip $(GhcLibWays) $(GhcRTSWays)) ifneq "$(findstring debug, $(way))" "" GhcRtsHcOpts= @@ -152,14 +152,15 @@ SRC_CC_OPTS += $(STANDARD_OPTS) SRC_CC_OPTS += $(GhcRtsCcOpts) SRC_HC_OPTS += $(GhcRtsHcOpts) $(STANDARD_OPTS) -package-name rts +SRC_HC_OPTS += -fvia-C + ifneq "$(GhcWithSMP)" "YES" SRC_CC_OPTS += -DNOSMP SRC_HC_OPTS += -optc-DNOSMP endif -ifeq "$(UseLibFFI)" "YES" -SRC_CC_OPTS += -DUSE_LIBFFI -PACKAGE_CPP_OPTS += -DUSE_LIBFFI +ifeq "$(UseLibFFIForAdjustors)" "YES" +SRC_CC_OPTS += -DUSE_LIBFFI_FOR_ADJUSTORS endif ifneq "$(DYNAMIC_RTS)" "YES" @@ -177,6 +178,11 @@ LIB_LD_OPTS = -L$(shell $(GHC_PKG_INPLACE) field base library-dirs | sed -e 's/l endif endif +# Mac OS X: make sure we compile for the right OS version +SRC_CC_OPTS += $(MACOSX_DEPLOYMENT_CC_OPTS) +SRC_HC_OPTS += $(addprefix -optc, $(MACOSX_DEPLOYMENT_CC_OPTS)) +LIB_LD_OPTS += $(addprefix -optl, $(MACOSX_DEPLOYMENT_LD_OPTS)) + # XXX DQ is now the same on all platforms, so get rid of it DQ = \" @@ -195,6 +201,10 @@ RtsUtils_CC_OPTS += -DTargetPlatform=$(DQ)$(TARGETPLATFORM)$(DQ) RtsUtils_CC_OPTS += -DGhcUnregisterised=$(DQ)$(GhcUnregisterised)$(DQ) RtsUtils_CC_OPTS += -DGhcEnableTablesNextToCode=$(DQ)$(GhcEnableTablesNextToCode)$(DQ) +# ffi.h triggers prototype warnings, so disable them here: +Interpreter_CC_OPTS += -Wno-strict-prototypes +Adjustor_CC_OPTS += -Wno-strict-prototypes + StgCRun_CC_OPTS += -w Typeable_CC_OPTS += -w RetainerProfile_CC_OPTS += -w @@ -267,9 +277,23 @@ endif # Add PAPI library if needed ifeq "$(GhcRtsWithPapi)" "YES" -SRC_HC_OPTS += -optc-DUSE_PAPI + +SRC_CC_OPTS += -DUSE_PAPI PACKAGE_CPP_OPTS += -DUSE_PAPI + +PACKAGE_CPP_OPTS += -DPAPI_INCLUDE_DIR=$(PapiIncludeDir) +PACKAGE_CPP_OPTS += -DPAPI_LIB_DIR=$(PapiLibDir) + +ifneq "$(PapiIncludeDir)" "" +SRC_HC_OPTS += -I$(PapiIncludeDir) +SRC_CC_OPTS += -I$(PapiIncludeDir) +SRC_HSC2HS_OPTS += -I$(PapiIncludeDir) endif +ifneq "$(PapiLibDirs)" "" +SRC_LD_OPTS += -L$(PapiLibDirs) +endif + +endif # GhcRtsWithPapi==YES #----------------------------------------------------------------------------- # make depend setup @@ -305,12 +329,6 @@ CLEAN_FILES += $(AUTO_APPLY_CMM) endif # ----------------------------------------------------------------------------- -# Compile GMP only if we don't have it already -# -# We use GMP's own configuration stuff, because it's all rather hairy -# and not worth re-implementing in our Makefile framework. - -CLEAN_FILES += gmp/libgmp.a # Need to get the GMP vars in through CPP to package.conf.in, and put # quotes around each element. @@ -336,6 +354,14 @@ SRC_HSC2HS_OPTS += -I../gmp/gmpbuild SRC_LD_OPTS += -L../gmp/gmpbuild #----------------------------------------------------------------------------- +# libffi stuff + +SRC_CC_OPTS += -I../libffi/build/include +SRC_HC_OPTS += -I../libffi/build/include +SRC_HSC2HS_OPTS += -I../libffi/build/include +SRC_LD_OPTS += -L../libffi/build/include + +#----------------------------------------------------------------------------- # # Building the GUM SysMan # @@ -361,13 +387,7 @@ endif # Compiling the cmm files # ToDo: should we really include Rts.h here? Required for GNU_ATTRIBUTE(). -SRC_HC_OPTS += -I. -\#include HCIncludes.h - -ifeq "$(Windows)" "YES" -PrimOps_HC_OPTS += -\#include '' -\#include win32/AsyncIO.h -else -PrimOps_HC_OPTS += -\#include posix/Itimer.h -endif +SRC_HC_OPTS += -I. # Otherwise the stack-smash handler gets triggered. ifeq "$(TargetOS_CPP)" "openbsd" @@ -377,6 +397,20 @@ endif # -O3 helps unroll some loops (especially in copy() with a constant argument). sm/Evac_HC_OPTS += -optc-funroll-loops +ifneq "$(findstring thr, $(way))" "" +EXTRA_SRCS += sm/Evac_thr.c sm/Scav_thr.c + +sm/Evac_thr.c : sm/Evac.c + cp $< $@ +sm/Scav_thr.c : sm/Scav.c + cp $< $@ + +sm/Evac_thr_HC_OPTS += -optc-DPARALLEL_GC +sm/Scav_thr_HC_OPTS += -optc-DPARALLEL_GC +else +EXCLUDED_SRCS += sm/Evac_thr.c sm/Scav_thr.c +endif + # Without this, thread_obj will not be inlined (at least on x86 with GCC 4.1.0) sm/Compact_HC_OPTS += -optc-finline-limit=2500 @@ -384,7 +418,7 @@ sm/Compact_HC_OPTS += -optc-finline-limit=2500 # use a variety of types to represent closure pointers (StgPtr, # StgClosure, StgMVar, etc.), and without -fno-strict-aliasing gcc is # allowed to assume that these pointers do not alias. eg. without -# this flag we get problems in GC.c:copy() with gcc 3.4.3, the +# this flag we get problems in sm/Evac.c:copy() with gcc 3.4.3, the # upd_evacee() assigments get moved before the object copy. SRC_CC_OPTS += -fno-strict-aliasing @@ -428,7 +462,6 @@ endif binary-dist: $(INSTALL_DIR) $(BIN_DIST_DIR)/rts - $(INSTALL_DIR) $(BIN_DIST_DIR)/rts/gmp $(INSTALL_DATA) Makefile $(BIN_DIST_DIR)/rts/ $(INSTALL_DATA) package.conf.in $(BIN_DIST_DIR)/rts/ ifneq "$(INSTALL_LIBS)" ""