Changeset 985 in kBuild
- Timestamp:
- May 29, 2007 1:16:10 AM (18 years ago)
- Location:
- trunk/kBuild
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kBuild/footer.kmk
r984 r985 33 33 # 34 34 35 # All targets of each types. 36 _ALL_BLDPROGS := $(BLDPROGS) $(BLDPROGS.$(BUILD_PLATFORM)) $(BLDPROGS.$(BUILD_PLATFORM).$(BUILD_PLATFORM_ARCH)) $(BLDPROGS.$(BUILD_PLATFORM_ARCH)) $(BLDPROGS.$(BUILD_PLATFORM_CPU)) $(BLDPROGS.$(BUILD_TYPE)) 37 _ALL_LIBRARIES := $(LIBRARIES) $(LIBRARIES.$(BUILD_TARGET)) $(LIBRARIES.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) $(LIBRARIES.$(BUILD_TARGET_ARCH)) $(LIBRARIES.$(BUILD_TARGET_CPU)) $(LIBRARIES.$(BUILD_TYPE)) 38 _ALL_IMPORT_LIBS := $(IMPORT_LIBS) $(IMPORT_LIBS.$(BUILD_TARGET)) $(IMPORT_LIBS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) $(IMPORT_LIBS.$(BUILD_TARGET_ARCH)) $(IMPORT_LIBS.$(BUILD_TARGET_CPU)) $(IMPORT_LIBS.$(BUILD_TYPE)) 39 _ALL_DLLS := $(DLLS) $(DLLS.$(BUILD_TARGET)) $(DLLS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) $(DLLS.$(BUILD_TARGET_ARCH)) $(DLLS.$(BUILD_TARGET_CPU)) $(DLLS.$(BUILD_TYPE)) 40 _ALL_PROGRAMS := $(PROGRAMS) $(PROGRAMS.$(BUILD_TARGET)) $(PROGRAMS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) $(PROGRAMS.$(BUILD_TARGET_ARCH)) $(PROGRAMS.$(BUILD_TARGET_CPU)) $(PROGRAMS.$(BUILD_TYPE)) 41 _ALL_SYSMODS := $(SYSMODS) $(SYSMODS.$(BUILD_TARGET)) $(SYSMODS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) $(SYSMODS.$(BUILD_TARGET_ARCH)) $(SYSMODS.$(BUILD_TARGET_CPU)) $(SYSMODS.$(BUILD_TYPE)) 42 _ALL_OTHERS := $(OTHERS) $(OTHERS.$(BUILD_TARGET)) $(OTHERS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) $(OTHERS.$(BUILD_TARGET_ARCH)) $(OTHERS.$(BUILD_TARGET_CPU)) $(OTHERS.$(BUILD_TYPE)) 43 _ALL_INSTALLS := $(INSTALLS) $(INSTALLS.$(BUILD_TARGET)) $(INSTALLS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) $(INSTALLS.$(BUILD_TARGET_ARCH)) $(INSTALLS.$(BUILD_TARGET_CPU)) $(INSTALLS.$(BUILD_TYPE)) 44 _ALL_FETCHES := $(FETCHES) $(FETCHES.$(BUILD_TARGET)) $(FETCHES.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) $(FETCHES.$(BUILD_TARGET_ARCH)) $(FETCHES.$(BUILD_TARGET_CPU)) $(FETCHES.$(BUILD_TYPE)) 45 _ALL_PATCHES := $(PATCHES) $(PATCHES.$(BUILD_TARGET)) $(PATCHES.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) $(PATCHES.$(BUILD_TARGET_ARCH)) $(PATCHES.$(BUILD_TARGET_CPU)) $(PATCHES.$(BUILD_TYPE)) 46 35 47 # all targets. 36 _ALL_TARGETS := \37 $( FETCHES) $(FETCHES.$(BUILD_TARGET)) $(FETCHES.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \38 $( PATCHES) $(PATCHES.$(BUILD_TARGET)) $(PATCHES.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \39 $( BLDPROGS) $(BLDPROGS.$(BUILD_PLATFORM)) $(BLDPROGS.$(BUILD_PLATFORM).$(BUILD_PLATFORM_ARCH)) \40 $( LIBRARIES) $(LIBRARIES.$(BUILD_TARGET)) $(LIBRARIES.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \41 $( IMPORT_LIBS) $(IMPORT_LIBS.$(BUILD_TARGET)) $(IMPORT_LIBS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \42 $( DLLS) $(DLLS.$(BUILD_TARGET)) $(DLLS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \43 $( PROGRAMS) $(PROGRAMS.$(BUILD_TARGET)) $(PROGRAMS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \44 $( SYSMODS) $(SYSMODS.$(BUILD_TARGET)) $(SYSMODS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \45 $( INSTALLS) $(INSTALLS.$(BUILD_TARGET)) $(INSTALLS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \46 $( OTHERS) $(OTHERS.$(BUILD_TARGET)) $(OTHERS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH))48 _ALL_TARGETS = \ 49 $(_ALL_FETCHES) \ 50 $(_ALL_PATCHES) \ 51 $(_ALL_BLDPROGS) \ 52 $(_ALL_LIBRARIES) \ 53 $(_ALL_IMPORT_LIBS) \ 54 $(_ALL_DLLS) \ 55 $(_ALL_PROGRAMS) \ 56 $(_ALL_SYSMODS) \ 57 $(_ALL_INSTALLS) \ 58 $(_ALL_OTHERS) 47 59 48 60 # all $(BUILD_TARGET) targets. 49 _ALL_BUILD_TARGET_TARGETS := \ 50 $(FETCHES) $(FETCHES.$(BUILD_TARGET)) $(FETCHES.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \ 51 $(PATCHES) $(PATCHES.$(BUILD_TARGET)) $(PATCHES.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \ 52 $(LIBRARIES) $(LIBRARIES.$(BUILD_TARGET)) $(LIBRARIES.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \ 53 $(IMPORT_LIBS) $(IMPORT_LIBS.$(BUILD_TARGET)) $(IMPORT_LIBS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \ 54 $(DLLS) $(DLLS.$(BUILD_TARGET)) $(DLLS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \ 55 $(PROGRAMS) $(PROGRAMS.$(BUILD_TARGET)) $(PROGRAMS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \ 56 $(SYSMODS) $(SYSMODS.$(BUILD_TARGET)) $(SYSMODS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \ 57 $(INSTALLS) $(INSTALLS.$(BUILD_TARGET)) $(INSTALLS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \ 58 $(OTHERS) $(OTHERS.$(BUILD_TARGET)) $(OTHERS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) 59 60 # all $(BUILD_TARGET) targets. 61 _ALL_BUILD_PLATFORM_TARGETS := \ 62 $(BLDPROGS) $(BLDPROGS.$(BUILD_PLATFORM)) $(BLDPROGS.$(BUILD_PLATFORM).$(BUILD_PLATFORM_ARCH)) 63 64 ## all linkable targets. 65 #_ALL_LINKABLE_TARGETS := \ 66 # $(BLDPROGS) $(BLDPROGS.$(BUILD_PLATFORM)) $(BLDPROGS.$(BUILD_PLATFORM).$(BUILD_PLATFORM_ARCH)) \ 67 # $(DLLS) $(DLLS.$(BUILD_TARGET)) $(DLLS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \ 68 # $(PROGRAMS) $(PROGRAMS.$(BUILD_TARGET)) $(PROGRAMS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \ 69 # $(SYSMODS) $(SYSMODS.$(BUILD_TARGET)) $(SYSMODS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) 70 # 71 ## all library targets. 72 #_ALL_LIBRARY_TARGETS := \ 73 # $(LIBRARIES) $(LIBRARIES.$(BUILD_TARGET)) $(LIBRARIES.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \ 74 # $(IMPORT_LIBS) $(IMPORT_LIBS.$(BUILD_TARGET)) $(IMPORT_LIBS.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \ 61 _ALL_BUILD_TARGET_TARGETS = \ 62 $(_ALL_FETCHES) \ 63 $(_ALL_PATCHES) \ 64 $(_ALL_LIBRARIES) \ 65 $(_ALL_IMPORT_LIBS) \ 66 $(_ALL_DLLS) \ 67 $(_ALL_PROGRAMS) \ 68 $(_ALL_SYSMODS) \ 69 $(_ALL_INSTALLS) \ 70 $(_ALL_OTHERS) 71 72 # all $(BUILD_PLATFORM) targets. 73 _ALL_BUILD_PLATFORM_TARGETS = \ 74 $(_ALL_BLDPROGS) 75 75 76 76 # all targets making use of srcname. 77 _ALL_SRCNAME_TARGETS := \78 $( FETCHES) $(FETCHES.$(BUILD_TARGET)) $(FETCHES.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \79 $( PATCHES) $(PATCHES.$(BUILD_TARGET)) $(PATCHES.$(BUILD_TARGET).$(BUILD_TARGET_ARCH))77 _ALL_SRCNAME_TARGETS = \ 78 $(_ALL_FETCHES) \ 79 $(_ALL_PATCHES) 80 80 81 81 # dependency files. … … 151 151 152 152 153 154 # 155 # Check syntax which leads to weird syntax errors. 156 # 157 158 ## Check 159 # @param $(target) Target name. 160 define def_check_target 161 ifneq ("$($(target)_TEMPLATE)","$(strip $($(target)_TEMPLATE))") 162 $$(error $(target) have an incorrect template name. Remove any tabs!) 163 endif 164 endef 165 $(foreach target, $(_ALL_TARGETS),$(eval $(def_check_target))) 166 167 168 # 169 # Target inheritance. 170 # 171 # $ (foreach ... 172 173 174 # 175 # Include templates 153 ## Inherit one template property in a non-accumulative manner. 154 # @param $(prop) Property name 155 # @param $(src) Source (parent) object. 156 # @param $(trg) Target (child) object. 157 # @remark Not all properties has all the variations, but making the correct 158 # exceptions will only complicate matters and probably not gain much speed. 159 define def_inherit_one 160 ifdef $(src)_$(prop) 161 ifndef $(trg)_$(prop) 162 $(trg)_$(prop) = $($(src)_$(prop)) 163 #$ (warning dbg-inherit: $(trg)_$(prop) = $($(src)_$(prop)) ) 164 endif 165 endif 166 endef # def_inherit_one 167 168 ## Inherit one template property in a non-accumulative manner. 169 # @param $(prop) Property name 170 # @param $(src) Source (parent) object. 171 # @param $(trg) Target (child) object. 172 # @remark Not all properties has all the variations, but making the correct 173 # exceptions will only complicate matters and probably not gain much speed. 174 # @todo Check how/if this differs from def_inherit_one. 175 define def_inherit_one_now 176 ifdef $(src)_$(prop) 177 ifndef $(trg)_$(prop) 178 $(trg)_$(prop) := $($(src)_$(prop)) 179 #$ (warning dbg-inherit-now: $(trg)_$(prop) = $($(src)_$(prop)) ) 180 endif 181 endif 182 endef # def_inherit_one_now 183 184 ## Inherit one template property in a non-accumulative manner, deferred expansion. 185 # @param $(prop) Property name 186 # @param $(src) Source 187 # @param $(trg) Target 188 # @remark This define relies on double evaluation 189 define def_inherit_one_deferred 190 ifdef $(src)_$(prop) 191 ifndef $(trg)_$(prop) 192 $(trg)_$(prop) = $$($(src)_$(prop)) 193 #$ (warning dbg-inherit-def: $(trg)_$(prop) = $($(src)_$(prop)) ) 194 endif 195 endif 196 endef # def_inherit_one_deferred 197 198 ## Generic inheritance for use with targets templates and tools. 199 # @param trg Object to consider for inheriting. 200 # @param src_prefix What to prefix the value found in EXTENDS with to get the object. 201 # @param properties List of the properties with straight expansion. 202 # @param properties_now List of the properties with immediate expansion. 203 # @param properties_deferred List of the properties with deferred expansion (e.g. function). 204 define def_inherit 205 src := $(strip $($(trg)_EXTENDS)) 206 ifneq ($(src),) 207 ifndef $(trg)_EXTENDS_STATUS_ 208 $(trg)_EXTENDS_STATUS_ := 0 209 src := $(src_prefix)$(src) 210 211 # Recursivly process the parent (src) if it's inherting from somebody too. 212 ifdef $(src)_EXTENDS 213 ifneq ($($(src)_EXTENDS_STATUS_),42) 214 # 'foreach' will create 'trg' in a new variable context hiding 215 # out current variable. 'src' OTOH will be overwritten. 216 #$ (warning def_inherit: recursing into $(src) from $(trg)) 217 $(foreach trg, $(src), $(eval $(value def_inherit))) 218 src := $(src_prefix)$(strip $($(trg)_EXTENDS)) 219 endif 220 endif 221 222 # Inherit the properties and mark the trg done. 223 #$ (warning def_inherit: trg=$(trg) src=$(src)) 224 $(foreach prop, $(properties), $(eval $(def_inherit_one))) 225 $(foreach prop, $(properties_now), $(eval $(def_inherit_one_now))) 226 $(foreach prop, $(properties_deferred), $(eval $(def_inherit_one_deferred))) 227 $(trg)_EXTENDS_STATUS_ := 42 228 else 229 # Check for inheritance loops. 230 ifneq ($(target)_EXTENDS_STATUS_),42) 231 $(error kBuild: Target inheritance loop! target=$(target)) 232 endif 233 endif 234 endif 235 endef # def_inherit 236 237 238 # 239 # Determin all the templates that is being used and make 240 # sure they are present. 176 241 # 177 242 _TEMPLATES := $(TEMPLATE) 178 243 define def_templates 179 244 ifdef $(target)_TEMPLATE 180 _TEMPLATES += $($(target)_TEMPLATE) 181 endif 182 endef 245 ifneq ("$($(target)_TEMPLATE)","$(strip $($(target)_TEMPLATE))") 246 $$(error kBuild: The template name of target '$(target)' contains tabs ($($(target)_TEMPLATE))). Please remove them) 247 endif 248 _TEMPLATES += $($(target)_TEMPLATE) 249 endif 250 endef # def_templates 183 251 $(foreach target, $(_ALL_TARGETS), $(eval $(def_templates))) 184 252 _TEMPLATES := $(sort $(_TEMPLATES)) 185 # $ (warning dbg: _TEMPLATES=$(_TEMPLATES))186 253 187 254 define def_templates_include 188 255 ifndef TEMPLATE_$(template) 189 include $(firstword $(foreach path, $(TEMPLATE_PATHS) $(PATH_KBUILD)/templates/, $(wildcard $(path)/$(template).kmk))) 190 endif 191 endef 256 TEMPLATE_$(template)_INCLUDE_FILE_ := $(firstword $(foreach path, $(TEMPLATE_PATHS) $(PATH_KBUILD)/templates/, $(wildcard $(path)/$(template).kmk))) 257 ifneq ($(TEMPLATE_$(template)_INCLUDE_FILE_),) 258 include $(TEMPLATE_$(template)_INCLUDE_FILE_) 259 else 260 $$(error kBuild: Cannot find template '$(template)') 261 endif 262 endif 263 endef # def_templates_include 192 264 $(foreach template, $(_TEMPLATES), $(eval $(def_templates))) 193 265 266 #$ (warning dbg _TEMPLATES := $(_TEMPLATES)) 267 268 269 # 270 # Determin the BLD_TRG_* keywords required for correct inherting. 271 # 272 # This means walking all the template and target lists in order to 273 # pick up all BLD_TRG_* attributes. 274 # 275 _BLD_TYPES := $(BUILD_TYPE) 276 _BLD_TARGETS := $(BUILD_TARGET) $(BUILD_PLATFORMS) 277 _BLD_ARCHES := $(BUILD_TARGET_ARCH) $(BUILD_PLATFORM_ARCH) 278 _BLD_CPUS := $(BUILD_TARGET_CPU) $(BUILD_PLATFORM_CPU) 279 280 define def_collect_bld_xyz 281 ifdef ($(src)_BLD_TYPE) 282 _BLD_TYPE += $($(src)_BLD_TYPE) 283 endif 284 ifdef ($(src)_BLD_TRG) 285 _BLD_TARGETS += $($(src)_BLD_TRG) 286 endif 287 ifdef ($(src)_BLD_TRG_ARCH) 288 _BLD_ARCHES += $($(src)_BLD_TRG_ARCH) 289 endif 290 ifdef ($(src)_BLD_TRG_CPU) 291 _BLD_CPU += $($(src)_BLD_TRG_CPU) 292 endif 293 endef # def_collect_bld_xyz 294 $(foreach src, $(addprefix TEMPLATE_, $(_TEMPLATES)) $(_ALL_TARGETS)\ 295 ,$(eval $(def_collect_bld_xyz))) 296 297 # drop duplicate values 298 _BLD_TYPES := $(sort $(_BLD_TYPES)) 299 _BLD_TARGETS := $(sort $(_BLD_TARGETS)) 300 _BLD_ARCHES := $(sort $(_BLD_ARCHES)) 301 _BLD_CPUS := $(sort $(_BLD_CPUS)) 302 303 # Construct all the possible keywords. 304 _KEYWORDS := $(_BLD_TYPES) $(_BLD_TARGETS) $(_BLD_ARCHES) $(_BLD_CPUS) \ 305 $(foreach bld_trg,$(_BLD_TARGETS),$(addprefix $(bld_trg).,$(_BLD_ARCHES))) 306 # $ (warning dbg _KEYWORDS := $(_KEYWORDS)) 307 308 309 # 310 # Target inheritance. 311 # 312 # This has to be done on a per target list basis as to avoid adding 313 # incorrect properties that will wast memory, time, and may confuse 314 # later strictness checks. This also has to be done *before* templates 315 # are applied to the targets. Since we're doing that part rather 316 # early on, the target inheritance feature is a bit restricted at 317 # the moment. However, this will be addressed in a little(?) while. 318 # 319 320 src_prefix := 321 ## combines the specified properties $(1) with the $(_KEYWORDS). 322 _COMB_KEY_PROP = $(1) $(foreach keyword,$(_KEYWORDS), $(addsuffix .$(keyword), $(1))) 323 324 # Fetches. 325 properties := $(call _COMB_KEY_PROP,$(PROPS_FETCHES_SINGLE)) 326 properties_now := $(call _COMB_KEY_PROP,$(PROPS_FETCHES_ACCUMULATE_R) $(PROPS_FETCHES_ACCUMULATE_L)) 327 properties_deferred := $(call _COMB_KEY_PROP,$(PROPS_FETCHES_DEFERRED)) 328 $(foreach trg, $(_ALL_FETCHES),$(eval $(value def_inherit))) 329 330 ## Patches. - not implemented yet. 331 #properties := $(call _COMB_KEY_PROP,$(PROPS_PATCHES_SINGLE)) 332 #properties_now := $(call _COMB_KEY_PROP,$(PROPS_PATCHES_ACCUMULATE_R) $(PROPS_PATCHES_ACCUMULATE_L)) 333 #properties_deferred := $(call _COMB_KEY_PROP,$(PROPS_PATCHES_DEFERRED)) 334 #$(foreach trg, $(_ALL_PATCHES),$(eval $(value def_inherit))) 335 336 # Programs and build programs. 337 properties := $(call _COMB_KEY_PROP,$(PROPS_PROGRAMS_SINGLE)) 338 properties_now := $(call _COMB_KEY_PROP,$(PROPS_PROGRAMS_ACCUMULATE_R) $(PROPS_PROGRAMS_ACCUMULATE_L)) 339 properties_deferred := $(call _COMB_KEY_PROP,$(PROPS_PROGRAMS_DEFERRED)) 340 $(foreach trg, $(_ALL_BLDPROGS) $(_ALL_PROGRAMS),$(eval $(value def_inherit))) 341 342 # Libraries and import libraries. 343 properties := $(call _COMB_KEY_PROP,$(PROPS_LIBRARIES_SINGLE)) 344 properties_now := $(call _COMB_KEY_PROP,$(PROPS_LIBRARIES_ACCUMULATE_R) $(PROPS_LIBRARIES_ACCUMULATE_L)) 345 properties_deferred := $(call _COMB_KEY_PROP,$(PROPS_LIBRARIES_DEFERRED)) 346 $(foreach trg, $(_ALL_LIBRARIES) $(_ALL_IMPORT_LIBS),$(eval $(value def_inherit))) 347 348 # DLLs. 349 properties := $(call _COMB_KEY_PROP,$(PROPS_DLLS_SINGLE)) 350 properties_now := $(call _COMB_KEY_PROP,$(PROPS_DLLS_ACCUMULATE_R) $(PROPS_DLLS_ACCUMULATE_L)) 351 properties_deferred := $(call _COMB_KEY_PROP,$(PROPS_DLLS_DEFERRED)) 352 $(foreach trg, $(_ALL_DLLS),$(eval $(value def_inherit))) 353 354 # Installs. 355 properties := $(call _COMB_KEY_PROP,$(PROPS_INSTALLS_SINGLE)) 356 properties_now := $(call _COMB_KEY_PROP,$(PROPS_INSTALLS_ACCUMULATE_R) $(PROPS_INSTALLS_ACCUMULATE_L)) 357 properties_deferred := $(call _COMB_KEY_PROP,$(PROPS_INSTALLS_DEFERRED)) 358 $(foreach trg, $(_ALL_INSTALLS),$(eval $(value def_inherit))) 359 194 360 195 361 # 196 362 # Template Inheritance. 197 363 # 198 define def_template_extends_prop 199 ifndef TEMPLATE_$(template)_$(prop) 200 ifdef TEMPLATE_$(parent)_$(prop) 201 TEMPLATE_$(template)_$(prop) = $$(TEMPLATE_$(parent)_$(prop)) 202 endif 203 endif 204 endef 205 206 207 define def_template_extends 208 ifdef TEMPLATE_$(template)_EXTENDS 209 ifndef TEMPLATE_$(template)_EXTENDS_STATUS_ 210 TEMPLATE_$(template)_EXTENDS_STATUS_ := 0 211 parent := $(strip $(TEMPLATE_$(template)_EXTENDS)) 212 213 # recursivly process the parent if it's inherting from somebody too. 214 ifdef TEMPLATE_$(parent)_EXTENDS 215 ifneq ($(TEMPLATE_$(parent)_EXTENDS_STATUS_),42) 216 # foreach will create 'template' in a new variable context hiding our current variable. 217 $(foreach template, $(parent), $(eval $(value def_template_extends))) 218 parent := $(strip $(TEMPLATE_$(template)_EXTENDS)) 219 endif 220 endif 221 222 # inherit properties. 223 $(foreach prop, $(PROPS_SINGLE) $(PROPS_ACCUMULATE_R) $(PROPS_ACCUMULATE_L) $(PROPS_DEFERRED)\ 224 $(addsuffix .$(BUILD_TARGET), $(PROPS_SINGLE) $(PROPS_ACCUMULATE_L) $(PROPS_ACCUMULATE_R) $(PROPS_DEFERRED))\ 225 $(addsuffix .$(BUILD_TARGET).$(BUILD_TARGET_ARCH), $(PROPS_SINGLE) $(PROPS_ACCUMULATE_L) $(PROPS_ACCUMULATE_R) $(PROPS_DEFERRED))\ 226 $(addsuffix .$(BUILD_TARGET_ARCH), $(PROPS_SINGLE) $(PROPS_ACCUMULATE_L) $(PROPS_ACCUMULATE_R) $(PROPS_DEFERRED))\ 227 $(addsuffix .$(BUILD_TARGET_CPU), $(PROPS_SINGLE) $(PROPS_ACCUMULATE_L) $(PROPS_ACCUMULATE_R) $(PROPS_DEFERRED))\ 228 $(addsuffix .$(BUILD_TYPE), $(PROPS_SINGLE) $(PROPS_ACCUMULATE_L) $(PROPS_ACCUMULATE_R) $(PROPS_DEFERRED))\ 229 ,$(eval $(def_template_extends_prop))) # exploits the 2 evaluation, so no value! 230 231 TEMPLATE_$(template)_EXTENDS_STATUS_ := 42 232 else 233 # protect against inheritance loops. 234 ifneq ($(TEMPLATE_$(template)_EXTENDS_STATUS_),42) 235 $(error kBuild: inheritance loop! template=$(template)) 236 endif 237 endif 238 endif 239 endef 240 241 # $ (foreach template, $(_TEMPLATES), $(if TEMPLATE_$(template)_EXTENDS, $(eval $(value def_template_extends)))) 242 $(foreach template, $(_TEMPLATES), $(eval $(value def_template_extends))) 364 # This is much the same as with target inheritance, except we cannot 365 # restrict the properties involved since we've got a clue which target 366 # types are using them. But, we can drop the instance expansion we're 367 # doing for targets since there won't be any more changes to either the 368 # source nor the target templates beyond this exercise. 369 # 370 371 src_prefix := TEMPLATE_ 372 properties := 373 properties_now := 374 properties_deferred := $(call _COMB_KEY_PROP,$(PROPS_ALL)) 375 $(foreach trg, $(addprefix TEMPLATE_,$(_TEMPLATES)),$(eval $(value def_inherit))) 376 377 # done. 378 src_prefix := 379 properties := 380 properties_now := 381 properties_deferred := 243 382 244 383 … … 423 562 # 424 563 # Include tools & sdks 564 # 565 # The first part of this exercise is to figure out which TOOLS and SDKS 566 # that should be included. 425 567 # 426 568 _TOOLS := $(TOOL.$(BUILD_TARGET)) $(TOOL.$(BUILD_TARGET_ARCH)) $(TOOL.$(BUILD_TARGET).$(BUILD_TARGET_ARCH)) \ … … 452 594 $($(source)_SDKS) \ 453 595 $($(target)_$(source)_SDKS)) 454 endef 596 endef # def_tools_sdks_target_source 455 597 456 598 define def_tools_sdks_target 599 _bld_type := $(firstword $($(target)_BLD_TYPE) $(BUILD_TYPE)) 457 600 _bld_trg := $(firstword $($(target)_BLD_TRG) $(bld_trg)) 458 601 _bld_trg_arch := $(firstword $($(target)_BLD_TRG_ARCH) $(bld_trg_arch)) … … 474 617 $($(target)_SOURCES.$(_bld_trg).$(_bld_trg_arch)) \ 475 618 $($(target)_SOURCES.$(_bld_trg_cpu)) \ 476 $($(target)_SOURCES.$( BUILD_TYPE)) \619 $($(target)_SOURCES.$(_bld_type)) \ 477 620 $($(target)_SOURCES) \ 478 621 , $(eval $(value def_tools_sdks_target_source))) 479 endef 622 endef # def_tools_sdks_target 480 623 481 624 define def_tools_srcname_target 625 _bld_type := $(firstword $($(target)_BLD_TYPE) $(BUILD_TYPE)) 482 626 _bld_trg := $(firstword $($(target)_BLD_TRG) $(bld_trg)) 483 627 _bld_trg_arch := $(firstword $($(target)_BLD_TRG_ARCH) $(bld_trg_arch)) … … 489 633 $($(target)_SOURCES.$(_bld_trg).$(_bld_trg_arch)) \ 490 634 $($(target)_SOURCES.$(_bld_trg_cpu)) \ 491 $($(target)_SOURCES.$( BUILD_TYPE)) \635 $($(target)_SOURCES.$(_bld_type)) \ 492 636 $($(target)_SOURCES) \ 493 637 ), $(eval $(value def_tools_sdks_target_source))) 494 endef 638 endef # def_tools_srcname_target 495 639 496 640 bld_trg := $(BUILD_TARGET) … … 509 653 define def_tools_include 510 654 ifndef TOOL_$(tool) 511 TOOL_$(tool)_KMK_FILE := $(firstword $(foreach path, $(TOOL_PATHS) $(PATH_KBUILD)/tools, $(wildcard $(path)/$(tool).kmk)))512 ifeq ($(TOOL_$(tool)_KMK_FILE),)513 $(error kBuild: Cannot find include file for the tool '$(tool)'! Searched: $(TOOL_PATHS) $(PATH_KBUILD)/tools)514 endif515 include $(TOOL_$(tool)_KMK_FILE)516 ifndef TOOL_$(tool)517 $(warning kBuild: TOOL_$(tool) was not by $(TOOL_$(tool)_KMK_FILE)!)518 endif519 endif 520 endef 655 TOOL_$(tool)_KMK_FILE := $(firstword $(foreach path, $(TOOL_PATHS) $(PATH_KBUILD)/tools, $(wildcard $(path)/$(tool).kmk))) 656 ifeq ($(TOOL_$(tool)_KMK_FILE),) 657 $(error kBuild: Cannot find include file for the tool '$(tool)'! Searched: $(TOOL_PATHS) $(PATH_KBUILD)/tools) 658 endif 659 include $(TOOL_$(tool)_KMK_FILE) 660 ifndef TOOL_$(tool) 661 $(warning kBuild: TOOL_$(tool) was not by $(TOOL_$(tool)_KMK_FILE)!) 662 endif 663 endif 664 endef # def_tools_include 521 665 522 666 _TOOLS := $(sort $(_TOOLS)) … … 527 671 define def_sdks_include_one 528 672 ifndef SDK_$(sdk) 529 SDK_$(sdk)_KMK_FILE := $(firstword $(foreach path, $(SDK_PATHS) $(PATH_KBUILD)/sdks, $(wildcard $(path)/$(sdk).kmk)))530 ifeq ($(SDK_$(sdk)_KMK_FILE),)531 $(error kBuild: Cannot find include file for the SDK '$(sdk)'! Searched: $(SDK_PATHS) $(PATH_KBUILD)/sdks)532 endif533 include $(SDK_$(sdk)_KMK_FILE)534 ifndef SDK_$(sdk)535 $(warning kBuild: SDK_$(sdk) was not defined by $(SDK_$(sdk)_KMK_FILE)!)536 endif537 endif 538 endef 673 SDK_$(sdk)_KMK_FILE := $(firstword $(foreach path, $(SDK_PATHS) $(PATH_KBUILD)/sdks, $(wildcard $(path)/$(sdk).kmk))) 674 ifeq ($(SDK_$(sdk)_KMK_FILE),) 675 $(error kBuild: Cannot find include file for the SDK '$(sdk)'! Searched: $(SDK_PATHS) $(PATH_KBUILD)/sdks) 676 endif 677 include $(SDK_$(sdk)_KMK_FILE) 678 ifndef SDK_$(sdk) 679 $(warning kBuild: SDK_$(sdk) was not defined by $(SDK_$(sdk)_KMK_FILE)!) 680 endif 681 endif 682 endef # def_sdks_include_one 539 683 540 684 _SDKS := $(sort $(_SDKS)) 541 685 $(foreach sdk, $(_SDKS), $(eval $(value def_sdks_include_one))) 542 686 687 ## @todo Execute SDKS and TOOL inhertiance. 543 688 544 689 … … 715 860 # 716 861 define def_pass1_install 717 bld_type := $(firstword $($(target)_BLD_TYPE) $(BUILD_TYPE))718 bld_trg := $(firstword $($(target)_BLD_TRG) $(BUILD_TARGET))862 bld_type := $(firstword $($(target)_BLD_TYPE) $(BUILD_TYPE)) 863 bld_trg := $(firstword $($(target)_BLD_TRG) $(BUILD_TARGET)) 719 864 bld_trg_arch:= $(firstword $($(target)_BLD_TRG_ARCH) $(BUILD_TARGET_ARCH)) 720 865 bld_trg_cpu := $(firstword $($(target)_BLD_TRG_CPU) $(BUILD_TARGET_CPU)) -
trunk/kBuild/header.kmk
r984 r985 124 124 125 125 # 126 # The OSes and Architectures that kBuild recognizes.126 # The OSes, Architectures and CPUs that kBuild recognizes. 127 127 # 128 128 # When kBuild is ported to a new OS or architecture a unique keyword needs … … 131 131 # build types. (PORTME) 132 132 # 133 KBUILD_OSES = darwin freebsd l4 linux netbsd nt openbsd os2 solaris win134 KBUILD_ARCHES = x86 amd64 sparc32 sparc64 mips32 mips64 ppc32 ppc64133 KBUILD_OSES := darwin freebsd l4 linux netbsd nt openbsd os2 solaris win 134 KBUILD_ARCHES := x86 amd64 sparc32 sparc64 mips32 mips64 ppc32 ppc64 135 135 136 136 … … 531 531 532 532 533 #534 #535 #536 537 533 ## PROPS_TOOLS 538 # This is a subset of the other PROPS534 # This is a subset of PROPS_SINGLE. 539 535 PROPS_TOOLS := TOOL CTOOL CXXTOOL ASTOOL RCTOOL ARTOOL LDTOOL FETCHTOOL UNPACKTOOL PATCHTOOL 540 536 … … 545 541 PROPS_SINGLE := $(PROPS_TOOLS) INST NOINST BLD_TYPE BLD_TRG BLD_TRG_ARCH BLD_TRG_CPU FETCHDIR \ 546 542 OBJSUFF COBJSUFF CXXOBJSUFF ASOBJSUFF RCOBJSUFF SYSSUFF EXESUFF DLLSUFF LIBSUFF ARLIBSUFF 543 ## PROPS_SINGLE_LNK 544 # Subset of PROPS_SINGLE which applies to all linkable targets. 545 PROPS_SINGLE_LNK := TOOL CTOOL CXXTOOL ASTOOL RCTOOL \ 546 INST NOINST BLD_TYPE BLD_TRG BLD_TRG_ARCH BLD_TRG_CPU \ 547 OBJSUFF COBJSUFF CXXOBJSUFF ASOBJSUFF RCOBJSUFF 547 548 548 549 ## PROPS_DEFERRED 549 550 # This list of non-accumulative target properties which are or may be 550 551 # functions, and thus should not be expanded until the very last moment. 551 PROPS_DEFERRED := INSTFUN INSTALLER PRE_CMDS POST_CMDS NAME 552 PROPS_DEFERRED := INSTFUN INSTALLER PRE_CMDS POST_CMDS NAME SONAME 552 553 553 554 ## PROPS_ACCUMULATE_R … … 557 558 # will do the necessary inheritance from templates to targets. 558 559 PROPS_ACCUMULATE_R := \ 559 DEFS DEPS ORDERDEPS \ 560 DEPS ORDERDEPS DEFS \ 561 ARFLAGS \ 560 562 CFLAGS CDEFS \ 561 563 CXXFLAGS CXXDEFS \ … … 565 567 IDFLAGS IFDLAGS ISFLAGS \ 566 568 FETCHFLAGS UNPACKFLAGS PATCHFLAGS 569 ## PROPS_ACCUMULATE_R_LNK 570 # Subset of PROPS_ACCUMULATE_R which applies to all linkable targets. 571 PROPS_ACCUMULATE_R_LNK := \ 572 DEPS ORDERDEPS DEFS \ 573 CFLAGS CDEFS \ 574 CXXFLAGS CXXDEFS \ 575 ASFLAGS ASDEFS \ 576 RCFLAGS RCDEFS \ 577 IDFLAGS IFDLAGS ISFLAGS 567 578 568 579 ## PROPS_ACCUMULATE … … 575 586 INCS CINCS CXXINCX ASINCS RCINCS \ 576 587 LIBS LIBPATH \ 577 DIRS BLDDIRS \ 578 CLEAN 588 DIRS BLDDIRS CLEAN 589 ## PROPS_ACCUMULATE_L_LNK 590 # Subset of PROPS_ACCUMULATE_L which applies to all linkable targets. 591 PROPS_ACCUMULATE_L_LNK := \ 592 SDKS SOURCES \ 593 INCS CINCS CXXINCX ASINCS RCINCS \ 594 BLDDIRS CLEAN 579 595 580 596 ## PROPS_ALL 581 597 # List of all the properties. 582 598 PROPS_ALL = $(PROPS_SINGLE) $(PROPS_DEFERRED) $(PROPS_ACCUMULATE_L) $(PROPS_ACCUMULATE_R) 599 600 601 ## @name Properties valid on programs (BLDPROGS and PROGRAMS) 602 ## @{ 603 PROPS_PROGRAMS_SINGLE := $(PROPS_SINGLE_LNK) LDTOOL EXESUFF 604 PROPS_PROGRAMS_DEFERRED := $(PROPS_DEFERRED) 605 PROPS_PROGRAMS_ACCUMULATE_R := $(PROPS_ACCUMULATE_R_LNK) LDFLAGS 606 PROPS_PROGRAMS_ACCUMULATE_L := $(PROPS_ACCUMULATE_L_LNK) LIBS LIBPATH 607 ## @} 608 609 ## @name Properties valid on libraries (LIBRARIES and IMPORT_LIBS) 610 ## @{ 611 PROPS_LIBRARIES_SINGLE := $(PROPS_SINGLE_LNK) ARTOOL LIBSUFF ARLIBSUFF 612 PROPS_LIBRARIES_DEFERRED := $(filter-out SONAME,$(PROPS_DEFERRED)) 613 PROPS_LIBRARIES_ACCUMULATE_R := $(PROPS_ACCUMULATE_R_LNK) ARFLAGS 614 PROPS_LIBRARIES_ACCUMULATE_L := $(PROPS_ACCUMULATE_L_LNK) 615 ## @} 616 617 ## @name Properties valid on dlls (DLLS) 618 ## @{ 619 PROPS_DLLS_SINGLE := $(PROPS_SINGLE_LNK) LDTOOL DLLSUFF LIBSUFF 620 PROPS_DLLS_DEFERRED := $(PROPS_DEFERRED) 621 PROPS_DLLS_ACCUMULATE_R := $(PROPS_ACCUMULATE_R_LNK) LDFLAGS 622 PROPS_DLLS_ACCUMULATE_L := $(PROPS_ACCUMULATE_L_LNK) LIBS LIBPATH 623 ## @} 624 625 ## @name Properties valid on installs (INSTALLS) 626 ## @{ 627 PROPS_INSTALLS_SINGLE := TOOL INST NOINST 628 PROPS_INSTALLS_DEFERRED := INSTFUN INSTALLER 629 PROPS_INSTALLS_ACCUMULATE_R := DEPS ORDERDEPS 630 PROPS_INSTALLS_ACCUMULATE_L := SOURCES DIRS CLEAN 631 ## @} 632 633 ## @name Properties valid on fetches (INSTALLS) 634 ## @{ 635 PROPS_FETCHES_SINGLE := TOOL FETCHTOOL UNPACKTOOL PATCHTOOL INST FETCHDIR 636 PROPS_FETCHES_DEFERRED := 637 PROPS_FETCHES_ACCUMULATE_R := FETCHFLAGS UNPACKFLAGS PATCHFLAGS 638 PROPS_FETCHES_ACCUMULATE_L := SOURCES 639 ## @} 583 640 584 641
Note:
See TracChangeset
for help on using the changeset viewer.