sbsv2/raptor/lib/flm/tracecompiler.mk
changeset 616 24e4ef208cca
parent 590 360bd6b35136
child 625 a1925fb7753a
equal deleted inserted replaced
613:839712f5a78c 616:24e4ef208cca
    26 endef
    26 endef
    27 
    27 
    28 $(if $(FLMDEBUG),$(info <debug>INCLUDES=$(USERINCLUDE) $(SYSTEMINCLUDE)</debug>))
    28 $(if $(FLMDEBUG),$(info <debug>INCLUDES=$(USERINCLUDE) $(SYSTEMINCLUDE)</debug>))
    29 $(if $(FLMDEBUG),$(info <debug>TARGET=$(TARGET) TARGETEXT=$(TARGETEXT)</debug>))
    29 $(if $(FLMDEBUG),$(info <debug>TARGET=$(TARGET) TARGETEXT=$(TARGETEXT)</debug>))
    30 
    30 
    31 # Find out TRACE_PATH  by looking for the trace folder in SYSTEMINCLUDE and USERINCLUDES
    31 # Find out TRACE_PATH by looking for the trace folder in SYSTEMINCLUDE and USERINCLUDES
    32 # traces/traces_<target_name>_<target_extension>
    32 # traces/<target_name>_<target_extension>
    33 TRACE_PATH:=$(call get_trace_path,/traces/traces_$(TRACE_RELEASABLE_ID))
    33 TRACE_PATH:=$(call get_trace_path,/traces/$(TRACE_RELEASABLE_ID))
    34 ifneq ($(TRACE_PATH),)
    34 ifneq ($(TRACE_PATH),)
    35   TRACE_PRJNAME:=$(TRACE_RELEASABLE_ID)
    35   TRACE_PRJNAME:=$(TRACE_RELEASABLE_ID)
    36 else # obsolete forms for compatibility
    36 else # obsolete forms for compatibility
    37   # traces_<target_name>_<target_ext>
    37   # traces_<target_name>_<target_ext>
    38   TRACE_PATH:=$(call get_trace_path,/traces_$(TARGET)_$(TARGETEXT))
    38   TRACE_PATH:=$(call get_trace_path,/traces_$(TARGET)_$(TARGETEXT))
    61 
    61 
    62 
    62 
    63 # initialise (so what output will be correct if we don't actually run the TC)
    63 # initialise (so what output will be correct if we don't actually run the TC)
    64 TRACE_DICTIONARY:=
    64 TRACE_DICTIONARY:=
    65 AUTOGEN_HEADER:=
    65 AUTOGEN_HEADER:=
    66 $(if $(FLMDEBUG),$(info <debug>TRACE_PATH='$(TRACE_PATH)'   TRACE_RELEASABLE_ID='$(TRACE_RELEASABLE_ID)'</debug>))
    66 $(if $(FLMDEBUG),$(info <debug>TRACE_PATH='$(TRACE_PATH)' TRACE_RELEASABLE_ID='$(TRACE_RELEASABLE_ID)'</debug>))
    67 
    67 
    68 # Run trace compiler only if TRACE_PATH exists
    68 # Run trace compiler only if TRACE_PATH exists
    69 ifneq ($(TRACE_PATH),)
    69 ifneq ($(TRACE_PATH),)
    70 TRACE_MARKER:=$(TRACE_MARKER_PATH)/tracecompile_$(TRACE_RELEASABLE_ID)_$(UID_TC).done
    70 TRACE_MARKER:=$(TRACE_MARKER_PATH)/tracecompile_$(TRACE_RELEASABLE_ID)_$(UID_TC).done
       
    71 TRACE_THISCOMPONENT_ALLRULE:=$(call sanitise,$(COMPONENT_META))_alltracedone
    71 TRACE_HEADERS:=
    72 TRACE_HEADERS:=
    72 
    73 
    73 TRACE_SOURCE_LIST:=$(TRACE_MARKER_PATH)/tracecompile_$(TRACE_RELEASABLE_ID)_$(UID_TC).sourcelist
    74 TRACE_SOURCE_LIST:=$(TRACE_MARKER_PATH)/tracecompile_$(TRACE_RELEASABLE_ID)_$(UID_TC).sourcelist
    74 
    75 $(if $(FLMDEBUG),$(info <debug>TRACE_SOURCE_LIST=$(TRACE_SOURCE_LIST)</debug>))
    75 # 1. Append to or create the list of source files for trace compiler to process
    76 TRACE_VARIANT_SOURCE_LIST:=$(OUTPUTPATH)/$(VARIANTPLATFORM)/$(VARIANTTYPE)/tracecompile_$(TRACE_RELEASABLE_ID)_$(UID_TC).sourcelist
    76 # 2. Check if the hash in trace marker remain unchanged. If not, remove marker so trace compiler will run again. 
    77 $(if $(FLMDEBUG),$(info <debug>TRACE_VARIANT_SOURCE_LIST=$(TRACE_VARIANT_SOURCE_LIST)</debug>))
    77 X:=$(shell set -x ; $(GNUMKDIR) -p $(TRACE_MARKER_PATH) ; $(GNUTOUCH) $(TRACE_SOURCE_LIST) ; echo -e "$(subst $(CHAR_SPACE),\\n,$(SOURCE))" | $(GNUSORT) -u $(TRACE_SOURCE_LIST) - > $(TRACE_SOURCE_LIST).tmp && $(GNUMV) $(TRACE_SOURCE_LIST).tmp $(TRACE_SOURCE_LIST) ; $(GNUMD5SUM) -c $(TRACE_MARKER) || $(GNURM) $(TRACE_MARKER))
    78 
    78 
    79 # The sourcelist_grouped_write macro allows us to construct a source list file, 10 objects at a time
    79 $(if $(FLMDEBUG),$(info <debug>Trace Compiler sourcelist generation output: $(X)</debug>))
    80 # to avoid limits on argument lengths and sizes on Windows.
       
    81 # $1 = list of source files
       
    82 # $2 = ">" or ">>" i.e. for creating the file.
       
    83 define sourcelist_grouped_write
       
    84 	$(call startrule,sourcelist_write) \
       
    85 	$(if $1,echo -en '$(subst $(CHAR_SPACE),\n,$(strip $(wordlist 1,10,$1)))\n' $2 $$@,true) \
       
    86 	$(call endrule,sourcelist_write) 
       
    87 	$(if $1,$(call sourcelist_grouped_write,$(wordlist 11,$(words $1),$1),>>),)
       
    88 endef
       
    89 
       
    90 # Write the list of sources for this variant to a file
       
    91 # Make the combined sourcelist for this target depend on it
       
    92 # It's all to do with how make treats this file when it 
       
    93 # does exist. We are forcing it evaluate the target rule here 
       
    94 # even if the file is in place by making it PHONY. In other 
       
    95 # words, this is forcing the variant source list to always 
       
    96 # be written but later on we might not write to the combined 
       
    97 # source list if it isn't going to change.
       
    98 define sourcelist_write
       
    99 $(TRACE_SOURCE_LIST): $(TRACE_VARIANT_SOURCE_LIST)
       
   100 
       
   101 .PHONY:: $(TRACE_VARIANT_SOURCE_LIST)
       
   102 
       
   103 $(TRACE_VARIANT_SOURCE_LIST): $(SOURCE) 
       
   104 	$(call sourcelist_grouped_write,$(SOURCE),>)
       
   105 
       
   106 endef
       
   107 
       
   108 $(eval $(sourcelist_write))
       
   109 $(eval $(call GenerateStandardCleanTarget,$(TRACE_VARIANT_SOURCE_LIST),,))
       
   110 
       
   111 
       
   112 $(if $(FLMDEBUG),$(info <debug>Trace Compiler SOURCES: $(SOURCE)</debug>))
       
   113 
       
   114 
       
   115 .PHONY:: $(TRACE_THISCOMPONENT_ALLRULE)
       
   116 
       
   117 $(TRACE_THISCOMPONENT_ALLRULE):: $(TRACE_MARKER)
    80 
   118 
    81 $(TRACE_MARKER) : $(SOURCE)
   119 $(TRACE_MARKER) : $(SOURCE)
    82 
   120 
    83 TRACE_HEADERS:=$(foreach SRC,$(SOURCE),$(TRACE_PATH)/$(basename $(notdir $(SRC)))Traces.h)
   121 TRACE_HEADERS:=$(foreach SRC,$(SOURCE),$(TRACE_PATH)/$(basename $(notdir $(SRC)))Traces.h)
    84 
   122 
    85 $(TRACE_HEADERS): $(TRACE_MARKER)
   123 $(TRACE_HEADERS): $(TRACE_MARKER)
    86 
   124 
    87 ifeq ($(GUARD_$(call sanitise,$(TRACE_MARKER))),)
   125 TRACE_GUARD:=GUARD_$(call sanitise,$(TRACE_MARKER))
    88 GUARD_$(call sanitise,$(TRACE_MARKER)):=1
   126 $(if $(FLMDEBUG),$(info <debug>TRACE GUARD for '$(TRACE_RELEASABLE_ID)' is:  $(TRACE_GUARD)=$($(TRACE_GUARD))</debug>))
    89 
   127 
    90 $(if $(FLMDEBUG),$(info <debug>PAST MARKER='$(TRACE_RELEASABLE_ID)'</debug>))
   128 ifeq ($($(TRACE_GUARD)),)
       
   129 $(TRACE_GUARD):=1
       
   130 
       
   131 $(if $(FLMDEBUG),$(info <debug>PAST GUARD (unique trace) for '$(TRACE_RELEASABLE_ID)'</debug>))
    91 # The trace compiler likes to change . into _ so we must do the same in the case of mmps with a name like
   132 # The trace compiler likes to change . into _ so we must do the same in the case of mmps with a name like
    92 # fred.prd.mmp we want fred_prd
   133 # fred.prd.mmp we want fred_prd
    93 TRACE_PRJNAME_SANITISED:=$(subst .,_,$(TRACE_PRJNAME))
   134 TRACE_PRJNAME_SANITISED:=$(subst .,_,$(TRACE_PRJNAME))
    94 OLDTC_TRACE_PRJNAME_SANITISED:=$(subst .,_,$(OLDTC_TRACE_PRJNAME))
   135 OLDTC_TRACE_PRJNAME_SANITISED:=$(subst .,_,$(OLDTC_TRACE_PRJNAME))
    95 
   136 
   114 # check if it looks like a version that supports the new cli interface: supporting up to verion 9 in the future.
   155 # check if it looks like a version that supports the new cli interface: supporting up to verion 9 in the future.
   115 TRACE_VER:=$(findstring new,$(foreach version,2 3 4 5 6 7 8 9,$(patsubst $(version).%,new,$(TRACE_VSTR))))
   156 TRACE_VER:=$(findstring new,$(foreach version,2 3 4 5 6 7 8 9,$(patsubst $(version).%,new,$(TRACE_VSTR))))
   116 endif
   157 endif
   117 $(if $(FLMDEBUG),$(info <debug>TRACE_VSTR=$(TRACE_VSTR) TRACE_VER=$(TRACE_VER)</debug>))
   158 $(if $(FLMDEBUG),$(info <debug>TRACE_VSTR=$(TRACE_VSTR) TRACE_VER=$(TRACE_VER)</debug>))
   118 
   159 
       
   160 
       
   161 # 0. Generate a combined sourcelist from all variants. 
       
   162 # 0.1 Write the combined list to a temporary file
       
   163 # 0.2 Check if there are new files since the last build
       
   164 #      md5 stored in the trace marker.
       
   165 # 0.3 Rewrite the combined sourcelist if new sourcefiles have appeared
       
   166 #      since the last build
       
   167 # 1. Use pipe to send inputs to trace compiler to process
       
   168 # 2. Create a hash regarding to source names and put it in marker.
       
   169 # 3. Show source names that are processed by trace compiler
       
   170 
   119 ifeq ($(TRACE_VER),new)
   171 ifeq ($(TRACE_VER),new)
   120 define trace_compile
   172 define trace_compile
   121 $(TRACE_MARKER) : $(PROJECT_META)
   173 
       
   174 $(TRACE_SOURCE_LIST):
       
   175 	$(call startrule,sourcelist_combine) \
       
   176 	$(GNUCAT) $(TRACE_SOURCE_LIST) $$^ 2>/dev/null | $(GNUSORT) -u > $$@.new && \
       
   177 	$(GNUMD5SUM) -c $(TRACE_MARKER) 2>/dev/null ||  \
       
   178 	  $(GNUCP) $$@.new $$@ \
       
   179 	$(call endrule,sourcelist_combine)
       
   180 
       
   181 $(TRACE_MARKER) : $(PROJECT_META) $(TRACE_SOURCE_LIST)
   122 	$(call startrule,tracecompile) \
   182 	$(call startrule,tracecompile) \
   123 	( $(GNUCAT) $(TRACE_SOURCE_LIST); \
   183 	( $(GNUCAT) $(TRACE_SOURCE_LIST); \
   124 	  echo -en "*ENDOFSOURCEFILES*\n" ) | \
   184 	  echo -en "*ENDOFSOURCEFILES*\n" ) | \
   125 	$(JAVA_COMMAND) $(TRACE_COMPILER_START) $(if $(FLMDEBUG),-d,) --uid=$(UID_TC) --project=$(TRACE_PRJNAME) --mmp=$(PROJECT_META) --traces=$(TRACE_PATH) &&  \
   185 	$(JAVA_COMMAND) $(TRACE_COMPILER_START) $(if $(FLMDEBUG),-d,) --uid=$(UID_TC) --project=$(TRACE_PRJNAME) --mmp=$(PROJECT_META) --traces=$(TRACE_PATH) &&  \
   126 	$(GNUMD5SUM) $(TRACE_SOURCE_LIST) > $(TRACE_MARKER) && \
   186 	$(GNUMD5SUM) $(TRACE_SOURCE_LIST).new > $$@ 2>/dev/null && \
   127 	{ $(GNUTOUCH) $(TRACE_DICTIONARY) $(AUTOGEN_HEADER); \
   187 	{ $(GNUTOUCH) $(TRACE_DICTIONARY) $(AUTOGEN_HEADER); \
   128 	 $(GNUCAT) $(TRACE_SOURCE_LIST) ; true ; } \
   188 	 $(GNUCAT) $(TRACE_SOURCE_LIST) ; true ; } \
   129 	$(call endrule,tracecompile)
   189 	$(call endrule,tracecompile)
   130 endef
   190 endef
   131 
   191 
   132 else # Old inteface
   192 else # Old inteface
   133 TRACE_COMPILER_START:=-classpath $(TRACE_COMPILER_PATH)/tracecompiler com.nokia.tracecompiler.TraceCompiler
   193 TRACE_COMPILER_START:=-classpath $(TRACE_COMPILER_PATH)/tracecompiler com.nokia.tracecompiler.TraceCompiler
   134 # 1. Use pipe to send inputs to trace compiler to process
   194 
   135 # 2. Create a hash regarding to source names and put it in marker.
       
   136 # 3. Show source names that are processed by trace compiler
       
   137 define trace_compile
   195 define trace_compile
   138 $(TRACE_MARKER) : $(PROJECT_META)
   196 
       
   197 $(TRACE_SOURCE_LIST):
       
   198 	$(call startrule,sourcelist_combine) \
       
   199 	$(GNUCAT) $(TRACE_SOURCE_LIST) $$^ 2>/dev/null | $(GNUSORT) -u > $$@.new && \
       
   200 	$(GNUMD5SUM) -c $(TRACE_MARKER) 2>/dev/null ||  \
       
   201 	  $(GNUCP) $$@.new $$@ \
       
   202 	$(call endrule,sourcelist_combine)
       
   203 
       
   204 $(TRACE_MARKER) : $(PROJECT_META) $(TRACE_SOURCE_LIST)
   139 	$(call startrule,tracecompile) \
   205 	$(call startrule,tracecompile) \
   140 	( echo -en "$(OLDTC_TRACE_PRJNAME)\n$(PROJECT_META)\n"; \
   206 	( echo -en "$(OLDTC_TRACE_PRJNAME)\n$(PROJECT_META)\n"; \
   141 	  $(GNUCAT) $(TRACE_SOURCE_LIST); \
   207 	  $(GNUCAT) $(TRACE_SOURCE_LIST); \
   142 	  echo -en "*ENDOFSOURCEFILES*\n" ) | \
   208 	  echo -en "*ENDOFSOURCEFILES*\n" ) | \
   143 	$(JAVA_COMMAND) $(TRACE_COMPILER_START) $(UID_TC) &&  \
   209 	$(JAVA_COMMAND) $(TRACE_COMPILER_START) $(UID_TC) &&  \
   144 	$(GNUMD5SUM) $(TRACE_SOURCE_LIST) > $(TRACE_MARKER) && \
   210 	$(GNUMD5SUM) $(TRACE_SOURCE_LIST).new > $$@ 2>/dev/null && \
   145 	{ $(GNUTOUCH) $(TRACE_DICTIONARY) $(AUTOGEN_HEADER); \
   211 	{ $(GNUTOUCH) $(TRACE_DICTIONARY) $(AUTOGEN_HEADER); \
   146 	 $(GNUCAT) $(TRACE_SOURCE_LIST) ; true ; } \
   212 	 $(GNUCAT) $(TRACE_SOURCE_LIST) ; true ; } \
   147 	$(call endrule,tracecompile)
   213 	$(call endrule,tracecompile)
   148 endef
   214 endef
   149 
   215