openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

Makefile (13378B)


      1 # -*- Makefile -*-
      2 # 
      3 # This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      4 # 
      5 # Copyright 2007-2019 Broadcom Inc. All rights reserved.
      6 #
      7 
      8 # Select a random backoff time (1-20 secs) for retrying 'ln -sf' operations
      9 BACKOFF := $$$$(( (RANDOM % 20) + 1 ))
     10 
     11 SDK :=$(shell if [ -n "$$SDK" ] ; then\
     12 	echo $$SDK;\
     13 	else\
     14 	cd $(dir $(lastword $(MAKEFILE_LIST))); while /usr/bin/test ! -e RELEASE ; do \
     15 	dir=`cd ../;pwd`;			\
     16 	if [ "$$dir" = "/" ] ; then		\
     17 	   echo Cannot find SDK in $(lastword $(MAKEFILE_LIST)) 1>&2;		\
     18 	   exit 1;				\
     19 	fi ;					\
     20 	cd $$dir;				\
     21 	done ;					\
     22 	pwd;					\
     23 	fi)
     24 
     25 ifeq ($(SDK),)
     26 $(error Please run this in a tree)
     27 endif
     28 
     29 export SDK
     30 
     31 override-target=unix-user
     32 
     33 ifeq ($(LINUX_MAKE_SHARED_LIB),1)
     34 libext = so.$(SHAREDLIBVER)
     35 else
     36 libext = a
     37 endif
     38 
     39 ifeq (,$(platform))
     40 $(error Internal error: platform variable is not set)
     41 endif
     42 
     43 include $(SDK)/make/Make.config
     44 LOCALDIR=systems/linux/user/common
     45 include $(SDK)/make/Make.depend
     46 kernel-override=linux-$(platform)
     47 ifdef BLDCONFIG
     48 KERN_BLDROOT=${SDK}/${SDKBUILD}/${BLDCONFIG}/$(kernel-override)${all_suffix}$(bldroot_suffix)
     49 else
     50 KERN_BLDROOT=${SDK}/${SDKBUILD}/$(kernel-override)${all_suffix}$(bldroot_suffix)
     51 endif
     52 
     53 ifeq (,$(kernel_version))
     54 kernel_version=2_4
     55 endif
     56 
     57 ifneq ($(kernel_version),2_4)
     58 KOBJ=ko
     59 else
     60 KOBJ=o
     61 endif
     62 
     63 ifneq (,$(TOOLS_DIR))
     64 override PATH := $(TOOLS_DIR):$(PATH)
     65 endif
     66 
     67 ifeq ($(DEST_DIR),)
     68 DEST_DIR=${BLDDIR}
     69 endif
     70 
     71 BCM_LOCAL := bcm.$(targetplat)$(all_suffix)
     72 BCM := $(DEST_DIR)/$(BCM_LOCAL)
     73 
     74 KERNEL_BDE_LOCAL := linux-kernel-bde.$(KOBJ)
     75 KERNEL_BDE := $(DEST_DIR)/$(KERNEL_BDE_LOCAL)
     76 
     77 USER_BDE_LOCAL := linux-user-bde.$(KOBJ)
     78 USER_BDE := $(DEST_DIR)/$(USER_BDE_LOCAL)
     79 
     80 UK_PROXY_LOCAL := linux-uk-proxy.$(KOBJ)
     81 UK_PROXY := $(DEST_DIR)/$(UK_PROXY_LOCAL)
     82 
     83 KNET_CB_LOCAL := linux-knet-cb.$(KOBJ)
     84 KNET_CB := $(DEST_DIR)/$(KNET_CB_LOCAL)
     85 
     86 BCM_KNET_LOCAL := linux-bcm-knet.$(KOBJ)
     87 BCM_KNET := $(DEST_DIR)/$(BCM_KNET_LOCAL)
     88 
     89 NETSERVE_LOCAL := netserve
     90 NETSERVE := $(DEST_DIR)/$(NETSERVE_LOCAL)
     91 
     92 # Kernel modules
     93 KERNEL_TARGETS := $(KERNEL_BDE) $(USER_BDE)
     94 LOCAL_KERNEL_TARGETS := $(patsubst %,$(realpath ..)/$(platform)/%,$(KERNEL_BDE_LOCAL) $(USER_BDE_LOCAL))
     95 
     96 # Main BCM application
     97 BCM_TARGETS := $(BCM)
     98 LOCAL_BCM_TARGETS := $(patsubst %,$(realpath ..)/$(platform)/%,$(BCM_LOCAL) $(BCM_LOCAL).dbg)
     99 
    100 # Additional user mode applications
    101 USER_TARGETS := $(NETSERVE)
    102 LOCAL_USER_TARGETS := $(patsubst %,$(realpath ..)/$(platform)/%,$(NETSERVE_LOCAL))
    103 
    104 ifeq (,$(findstring DELIVER,$(MAKECMDGOALS)))
    105 
    106 # Allow override of default make target
    107 ifeq (,$(DEFAULT_MAKE_TARGET))
    108 .DEFAULT_GOAL := all
    109 else
    110 .DEFAULT_GOAL := $(DEFAULT_MAKE_TARGET)
    111 endif
    112 
    113 # Kernel network support
    114 ifdef BUILD_KNET
    115 
    116 KERNEL_TARGETS += $(UK_PROXY)
    117 LOCAL_KERNEL_TARGETS += $(patsubst %,$(realpath ..)/$(platform)/%,$(UK_PROXY_LOCAL))
    118 
    119 ifdef ESW_CHIPS
    120 KERNEL_TARGETS += $(BCM_KNET)
    121 LOCAL_KERNEL_TARGETS += $(patsubst %,$(realpath ..)/$(platform)/%,$(BCM_KNET_LOCAL))
    122 endif
    123 
    124 ifdef DPP_CHIPS
    125 KERNEL_TARGETS += $(BCM_KNET)
    126 LOCAL_KERNEL_TARGETS += $(patsubst %,$(realpath ..)/$(platform)/%,$(BCM_KNET_LOCAL))
    127 endif
    128 
    129 ifdef BUILD_KNET_CB
    130 KERNEL_TARGETS += $(KNET_CB)
    131 LOCAL_KERNEL_TARGETS += $(patsubst %,$(realpath ..)/$(platform)/%,$(KNET_CB_LOCAL))
    132 endif
    133 
    134 ADD_TO_CFLAGS += -I$(SDK)/systems/linux/kernel/modules/include
    135 COND_KNET_LIBS = libuser.$(libext)
    136 
    137 endif # BUILD_KNET
    138 
    139 ifeq ($(NO_LOCAL_TARGETS),)
    140 LOCAL_TARGETS := $(LOCAL_KERNEL_TARGETS) $(LOCAL_BCM_TARGETS) $(LOCAL_USER_TARGETS)
    141 all_targets := $(LOCAL_TARGETS)
    142 else
    143 LOCAL_TARGETS :=
    144 all_targets := $(KERNEL_TARGETS) $(BCM_TARGETS) $(USER_TARGETS)
    145 endif
    146 
    147 
    148 
    149 export BCM_LIB_PETRA
    150 
    151 # Build all targets
    152 all: $(BLDDIR)/.tree $(all_targets)
    153 
    154 ifeq ($(NO_LOCAL_TARGETS),)
    155 # Build kernel modules only
    156 mod: $(LOCAL_KERNEL_TARGETS)
    157 
    158 # Build main BCM application only
    159 bcm: $(LOCAL_BCM_TARGETS)
    160 
    161 # Build additional user mode applications only
    162 user: $(LOCAL_USER_TARGETS)
    163 
    164 define LOCAL_TARGET_DEF
    165 $(1) : $(DEST_DIR)/$(notdir $(1))
    166 	@for i in {1..10}; do echo "Symlinking $1..." ; ln -sf $$? $$@ && break || sleep ${BACKOFF} ; done
    167 endef
    168 endif
    169 
    170 # Target specific
    171 ADD_TO_CFLAGS += -DLINUX_SAL_DMA_ALLOC_OVERRIDE
    172 #ADD_TO_CFLAGS += -DLINUX_SAL_USLEEP_OVERRIDE
    173 #ADD_TO_CFLAGS += -DLINUX_SAL_SEM_OVERRIDE
    174 #ADD_TO_CFLAGS += -DLINUX_SAL_UDELAY_OVERRIDE
    175 
    176 # User BDE libraries
    177 ADD_TO_CFLAGS += -I$(SDK)/systems/bde/linux/include
    178 
    179 CFLAGS += $(ADD_TO_CFLAGS)
    180 
    181 ifdef ESW_CHIPS
    182 ESW_DIAG_LIBS = libdiag_esw.$(libext) \
    183                 libtsl3uc.$(libext) \
    184                 libtsl3mc.$(libext) \
    185                 libtsmpls.$(libext) \
    186                 libtsmmu.$(libext) \
    187                 libtsoam.$(libext) \
    188                 libtsniv.$(libext) \
    189                 libtsriot.$(libext) \
    190                 libtsvlan.$(libext) \
    191                 libtsvxlan.$(libext) \
    192                 libtsfflow.$(libext) \
    193                 libtsbasic.$(libext) \
    194                 libtsifp.$(libext) \
    195                 libtsvfp.$(libext) \
    196                 libtsefp.$(libext) \
    197                 libtscos.$(libext) \
    198                 libtsloadbalance.$(libext) \
    199                 libtsdgm.$(libext) \
    200                 libtstcb.$(libext) \
    201                 libtspstat.$(libext) \
    202                 libtsphy.$(libext) \
    203                 libtsledup.$(libext) \
    204                 libtscmic.$(libext) \
    205                 libtsvisibility.$(libext) \
    206                 libtswarmboot.$(libext) \
    207                 libtechsupport.$(libext)
    208 ESW_DIAG_LIBS += libtsetrap.$(libext)
    209 ESW_DIAG_LIBS += libtsint.$(libext)
    210 ESW_DIAG_LIBS += libtshistogram.$(libext)
    211 ESW_DIAG_LIBS += libtsalpm.$(libext)
    212 ESW_DIAG_LIBS += libtscancun.$(libext)
    213 endif
    214 
    215 ifndef NO_SAL_APPL
    216 COND_LIB_SAL_APPL=libsal_appl.$(libext)
    217 COND_LIB_SAL_APPL_PLATFORM=libsal_appl_plat.$(libext)
    218 endif
    219 
    220 ifeq ($(BCM_SIM_PATH_SUPPORT),1)
    221 COND_LIB_PLI_BDE = libplibde.$(libext)
    222 PLI = pli
    223 endif
    224 
    225 DIAG_LIBS = \
    226         libdiag.$(libext)       \
    227         ${ESW_DIAG_LIBS} \
    228         ${SAND_DIAG_LIBS} \
    229 	$(COND_LIB_EAV_APPL) \
    230 	${COND_LIB_PHYMOD_DIAG} \
    231 	${COND_LIB_PORTMOD_DIAG} \
    232 	${COND_LIB_BCMX_DIAG} \
    233         ${COND_LIB_TEST} \
    234 	$(COND_LIB_TCL) \
    235 	$(APPL_LIBS) \
    236 	$(COND_LIB_EDITLINE) \
    237 	$(COND_LIB_WBDM) \
    238 	$(COND_LIB_SMB) \
    239 	$(COND_LIB_PHY_DIAGNOSTICS) \
    240 	$(COND_KNET_LIBS) \
    241 	$(COND_LIB_SAL_APPL) \
    242 	$(COND_LIB_SAL_APPL_PLATFORM) \
    243 	$(COND_LIB_PLI_BDE) \
    244 	liblubde.$(libext)
    245 
    246 
    247 ACL_LIB = $(COND_LIB_ACL)
    248 BCM_LIBS = $(DIAG_LIBS) $(DRV_LIBS) $(ACL_LIB) $(COND_LIB_ETH_DRV)
    249 BCM_LIBS_BLD = $(addprefix $(BLDDIR)/,$(BCM_LIBS))
    250 
    251 BCM_LIBS_BLD += ${EXTERNAL_LIBS}
    252 
    253 # Kernel network support
    254 ifdef BUILD_KNET
    255 
    256 knet_subdirs = shared uk-proxy
    257 
    258 ifdef ESW_CHIPS
    259 knet_subdirs += bcm-knet
    260 endif
    261 
    262 ifdef DPP_CHIPS
    263 knet_subdirs += bcm-knet
    264 endif
    265 
    266 ifdef BUILD_KNET_CB
    267 knet_subdirs += knet-cb
    268 endif
    269 
    270 endif # BUILD_KNET
    271 
    272 
    273 kernel_modules:
    274 ifdef IPROC_BUILD
    275 ifneq ($(wildcard $(SDK)/tools/diffconfig.pl),)
    276 	$(PERL) $(SDK)/tools/diffconfig.pl \
    277                 $(SDK)/systems/linux/user/$(platform)/linux-$(platform).config $(KERNDIR)/.config
    278 endif
    279 endif
    280 	$(MAKE) -C $(SDK)/systems/linux/kernel/modules kernel_version=$(kernel_version) OPT_CFLAGS="$(ADD_TO_CFLAGS)" \
    281                 subdirs="shared" override-target=linux-$(platform); \
    282 	$(MAKE) -C $(SDK)/systems/linux/kernel/modules kernel_version=$(kernel_version) OPT_CFLAGS="$(ADD_TO_CFLAGS)" \
    283                 subdirs="uk-proxy" override-target=linux-$(platform); \
    284 	$(MAKE) -C $(SDK)/systems/bde/linux/kernel kernel_version=$(kernel_version) OPT_CFLAGS="$(ADD_TO_CFLAGS)"; \
    285 	$(MAKE) -C $(SDK)/systems/bde/linux/user/kernel kernel_version=$(kernel_version) OPT_CFLAGS="$(ADD_TO_CFLAGS)"
    286 ifdef BUILD_KNET
    287 	$(MAKE) -C $(SDK)/systems/linux/kernel/modules kernel_version=$(kernel_version) OPT_CFLAGS="$(ADD_TO_CFLAGS)" \
    288 		subdirs="$(knet_subdirs)" override-target=linux-$(platform)
    289 endif
    290 
    291 user_libs:
    292 ifdef CUSTOMER_SOURCE_DIR
    293 	$(MAKE) -C $(CUSTOMER_SOURCE_DIR) CFLAGS="$(CFLAGS)"
    294 endif
    295 	$(MAKE) -C $(SDK)/systems/bde/linux/user CFLAGS="$(CFLAGS)"
    296 ifdef BUILD_PHYMOD
    297 	$(MAKE) -C $(SDK)/libs/phymod LINUX_MAKE_SHARED_LIB=${LINUX_MAKE_SHARED_LIB} SHAREDLIBVER=${SHAREDLIBVER}
    298 endif
    299 ifdef BUILD_PCIEG3
    300 	$(MAKE) -C $(SDK)/libs/pcieg3
    301 endif
    302 	$(MAKE) -C $(SDK)/src CFLAGS="$(ADD_TO_CFLAGS)"
    303 	$(MAKE) -C $(SDK)/systems/drv CFLAGS="$(CFLAGS)"
    304 ifdef BUILD_KNET
    305 	$(MAKE) -C $(SDK)/systems/linux/kernel/user/shared CFLAGS="$(CFLAGS)"
    306 endif
    307 ifdef BUILD_XFLOW_MACSEC
    308 	@${ECHO} "Building XFLOW_MACSEC libraries ...."
    309 	$(MAKE) -C ${XFLOW_MACSEC_HOME} XFLOW_MACSEC_CC="${CC}" XFLOW_MACSEC_LD="${LD}" XFLOW_MACSEC_AR="$(AR)" XFLOW_MACSEC_CFLAGS="${XFLOW_MACSEC_BUILD_FLAG}" XFLOW_MACSEC_TARGET="${targetbase}/${targetplat}/${platform}" CFLAGS="$(CFLAGS)"
    310 else
    311 ifdef BUILD_MACSEC
    312 	@${ECHO} "Building MACSEC libraries ...."
    313 	$(MAKE) -C ${MACSEC_HOME} MACSEC_CC="${CC}" MACSEC_LD="${LD}" MACSEC_AR="$(AR)" MACSEC_CFLAGS="${MACSEC_BUILD_FLAG}" MACSEC_TARGET="${targetbase}/${targetplat}/${platform}"
    314 endif
    315 endif
    316 ifdef BUILD_EXT_SERVO
    317 	@${ECHO} "Building External servo library .... $(CPU_PLATFORM)"
    318 	$(MAKE) -C ${EXT_SERVO_BUILD_HOME} TARGET=linux.$(CPU_PLATFORM) CPU_TARGET=$(CPU_PLATFORM) USER_ARFLAGS=rcvs CLOCK_TYPE=BC NUMBER_OF_STACK_INSTANCES=10 DCO_DEVICE=softwareDco TIMESTAMP_DEVICE=softwareTimestamping
    319 endif
    320 # Broadcom Command Monitor
    321 
    322 # Build platform_defines.c to compile in config.bcm
    323 #
    324 ifndef NO_SAL_APPL
    325 PLATFORM_DEFINES_OBJ=${BLDDIR}/platform_defines.o
    326 ${BLDDIR}/platform_defines.c: ${SDK}/rc/config.bcm
    327 	$(PERL) ${SDK}/tools/bcm2c_linux.pl ${SDK}/rc/config.bcm >$@
    328 ${BLDDIR}/platform_defines.o: ${BLDDIR}/platform_defines.c
    329 	${CC} ${CFLAGS} -c $< -o $@
    330 else
    331 PLATFORM_DEFINES_OBJ=
    332 endif
    333 
    334 pli:
    335 	$(MAKE) -C ${SDK}/systems/bde/pli OPT_CFLAGS="$(ADD_TO_CFLAGS)"
    336 
    337 $(BCM): $(BCM).dbg
    338 	mkdir -p $(@D)
    339 	$(OBJCOPY) --strip-debug $< $@
    340 
    341 LINKER := $(CC)
    342 ifeq ($(C_CPP_CODE_MIX), TRUE)
    343 LINKER := $(CXX)
    344 endif
    345 
    346 $(BCM).dbg: user_libs $(PLI) $(BLDDIR)/socdiag.o $(BLDDIR)/version.o \
    347 	${PLATFORM_DEFINES_OBJ}
    348 	@rm -f $@	# Prevent core dump if currently running
    349 	@echo Linking $@ # This is needed for error parsing
    350 	$(LINKER) $(CFLAGS) -o $@ $(BLDDIR)/socdiag.o $(BLDDIR)/version.o \
    351 	-Wl,--start-group ${PLATFORM_DEFINES_OBJ} $(BCM_LIBS_BLD)  -Wl,--end-group $(LDFLAGS)
    352 
    353 
    354 $(KERNEL_BDE): $(KERN_BLDROOT)/linux-kernel-bde.$(KOBJ)
    355 	mkdir -p $(@D)
    356 	$(OBJCOPY) --strip-debug $< $@
    357 
    358 $(USER_BDE): $(KERN_BLDROOT)/linux-user-bde.$(KOBJ)
    359 	$(OBJCOPY) --strip-debug $< $@
    360 
    361 $(UK_PROXY): $(KERN_BLDROOT)/linux-uk-proxy.$(KOBJ)
    362 	$(OBJCOPY) --strip-debug $< $@
    363 
    364 $(KNET_CB): $(KERN_BLDROOT)/$(KNET_CB_LOCAL)
    365 	$(OBJCOPY) --strip-debug $< $@
    366 
    367 $(BCM_KNET): $(KERN_BLDROOT)/$(BCM_KNET_LOCAL)
    368 	$(OBJCOPY) --strip-debug $< $@
    369 
    370 $(KERN_BLDROOT)/%.$(KOBJ): kernel_modules
    371 	@echo Force execution of kernel_modules target > /dev/null
    372 
    373 $(NETSERVE): $(BLDDIR)/netserve.o
    374 	mkdir -p $(@D)
    375 	$(CC) $(CFLAGS) -o $@ $(BLDDIR)/netserve.o $(LDFLAGS) -lutil
    376 	$(OBJCOPY) --strip-debug $@
    377 
    378 ifeq ($(NO_LOCAL_TARGETS),)
    379 $(foreach targ,$(LOCAL_TARGETS),$(eval $(call LOCAL_TARGET_DEF,$(targ))))
    380 endif
    381 
    382 # Build Version
    383 $(BLDDIR)/version.c: $(BLDDIR)/socdiag.o user_libs
    384 	$(PERL) $(SDK)/tools/version.pl > $@
    385 $(BLDDIR)/version.o: $(BLDDIR)/version.c
    386 	$(CC) $(CFLAGS) -c $< -o $@
    387 
    388 clean::
    389 	$(MAKE) -C $(SDK)/systems/bde/linux/kernel $@
    390 	$(MAKE) -C $(SDK)/systems/bde/linux/user/kernel $@
    391 	$(MAKE) -C $(SDK)/systems/bde/linux/user CFLAGS="$(CFLAGS)" $@
    392 	$(MAKE) -C $(SDK)/systems/drv $@
    393 	$(MAKE) -C $(SDK)/systems/drv/eth $@
    394 	$(MAKE) -C $(SDK)/src CFLAGS="$(CFLAGS)" $@
    395 ifdef BUILD_PHYMOD
    396 	$(MAKE) -C $(SDK)/libs/phymod LINUX_MAKE_SHARED_LIB=${LINUX_MAKE_SHARED_LIB} SHAREDLIBVER=${SHAREDLIBVER} $@
    397 endif
    398 ifdef BUILD_PCIEG3
    399 	$(MAKE) -C $(SDK)/libs/pcieg3 $@
    400 endif
    401 	$(MAKE) -C $(SDK)/systems/linux/kernel/user/shared $@
    402 	$(MAKE) -C $(SDK)/systems/linux/kernel/modules \
    403 		subdirs="$(knet_subdirs)" \
    404 		override-target=linux-$(platform) $@
    405 	$(RM) $(BLDDIR)/version.c $(BLDDIR)/version.o
    406 	$(RM) $(BLDDIR)/platform_defines.c $(BLDDIR)/platform_defines.o
    407 	$(RM) $(BLDDIR)/socdiag.o
    408 	$(RM) $(KERNEL_BDE) $(USER_BDE) $(BCM) $(BCM).dbg
    409 	$(RM) $(UK_PROXY) $(BCM_KNET)
    410 	$(RM) $(KERN_BLDROOT)/linux-kernel-bde.$(KOBJ)
    411 	$(RM) $(KERN_BLDROOT)/linux-user-bde.$(KOBJ)
    412 	$(RM) $(KERN_BLDROOT)/linux-uk-proxy.$(KOBJ)
    413 	$(RM) $(KERN_BLDROOT)/linux-bcm-knet.$(KOBJ)
    414 	$(RM) $(BLDDIR)/netserve.o
    415 	$(RM) $(NETSERVE) $(LOCAL_TARGETS)
    416 ifdef BUILD_EXT_SERVO
    417 	@${ECHO} "Clean External servo library ....$(CPU_PLATFORM)"
    418 	$(MAKE) -C ${EXT_SERVO_BUILD_HOME} TARGET=linux.$(CPU_PLATFORM) clean
    419 endif
    420 ifdef BUILD_XFLOW_MACSEC
    421 	$(MAKE) -C ${XFLOW_MACSEC_HOME} XFLOW_MACSEC_CC="${CC}" XFLOW_MACSEC_LD="${LD}" \
    422 		XFLOW_MACSEC_TARGET="${targetbase}/$(targetplat)/${platform}" clean
    423 endif
    424 
    425 distclean::
    426 	$(RM) $(BLDROOT)
    427 	$(RM) $(KERN_BLDROOT)
    428 	$(RM) $(DEST_DIR)
    429 
    430 .PHONY: variable
    431 
    432 #
    433 # Echo variable values used for configuration
    434 # usage: make VAR=CC variable
    435 #
    436 variable::
    437 	@echo $($(VAR))
    438 
    439 else
    440 ifndef DELIVERY
    441 $(error DELIVERY required)
    442 endif
    443 
    444 DELIVERABLES := $(KERNEL_BDE) $(USER_BDE) $(BCM) $(BCM).dbg $(NETSERVE)
    445 # 1= source
    446 define DELIVERY_RULE
    447 _DEL_TARG += $(DELIVERY)/$(notdir $(1))
    448 $(DELIVERY)/$(notdir $(1)) : $(1)
    449 	@mkdir -p $(DELIVERY)
    450 ifeq ($(filter $(notdir $(BCM)) $(notdir $(BCM).dbg),$(notdir $1)),)
    451 	$(OBJCOPY) --strip-debug $$< $$@
    452 else
    453 	$(CP) -p $$< $$@
    454 endif
    455 endef
    456 
    457 $(foreach f,$(DELIVERABLES),$(eval $(call DELIVERY_RULE,$(f))))
    458 
    459 DELIVER: $(_DEL_TARG)
    460 endif
    461 
    462 # Make.config defines remaining phony targets
    463 .PHONY: build kernel_modules user_libs pli DELIVER mod bcm user
    464 
    465