X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fghc.mk;h=04dc7a3bca32037b429b8dfeb19b9094a68a6240;hb=26f4bfc82f2b2359259578e9c54d476fc2de650f;hp=ca68b55a17c00972ee05b96a5fe69c98d023628a;hpb=2537fda6092f9dd1599d8246060dbb11778b3639;p=ghc-hetmet.git diff --git a/rts/ghc.mk b/rts/ghc.mk index ca68b55..04dc7a3 100644 --- a/rts/ghc.mk +++ b/rts/ghc.mk @@ -35,13 +35,13 @@ else ALL_DIRS += posix endif +EXCLUDED_SRCS := EXCLUDED_SRCS += rts/Main.c EXCLUDED_SRCS += rts/parallel/SysMan.c -EXCLUDED_SRCS += rts/dyn-wrapper.c EXCLUDED_SRCS += $(wildcard rts/Vis*.c) -rts_C_SRCS = $(filter-out $(EXCLUDED_SRCS),$(wildcard rts/*.c $(foreach dir,$(ALL_DIRS),rts/$(dir)/*.c))) -rts_CMM_SRCS = $(wildcard rts/*.cmm) +rts_C_SRCS := $(filter-out $(EXCLUDED_SRCS),$(wildcard rts/*.c $(foreach dir,$(ALL_DIRS),rts/$(dir)/*.c))) +rts_CMM_SRCS := $(wildcard rts/*.cmm) # Don't compile .S files when bootstrapping a new arch ifneq "$(PORTING_HOST)" "YES" @@ -68,9 +68,9 @@ rts/dist/build/sm/Evac_thr.c : rts/sm/Evac.c | $$(dir $$@)/. rts/dist/build/sm/Scav_thr.c : rts/sm/Scav.c | $$(dir $$@)/. cp $< $@ -rts_H_FILES = $(wildcard includes/*.h) $(wildcard rts/*.h) +rts_H_FILES := $(wildcard rts/*.h) -ifeq "$(HaveDtrace)" "YES" +ifeq "$(USE_DTRACE)" "YES" DTRACEPROBES_H = rts/dist/build/RtsProbes.h rts_H_FILES += $(DTRACEPROBES_H) endif @@ -146,7 +146,7 @@ endif $(call distdir-way-opts,rts,dist,$1) $(call c-suffix-rules,rts,dist,$1,YES) $(call cmm-suffix-rules,rts,dist,$1) -$(call hs-suffix-rules-srcdir,rts,dist,$1,$$(dir)) +$(call hs-suffix-rules-srcdir,rts,dist,$1,.) # hs-suffix-rules-srcdir is needed when BootingFromHc to get the .hc rules rts_$1_LIB_NAME = libHSrts$$($1_libsuf) @@ -158,7 +158,7 @@ rts_$1_CMM_OBJS = $$(patsubst rts/%.cmm,rts/dist/build/%.$$($1_osuf),$$(rts_CMM_ rts_$1_OBJS = $$(rts_$1_C_OBJS) $$(rts_$1_S_OBJS) $$(rts_$1_CMM_OBJS) -rts_dist_$1_CC_OPTS += -DRtsWay=$$(DQ)rts_$1$$(DQ) +rts_dist_$1_CC_OPTS += -DRtsWay=\"rts_$1\" # Making a shared library for the RTS. ifneq "$$(findstring dyn, $1)" "" @@ -272,35 +272,32 @@ endif #----------------------------------------------------------------------------- # Flags for compiling specific files -# XXX DQ is now the same on all platforms, so get rid of it -DQ = \" - # If RtsMain.c is built with optimisation then the SEH exception stuff on # Windows gets confused. # This has to be in HC rather than CC opts, as otherwise there's a # -optc-O2 that comes after it. rts/RtsMain_HC_OPTS += -optc-O0 -rts/RtsMessages_CC_OPTS += -DProjectVersion=$(DQ)$(ProjectVersion)$(DQ) -rts/RtsUtils_CC_OPTS += -DProjectVersion=$(DQ)$(ProjectVersion)$(DQ) +rts/RtsMessages_CC_OPTS += -DProjectVersion=\"$(ProjectVersion)\" +rts/RtsUtils_CC_OPTS += -DProjectVersion=\"$(ProjectVersion)\" # -rts/RtsUtils_CC_OPTS += -DHostPlatform=$(DQ)$(HOSTPLATFORM)$(DQ) -rts/RtsUtils_CC_OPTS += -DHostArch=$(DQ)$(HostArch_CPP)$(DQ) -rts/RtsUtils_CC_OPTS += -DHostOS=$(DQ)$(HostOS_CPP)$(DQ) -rts/RtsUtils_CC_OPTS += -DHostVendor=$(DQ)$(HostVendor_CPP)$(DQ) +rts/RtsUtils_CC_OPTS += -DHostPlatform=\"$(HOSTPLATFORM)\" +rts/RtsUtils_CC_OPTS += -DHostArch=\"$(HostArch_CPP)\" +rts/RtsUtils_CC_OPTS += -DHostOS=\"$(HostOS_CPP)\" +rts/RtsUtils_CC_OPTS += -DHostVendor=\"$(HostVendor_CPP)\" # -rts/RtsUtils_CC_OPTS += -DBuildPlatform=$(DQ)$(BUILDPLATFORM)$(DQ) -rts/RtsUtils_CC_OPTS += -DBuildArch=$(DQ)$(BuildArch_CPP)$(DQ) -rts/RtsUtils_CC_OPTS += -DBuildOS=$(DQ)$(BuildOS_CPP)$(DQ) -rts/RtsUtils_CC_OPTS += -DBuildVendor=$(DQ)$(BuildVendor_CPP)$(DQ) +rts/RtsUtils_CC_OPTS += -DBuildPlatform=\"$(BUILDPLATFORM)\" +rts/RtsUtils_CC_OPTS += -DBuildArch=\"$(BuildArch_CPP)\" +rts/RtsUtils_CC_OPTS += -DBuildOS=\"$(BuildOS_CPP)\" +rts/RtsUtils_CC_OPTS += -DBuildVendor=\"$(BuildVendor_CPP)\" # -rts/RtsUtils_CC_OPTS += -DTargetPlatform=$(DQ)$(TARGETPLATFORM)$(DQ) -rts/RtsUtils_CC_OPTS += -DTargetArch=$(DQ)$(TargetArch_CPP)$(DQ) -rts/RtsUtils_CC_OPTS += -DTargetOS=$(DQ)$(TargetOS_CPP)$(DQ) -rts/RtsUtils_CC_OPTS += -DTargetVendor=$(DQ)$(TargetVendor_CPP)$(DQ) +rts/RtsUtils_CC_OPTS += -DTargetPlatform=\"$(TARGETPLATFORM)\" +rts/RtsUtils_CC_OPTS += -DTargetArch=\"$(TargetArch_CPP)\" +rts/RtsUtils_CC_OPTS += -DTargetOS=\"$(TargetOS_CPP)\" +rts/RtsUtils_CC_OPTS += -DTargetVendor=\"$(TargetVendor_CPP)\" # -rts/RtsUtils_CC_OPTS += -DGhcUnregisterised=$(DQ)$(GhcUnregisterised)$(DQ) -rts/RtsUtils_CC_OPTS += -DGhcEnableTablesNextToCode=$(DQ)$(GhcEnableTablesNextToCode)$(DQ) +rts/RtsUtils_CC_OPTS += -DGhcUnregisterised=\"$(GhcUnregisterised)\" +rts/RtsUtils_CC_OPTS += -DGhcEnableTablesNextToCode=\"$(GhcEnableTablesNextToCode)\" # Compile various performance-critical pieces *without* -fPIC -dynamic # even when building a shared library. If we don't do this, then the @@ -313,8 +310,8 @@ rts/RtsUtils_CC_OPTS += -DGhcEnableTablesNextToCode=$(DQ)$(GhcEnableTablesNextTo # by the default small memory can't be resolved at runtime). So we # only do this on i386. # -# This apparently doesn't work on OS X (Darwin) where we get errors of -# the form +# This apparently doesn't work on OS X (Darwin) nor on Solaris. +# On Darwin we get errors of the form # # ld: absolute addressing (perhaps -mdynamic-no-pic) used in _stg_ap_0_fast from rts/dist/build/Apply.dyn_o not allowed in slidable image # @@ -322,8 +319,27 @@ rts/RtsUtils_CC_OPTS += -DGhcEnableTablesNextToCode=$(DQ)$(GhcEnableTablesNextTo # # ld: warning codegen in _stg_ap_pppv_fast (offset 0x0000005E) prevents image from loading in dyld shared cache # +# On Solaris we get errors like: +# +# Text relocation remains referenced +# against symbol offset in file +# .rodata (section) 0x11 rts/dist/build/Apply.dyn_o +# ... +# ld: fatal: relocations remain against allocatable but non-writable sections +# collect2: ld returned 1 exit status + +ifeq "$(TargetArch_CPP)" "i386" +i386_SPEED_HACK := "YES" +ifeq "$(TargetOS_CPP)" "darwin" +i386_SPEED_HACK := "NO" +endif +ifeq "$(TargetOS_CPP)" "solaris2" +i386_SPEED_HACK := "NO" +endif +endif + ifeq "$(TargetArch_CPP)" "i386" -ifneq "$(TargetOS_CPP)" "darwin" +ifeq "$(i386_SPEED_HACK)" "YES" rts/sm/Evac_HC_OPTS += -fno-PIC rts/sm/Evac_thr_HC_OPTS += -fno-PIC rts/sm/Scav_HC_OPTS += -fno-PIC @@ -419,7 +435,7 @@ rts_dist_C_FILES = $(rts_C_SRCS) $(rts_thr_EXTRA_C_SRCS) $(rts_S_SRCS) # TICKY_TICKY can't be used together, so we omit TICKY_TICKY for now. rts_dist_MKDEPENDC_OPTS += -DPROFILING -DTHREADED_RTS -DDEBUG -ifeq "$(HaveDtrace)" "YES" +ifeq "$(USE_DTRACE)" "YES" rts_dist_MKDEPENDC_OPTS += -Irts/dist/build @@ -438,24 +454,21 @@ rts_HSC2HS_OPTS += -Ilibffi/build/include rts_LD_OPTS += -Llibffi/build/include # ----------------------------------------------------------------------------- -# compile generic patchable dyn-wrapper - -DYNWRAPPER_SRC = rts/dyn-wrapper.c -DYNWRAPPER_PROG = rts/dyn-wrapper$(exeext) -$(DYNWRAPPER_PROG): $(DYNWRAPPER_SRC) - "$(HC)" -cpp -optc-include -optcdyn-wrapper-patchable-behaviour.h $(INPLACE_EXTRA_FLAGS) $< -o $@ - -# ----------------------------------------------------------------------------- # compile dtrace probes if dtrace is supported -ifeq "$(HaveDtrace)" "YES" +ifeq "$(USE_DTRACE)" "YES" rts_CC_OPTS += -DDTRACE rts_HC_OPTS += -DDTRACE +# Apple's dtrace (the only one supported by ghc at the moment) uses +# gcc as its preprocessor. If gcc isn't at /usr/bin/gcc, or we need +# to force it to use a different gcc, we need to give the path in +# the option cpppath. + DTRACEPROBES_SRC = rts/RtsProbes.d -$(DTRACEPROBES_H): $(DTRACEPROBES_SRC) | $(dir $@)/. - "$(DTRACE)" $(filter -I%,$(rts_CC_OPTS)) -C -h -o $@ -s $< +$(DTRACEPROBES_H): $(DTRACEPROBES_SRC) includes/ghcplatform.h | $(dir $@)/. + "$(DTRACE)" $(filter -I%,$(rts_CC_OPTS)) -C -x cpppath=$(WhatGccIsCalled) -h -o $@ -s $< endif @@ -464,6 +477,7 @@ endif ifneq "$(BINDIST)" "YES" rts/dist/build/libHSrtsmain.a : rts/dist/build/Main.o + "$(RM)" $(RM_OPTS) $@ "$(AR)" $(AR_OPTS) $(EXTRA_AR_ARGS) $@ $< endif