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 (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