VirtualBox

Changeset 1410 in kBuild


Ignore:
Timestamp:
Mar 18, 2008 4:00:56 PM (17 years ago)
Author:
bird
Message:

Fixed _KEYWORDS collecting, didn't work right previously. Started on keyword inheritance.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kBuild/footer.kmk

    r1407 r1410  
    452452
    453453#
    454 # Determin the BLD_TRG_* keywords required for correct inherting.
     454# Determin the BLD_TRG_* and BLD_TYPE keywords required for correct
     455# inherting, and then check for inheritance.
    455456#
    456457# This means walking all the template and target lists in order to
     
    463464
    464465define def_collect_bld_xyz
    465 ifdef ($(src)_BLD_TYPE)
     466ifdef $(src)_BLD_TYPE
     467 ifn1of ($($(src)_BLD_TYPE), $(KBUILD_BLD_TYPES))
     468  $(error kBuild: $(src)_BLD_TYPE=$($(src)_BLD_TYPE) not in KBUILD_BLD_TYPES={$(KBUILD_BLD_TYPES)}!)
     469 endif
    466470 _BLD_TYPES += $($(src)_BLD_TYPE)
    467471endif
    468 ifdef ($(src)_BLD_TRG)
     472ifdef $(src)_BLD_TRG
     473 ifn1of ($($(src)_BLD_TRG), $(KBUILD_OSES))
     474  $(error kBuild: $(src)_BLD_TRG=$($(src)_BLD_TRG) not in KBUILD_OSES={$(KBUILD_OSES)}!)
     475 endif
    469476 _BLD_TARGETS += $($(src)_BLD_TRG)
    470477endif
    471 ifdef ($(src)_BLD_TRG_ARCH)
     478ifdef $(src)_BLD_TRG_ARCH
     479 ifn1of ($($(src)_BLD_TRG_ARCH), $(KBUILD_ARCHES))
     480  $(error kBuild: $(src)_BLD_TRG_ARCH=$($(src)_BLD_TRG_ARCH) not in KBUILD_ARCHES={$(KBUILD_ARCHES)}!)
     481 endif
    472482 _BLD_ARCHES += $($(src)_BLD_TRG_ARCH)
    473483endif
    474 ifdef ($(src)_BLD_TRG_CPU)
     484ifdef $(src)_BLD_TRG_CPU
     485 if1of ($($(src)_BLD_CPU), $(KBUILD_ARCHES) $(KBUILD_OSES) $(KBUILD_BLD_TYPES))
     486  $(error kBuild: $(src)_BLD_TRG_CPU=$($(src)_BLD_TRG_CPU) found in KBUILD_ARCHES, KBUILD_OSES or KBUILD_BLD_TYPES!)
     487 endif
    475488 _BLD_CPUS += $($(src)_BLD_TRG_CPU)
    476489endif
    477490endef # def_collect_bld_xyz
    478 $(foreach src, $(addprefix TEMPLATE_, $(_TEMPLATES)) $(_ALL_TARGETS)\
    479         ,$(eval $(def_collect_bld_xyz)))
    480 
    481 # drop duplicate values
     491$(foreach src, $(addprefix TEMPLATE_, $(_TEMPLATES)) $(_ALL_TARGETS) \
     492        ,$(eval $(value def_collect_bld_xyz)))
     493
     494# Drop duplicate values.
    482495_BLD_TYPES   := $(sort $(_BLD_TYPES))
    483496_BLD_TARGETS := $(sort $(_BLD_TARGETS))
     
    488501_KEYWORDS := $(_BLD_TYPES) $(_BLD_TARGETS) $(_BLD_ARCHES) $(_BLD_CPUS) \
    489502        $(foreach bld_trg,$(_BLD_TARGETS),$(addprefix $(bld_trg).,$(_BLD_ARCHES)))
    490 # $ (warning dbg _KEYWORDS := $(_KEYWORDS))
     503
     504# Look for keywords which extends others and order them.
     505_KEYWORDS_ORDERED :=
     506define def_keyword_ordering
     507src := $(strip $($(prefix)_$(keyword)_EXTENDS))
     508ifneq ($(src),)
     509 ifndef $(prefix)_$(keyword)_EXTENDS_STATUS_
     510  $(prefix)_$(keyword)_EXTENDS_STATUS_ := 0
     511
     512  # Validate src.
     513  ifn1of ($(src), $(valid))
     514   $(error kBuild: $(keyword) tries to extend unknown keyword '$(src)'! (known = $(valid)))
     515  endif
     516
     517  # Recursivly process the parent (src) if it's inherting from somebody too.
     518  # If it isn't, then we'll have to add it to the ordered keyword list here.
     519  ifneq ($($(prefix)_$(src)_EXTENDS_STATUS_),42)
     520   ifneq ($($(prefix)_$(src)_EXTENDS_STATUS_),)
     521    $(error kBuild: Keyword inheritance loop! keyword=$(src) $(prefix)_$(src)_EXTENDS_STATUS_=$($(prefix)_$(src)_EXTENDS_STATUS_))
     522   endif
     523   ifdef $(prefix)_$(src)_EXTENDS
     524    # 'foreach' will create 'keyword' in a new variable context hiding
     525        # out current variable. 'src' OTOH will be overwritten.
     526    $(foreach keyword, $(src), $(eval $(value def_keyword_ordering)))
     527    src := $(strip $($(keyword)_EXTENDS))
     528   else
     529    # Add it to the list and mark it as done.
     530    _KEYWORDS_ORDERED += $(src)
     531    $(prefix)_$(src)_EXTENDS_STATUS_ := 42
     532   endif
     533  endif
     534
     535  # Check EXTENDS_BY.
     536  by = $(strip $($(trg)_EXTENDS_BY))
     537  ifeq ($(by),)
     538   by = overriding
     539  else ifn1of ($(by), overriding appending prepending)
     540   $(error kBuild: Invalid EXTENDS_BY value '$(by)' on '$(keyword)'!)
     541  endif
     542
     543  # Add it to the list and mark it as done.
     544  _KEYWORDS_ORDERED += $(keyword)
     545  $(prefix)_$(keyword)_EXTENDS_STATUS_ := 42
     546 else
     547  # Check for inheritance loops.
     548  ifneq ($($(trg)_EXTENDS_STATUS_),42)
     549   $(error kBuild: Keyword inheritance loop! keyword=$(keyword) $(prefix)_$(keyword)_EXTENDS_STATUS_=$($(prefix)_$(keyword)_EXTENDS_STATUS_))
     550  endif
     551 endif
     552endif
     553
     554endef
     555
     556prefix := BLD_TYPE
     557valid := $(KBUILD_BLD_TYPES)
     558$(foreach keyword, $(_BLD_TYPES) , $(eval $(value def_keyword_ordering)))
     559
     560prefix := BLD_ARCH
     561valid := $(KBUILD_ARCHES)
     562$(foreach keyword, $(_BLD_ARCHES), $(eval $(value def_keyword_ordering)))
     563
     564prefix := BLD_CPU
     565valid := $(KBUILD_CPUS)
     566$(foreach keyword, $(_BLD_CPUS)  , $(eval $(value def_keyword_ordering)))
     567
     568# Update _KEYWORDS to the ordered list making sure parent keywords are included too.
     569_KEYWORDS := $(_KEYWORDS_ORDERED) $(filter-out $(_KEYWORDS_ORDERED), $(_KEYWORDS))
    491570
    492571ifdef KBUILD_PROFILE_SELF
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette