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