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 |