X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=rts%2Fghc.mk;h=38ddbc0d4603aca049f59bea8d4954f12dc8ba9b;hp=8825219225ab8565dc876d7be4bb0fbae98de2be;hb=e5c3b478b3cd1707cf122833822f44b2ac09b8e9;hpb=834a2186da7f4ea29d4984a5f809183cb299754a diff --git a/rts/ghc.mk b/rts/ghc.mk index 8825219..38ddbc0 100644 --- a/rts/ghc.mk +++ b/rts/ghc.mk @@ -35,12 +35,13 @@ else ALL_DIRS += posix endif +EXCLUDED_SRCS := EXCLUDED_SRCS += rts/Main.c EXCLUDED_SRCS += rts/parallel/SysMan.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" @@ -67,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 @@ -145,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) @@ -157,6 +158,19 @@ 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) +ifeq "$(USE_DTRACE)" "YES" +ifeq "$(TargetOS_CPP)" "solaris2" +# On Darwin we don't need to generate binary containing probes defined +# in DTrace script, but DTrace on Solaris expects generation of binary +# from the DTrace probes definitions +rts_$1_DTRACE_OBJS = rts/dist/build/RtsProbes.$$($1_osuf) + +rts/dist/build/RtsProbes.$$($1_osuf) : $$(rts_$1_OBJS) + $(DTRACE) -G -C -Iincludes -DDTRACE -s rts/RtsProbes.d -o \ + $$@ $$(rts_$1_OBJS) +endif +endif + rts_dist_$1_CC_OPTS += -DRtsWay=\"rts_$1\" # Making a shared library for the RTS. @@ -167,19 +181,21 @@ $$(rts_$1_LIB) : $$(rts_$1_OBJS) $$(ALL_RTS_DEF_LIBS) rts/libs.depend "$$(rts_dist_HC)" -package-name rts -shared -dynamic -dynload deploy \ -no-auto-link-packages `cat rts/libs.depend` $$(rts_$1_OBJS) $$(ALL_RTS_DEF_LIBS) -o $$@ else -$$(rts_$1_LIB) : $$(rts_$1_OBJS) rts/libs.depend +$$(rts_$1_LIB) : $$(rts_$1_OBJS) $$(rts_$1_DTRACE_OBJS) rts/libs.depend "$$(RM)" $$(RM_OPTS) $$@ "$$(rts_dist_HC)" -package-name rts -shared -dynamic -dynload deploy \ - -no-auto-link-packages `cat rts/libs.depend` $$(rts_$1_OBJS) -o $$@ + -no-auto-link-packages `cat rts/libs.depend` $$(rts_$1_OBJS) \ + $$(rts_$1_DTRACE_OBJS) -o $$@ ifeq "$$(darwin_HOST_OS)" "1" # Ensure library's install name is correct before anyone links with it. install_name_tool -id $(ghclibdir)/$$(rts_$1_LIB_NAME) $$@ endif endif else -$$(rts_$1_LIB) : $$(rts_$1_OBJS) +$$(rts_$1_LIB) : $$(rts_$1_OBJS) $$(rts_$1_DTRACE_OBJS) "$$(RM)" $$(RM_OPTS) $$@ - echo $$(rts_$1_OBJS) | "$$(XARGS)" $$(XARGS_OPTS) "$$(AR)" $$(AR_OPTS) $$(EXTRA_AR_ARGS) $$@ + echo $$(rts_$1_OBJS) $$(rts_$1_DTRACE_OBJS) | "$$(XARGS)" $$(XARGS_OPTS) "$$(AR_STAGE1)" \ + $$(AR_OPTS_STAGE1) $$(EXTRA_AR_ARGS_STAGE1) $$@ endif endif @@ -279,6 +295,7 @@ rts/RtsMain_HC_OPTS += -optc-O0 rts/RtsMessages_CC_OPTS += -DProjectVersion=\"$(ProjectVersion)\" rts/RtsUtils_CC_OPTS += -DProjectVersion=\"$(ProjectVersion)\" +rts/Trace_CC_OPTS += -DProjectVersion=\"$(ProjectVersion)\" # rts/RtsUtils_CC_OPTS += -DHostPlatform=\"$(HOSTPLATFORM)\" rts/RtsUtils_CC_OPTS += -DHostArch=\"$(HostArch_CPP)\" @@ -434,13 +451,13 @@ 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 endif -$(eval $(call build-dependencies,rts,dist,1)) +$(eval $(call dependencies,rts,dist,1)) $(rts_dist_depfile_c_asm) : libffi/dist-install/build/ffi.h $(DTRACEPROBES_H) @@ -455,7 +472,7 @@ rts_LD_OPTS += -Llibffi/build/include # ----------------------------------------------------------------------------- # compile dtrace probes if dtrace is supported -ifeq "$(HaveDtrace)" "YES" +ifeq "$(USE_DTRACE)" "YES" rts_CC_OPTS += -DDTRACE rts_HC_OPTS += -DDTRACE @@ -465,10 +482,16 @@ rts_HC_OPTS += -DDTRACE # 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) includes/ghcplatform.h | $(dir $@)/. - "$(DTRACE)" $(filter -I%,$(rts_CC_OPTS)) -C -x cpppath=$(WhatGccIsCalled) -h -o $@ -s $< +ifeq "$(TargetOS_CPP)" "darwin" +# Darwin has a flag to tell dtrace which cpp to use. +# Unfortunately, this isn't supported on Solaris (See Solaris Dynamic Tracing +# Guide, Chapter 16, for the configuration variables available on Solaris) +DTRACE_FLAGS = -x cpppath=$(WhatGccIsCalled) +endif +DTRACEPROBES_SRC = rts/RtsProbes.d +$(DTRACEPROBES_H): $(DTRACEPROBES_SRC) includes/ghcplatform.h | $$(dir $$@)/. + "$(DTRACE)" $(filter -I%,$(rts_CC_OPTS)) -C $(DTRACE_FLAGS) -h -o $@ -s $< endif # ----------------------------------------------------------------------------- @@ -477,7 +500,7 @@ endif ifneq "$(BINDIST)" "YES" rts/dist/build/libHSrtsmain.a : rts/dist/build/Main.o "$(RM)" $(RM_OPTS) $@ - "$(AR)" $(AR_OPTS) $(EXTRA_AR_ARGS) $@ $< + "$(AR_STAGE1)" $(AR_OPTS_STAGE1) $(EXTRA_AR_ARGS_STAGE1) $@ $< endif # ----------------------------------------------------------------------------- @@ -509,5 +532,4 @@ INSTALL_LIBS += $(ALL_RTS_LIBS) $(eval $(call clean-target,rts,dist,rts/dist)) BINDIST_EXTRAS += rts/package.conf.in -BINDIST_EXTRAS += $(ALL_RTS_LIBS)