Makefile (6931B)
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 SDK :=$(shell if [ -n "$$SDK" ] ; then\ 8 echo $$SDK;\ 9 else\ 10 cd $(dir $(lastword $(MAKEFILE_LIST))); while /usr/bin/test ! -e RELEASE ; do \ 11 dir=`cd ../;pwd`; \ 12 if [ "$$dir" = "/" ] ; then \ 13 echo Cannot find SDK in $(lastword $(MAKEFILE_LIST)) 1>&2; \ 14 exit 1; \ 15 fi ; \ 16 cd $$dir; \ 17 done ; \ 18 pwd; \ 19 fi) 20 21 ifeq ($(SDK),) 22 $(error Please run this in a tree) 23 endif 24 25 export SDK 26 27 user-override=unix-user 28 29 ifeq (,$(platform)) 30 $(error Makefile: error: Internal error: platform variable is not set) 31 else 32 33 override-target=linux-$(platform) 34 include $(SDK)/make/Make.config 35 endif 36 37 ifeq (,$(kernel_version)) 38 kernel_version=2_4 39 endif 40 41 ifneq ($(kernel_version),2_4) 42 KOBJ=ko 43 else 44 KOBJ=o 45 endif 46 47 BCM_PROXY=$(DEST_DIR)/bcm.user.proxy 48 49 lmsc_platform=$(platform) 50 51 ifeq (2.6.24.4, $(KERN_VER)) 52 lmsc_platform=$(platform).2.6.24 53 endif 54 55 ifeq (2.6.25, $(KERN_VER)) 56 lmsc_platform=$(platform).2.6.25 57 endif 58 59 ifeq (2.6.27.18, $(KERN_VER)) 60 lmsc_platform=$(platform).2.6.27 61 endif 62 63 ifeq (3.0,$(WRS_LINUX_VERSION)) 64 lmsc_platform=$(platform)-wr30 65 endif 66 67 ifeq ($(DESTDIR),) 68 DESTDIR=${BLDDIR} 69 endif 70 71 # 1 = basename 72 define KERNEL_RULE 73 $(DESTDIR)/$(1) : kernel_modules 74 $(DEST_DIR)/$(1) : $(DESTDIR)/$(1) | $(DEST_DIR) 75 $(OBJCOPY) --strip-debug $(DESTDIR)/$(1) $$@ 76 endef 77 78 79 LOCAL_DESTDIR :=$(SDK)/systems/linux/kernel/$(platform) 80 81 BCM_PROXY_LOCAL :=$(LOCAL_DESTDIR)/bcm.user.proxy 82 KERNEL_BDE_LOCAL :=$(LOCAL_DESTDIR)/linux-kernel-bde.$(KOBJ) 83 KERNEL_CORE_LOCAL :=$(LOCAL_DESTDIR)/linux-bcm-core.$(KOBJ) 84 KERNEL_PROXY_LOCAL :=$(LOCAL_DESTDIR)/linux-uk-proxy.$(KOBJ) 85 KERNEL_DIAG_FULL_LOCAL :=$(LOCAL_DESTDIR)/linux-bcm-diag-full.$(KOBJ) 86 KERNEL_NET_LOCAL :=$(LOCAL_DESTDIR)/linux-bcm-net.$(KOBJ) 87 KERNEL_DIAG_LOCAL :=$(LOCAL_DESTDIR)/linux-bcm-diag.$(KOBJ) 88 89 KERNEL_BDE :=$(DEST_DIR)/linux-kernel-bde.$(KOBJ) 90 KERNEL_CORE:=$(DEST_DIR)/linux-bcm-core.$(KOBJ) 91 KERNEL_PROXY :=$(DEST_DIR)/linux-uk-proxy.$(KOBJ) 92 KERNEL_DIAG_FULL :=$(DEST_DIR)/linux-bcm-diag-full.$(KOBJ) 93 KERNEL_NET:=$(DEST_DIR)/linux-bcm-net.$(KOBJ) 94 KERNEL_DIAG:=$(DEST_DIR)/linux-bcm-diag.$(KOBJ) 95 96 _KERNEL_BDE:=$(DESTDIR)/linux-kernel-bde.$(KOBJ) 97 _KERNEL_CORE:=$(DESTDIR)/linux-bcm-core.$(KOBJ) 98 _KERNEL_PROXY:=$(DESTDIR)/linux-uk-proxy.$(KOBJ) 99 _KERNEL_DIAG_FULL:=$(DESTDIR)/linux-bcm-diag-full.$(KOBJ) 100 _KERNEL_NET:=$(DESTDIR)/linux-bcm-net.$(KOBJ) 101 _KERNEL_DIAG:=$(DESTDIR)/linux-bcm-diag.$(KOBJ) 102 103 _KERNEL_TARGETS:=$(_KERNEL_BDE) $(_KERNEL_CORE) $(_KERNEL_PROXY) \ 104 $(_KERNEL_DIAG_FULL) $(_KERNEL_NET) $(_KERNEL_DIAG) 105 106 107 108 # Modules must be built in load order to ensure correct module versioning 109 KERNEL_TARGETS:=$(KERNEL_BDE) $(KERNEL_CORE) $(KERNEL_PROXY) \ 110 $(KERNEL_DIAG_FULL) $(KERNEL_NET) $(KERNEL_DIAG) 111 112 ifeq ($(NO_LOCAL_TARGETS),) 113 LOCAL_TARGETS :=$(KERNEL_BDE_LOCAL) $(KERNEL_CORE_LOCAL) $(KERNEL_PROXY_LOCAL) \ 114 $(KERNEL_DIAG_FULL_LOCAL) $(KERNEL_NET_LOCAL) $(KERNEL_DIAG_LOCAL) 115 KERNEL_TARGETS += $(LOCAL_TARGETS) 116 117 # Rule to make local target 118 define LOCAL_TARGET_DEF 119 $(1) : $(DESTDIR)/$(notdir $(1)) 120 @for i in {1..10}; do echo "Symlinking $1..." ; ln -sf $(DEST_DIR)/$(notdir $(1)) $$@ && break || sleep ${BACKOFF} ; done 121 endef 122 endif 123 124 ifeq (,$(findstring DELIVER,$(MAKECMDGOALS))) 125 all: $(KERNEL_TARGETS) user_apps link_check $(if $(NO_LOCAL_TARGETS),,$(BCM_PROXY_LOCAL)) $(EXTRA_LIBRARY) 126 127 $(foreach t,$(notdir $(_KERNEL_TARGETS)),$(eval $(call KERNEL_RULE,$(t)))) 128 129 ifeq ($(NO_LOCAL_TARGETS),) 130 $(foreach t,$(LOCAL_TARGETS),$(eval $(call LOCAL_TARGET_DEF,$(t)))) 131 endif 132 133 ifeq (1,$(KS_HIGHMEM)) 134 lmsc_platform:=$(lmsc_platform)-highmem 135 endif 136 137 $(DEST_DIR): 138 mkdir -p $@ 139 140 kernel_modules: 141 ifdef BUILD_PHYMOD 142 $(MAKE) -C $(SDK)/libs/phymod 143 endif 144 ifdef BUILD_PCIEG3 145 $(MAKE) -C $(SDK)/libs/pcieg3 146 endif 147 $(MAKE) -C $(SDK)/src 148 $(MAKE) -C $(SDK)/systems/drv 149 ifdef BUILD_XFLOW_MACSEC 150 @$(ECHO) "Building XFLOW_MACSEC libraries ...." 151 $(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}" all 152 else 153 ifdef BUILD_MACSEC 154 @$(ECHO) "Building MACSEC libraries ...." 155 $(MAKE) -C ${MACSEC_HOME} MACSEC_CC="${CC}" MACSEC_LD="${LD}" MACSEC_AR="$(AR)" MACSEC_CFLAGS="${MACSEC_BUILD_FLAG}" MACSEC_TARGET="${targetbase}/$(targetplat)/${platform}" all 156 endif 157 endif 158 $(MAKE) -C $(SDK)/systems/bde/linux/kernel 159 $(MAKE) -C $(SDK)/systems/linux/kernel/modules kernel_version=$(kernel_version) 160 161 $(BCM_PROXY_LOCAL) : $(BCM_PROXY) 162 rm -f $@ 163 ln -sf $? $@ 164 165 166 $(BCM_PROXY) : user_apps 167 168 user_apps: 169 $(MAKE) -C $(SDK)/src/sal/appl 170 $(MAKE) -C $(SDK)/systems/linux/kernel/user/bcm-diag-proxy \ 171 BCM_PROXY=$(BCM_PROXY) \ 172 override-target=$(user-override) \ 173 bldroot_suffix=/$(override-target) 174 175 # 176 # Define the set of allowable link dependencies. 177 # All configurations in the LINK_CHECKS variable 178 # must be clean. 179 # 180 LINK_CHECKS = $(KERNEL_BDE) 181 LINK_CHECKS += $(KERNEL_PROXY) 182 LINK_CHECKS += $(KERNEL_BDE),$(KERNEL_CORE) 183 LINK_CHECKS += $(KERNEL_BDE),$(KERNEL_CORE),$(KERNEL_NET) 184 LINK_CHECKS += $(KERNEL_BDE),$(KERNEL_CORE),$(KERNEL_PROXY),$(KERNEL_DIAG) 185 LINK_CHECKS += $(KERNEL_BDE),$(KERNEL_PROXY),$(KERNEL_DIAG_FULL) 186 187 link_check: kernel_modules 188 $(PERL) $(SDK)/tools/lmsc.pl ferror=0 kernel=$(lmsc_platform) $(LINK_CHECKS) 189 190 clean: 191 $(MAKE) -C $(SDK)/src $@ 192 $(MAKE) -C $(SDK)/systems/drv $@ 193 $(MAKE) -C $(SDK)/systems/drv/eth $@ 194 ifdef BUILD_PHYMOD 195 $(MAKE) -C $(SDK)/libs/phymod $@ 196 endif 197 ifdef BUILD_PCIEG3 198 $(MAKE) -C $(SDK)/libs/pcieg3 $@ 199 endif 200 $(MAKE) -C $(SDK)/systems/linux/kernel/modules $@ 201 $(MAKE) -C $(SDK)/systems/bde/linux/kernel $@ 202 $(MAKE) -C $(SDK)/systems/linux/kernel/user/bcm-diag-proxy \ 203 BCM_PROXY=$(BCM_PROXY) \ 204 override-target=$(user-override) \ 205 bldroot_suffix=/$(override-target) $@ 206 $(RM) $(_KERNEL_TARGETS) $(KERNEL_TARGETS) $(LOCAL_TARGETS) 207 ifdef BUILD_XFLOW_MACSEC 208 $(MAKE) -C ${XFLOW_MACSEC_HOME} XFLOW_MACSEC_TARGET="${targetbase}/$(targetplat)/${platform}" clean 209 else 210 ifdef BUILD_MACSEC 211 $(MAKE) -C ${MACSEC_HOME} MACSEC_TARGET="${targetbase}/$(targetplat)/${platform}" clean 212 endif 213 endif 214 215 distclean: 216 $(RM) $(BLDROOT) 217 $(RM) $(DEST_DIR) 218 219 .PHONY: variable user_apps 220 221 # 222 # Echo variable values used for configuration 223 # usage: make VAR=CC variable 224 # 225 variable:: 226 @echo $($(VAR)) 227 228 else 229 ifndef DELIVERY 230 $(error DELIVERY required) 231 endif 232 233 DELIVERABLES := $(KERNEL_TARGETS) $(BCM_PROXY) 234 235 # 1= source 236 define DELIVERY_RULE 237 _DEL_TARG += $(DELIVERY)/$(notdir $(1)) 238 $(DELIVERY)/$(notdir $(1)) : $(1) 239 @mkdir -p $(DELIVERY) 240 $(OBJCOPY) --strip-debug $$< $$@ 241 endef 242 243 $(foreach f,$(DELIVERABLES),$(eval $(call DELIVERY_RULE,$(f)))) 244 245 DELIVER: $(_DEL_TARG) 246 endif 247 248 # Make.config defines remaining phony targets 249 .PHONY: check kernel_modules user_apps kernel_targets DELIVER 250 251