blob: 5fa648881b4b1483ec6226e0e990bf8fbb2a6009 [file] [log] [blame]
Shad Ansari2f7f9be2017-06-07 13:34:53 -07001###############################################################################
2#
3# <:copyright-BRCM:2016:proprietary:standard
4#
5# Broadcom Ltd. Proprietary and Confidential.(c) 2016 Broadcom Ltd.
6# All Rights Reserved
7#
8# This program is the proprietary software of Broadcom Ltd. and/or its
9# licensors, and may only be used, duplicated, modified or distributed pursuant
10# to the terms and conditions of a separate, written license agreement executed
11# between you and Broadcom Ltd. (an "Authorized License"). Except as set forth in
12# an Authorized License, Broadcom Ltd. grants no license (express or implied), right
13# to use, or waiver of any kind with respect to the Software, and Broadcom Ltd.
14# expressly reserves all rights in and to the Software and all intellectual
15# property rights therein. IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
16# NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
17# BROADCOM LTD AND DISCONTINUE ALL USE OF THE SOFTWARE.
18#
19# Except as expressly set forth in the Authorized License,
20#
21# 1. This program, including its structure, sequence and organization,
22# constitutes the valuable trade secrets of Broadcom Ltd., and you shall use
23# all reasonable efforts to protect the confidentiality thereof, and to
24# use this information only in connection with your use of Broadcom Ltd.
25# integrated circuit products.
26#
27# 2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
28# AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
29# WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
30# RESPECT TO THE SOFTWARE. BROADCOM SPECIFICALLY DISCLAIMS ANY AND
31# ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
32# FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
33# COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
34# TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
35# PERFORMANCE OF THE SOFTWARE.
36#
37# 3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
38# ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
39# INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
40# WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
41# IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
42# OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
43# SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
44# SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
45# LIMITED REMEDY.
46# :>
47#
48###############################################################################
49# Central Makefile
50#
51
52# Identify whether it is customer or development build
53ifneq ("$(wildcard .release_build)","")
54 RELEASE_BUILD=y
55 export RELEASE_BUILD
56endif
57
58DOCS_SUBSYSTEM := core
59ifeq ("$(BUILD_OF_AGENT)", "y")
60 ifneq ("$(findstring core,$(MAKECMDGOALS))", "")
61 $(error Setting BUILD_OF_AGENT=$(BUILD_OF_AGENT) in incompatible with one of make targets "$(MAKECMDGOALS)"")
62 endif
63 # Backward compatibility
64 ifeq ("$(MAKECMDGOALS)", "clean")
65 OVEERIDE_GOAL = clean_agent
66 endif
67 ifeq ("$(MAKECMDGOALS)", "")
68 OVEERIDE_GOAL = sdn_agent
69 endif
70 DOCS_SUBSYSTEM := agent
71endif
72ifeq ("$(BUILD_OF_AGENT)", "n")
73 ifneq ("$(findstring agent,$(MAKECMDGOALS))", "")
74 $(error Setting BUILD_OF_AGENT=$(BUILD_OF_AGENT) in incompatible with one of make targets "$(MAKECMDGOALS)"")
75 endif
76 # Backward compatibility
77 ifeq ("$(MAKECMDGOALS)", "clean")
78 OVEERIDE_GOAL = clean_core
79 endif
80 ifeq ("$(MAKECMDGOALS)", "")
81 OVEERIDE_GOAL = core
82 endif
83endif
84ifneq ("$(findstring agent,$(MAKECMDGOALS))", "")
85 BUILD_OF_AGENT = y
86endif
87
88BUILD_NC_AGENT ?= y
89
90export BUILD_OF_AGENT
91export BUILD_NC_AGENT
92
93PLATFORM ?= maple
94TOP_DIR=$(shell pwd)
95export PLATFORM
96export TOP_DIR
97
98MAKE_DIR=$(TOP_DIR)/mk
99MAKE_DEVICE_DIR=$(MAKE_DIR)/$(DEVICE)
100export MAKE_DIR
101export MAKE_DEVICE_DIR
102
103TOP_SRC_DIR=$(TOP_DIR)/src
104export TOP_SRC_DIR
105
106include $(MAKE_DIR)/Makefile.initial_config
107include $(TOP_DIR)/branch.info
108
109OUT_DIR ?= $(TOP_DIR)/build
110OUT_DOCS_DIR ?= $(OUT_DIR)/doc
111
112export OUT_DIR
113export OUT_DOCS_DIR
114
115# List of all modules, all library modules and all application modules
116export ALL_MODULES
117export ALL_LIB_MODULES
118export ALL_APP_MODULES
119
120# Current board
121export BOARD
122ifneq ("$(BOARD)", "")
123 BOARD_DIR ?= $(TOP_DIR)/3rdparty/maple/boards/cur/$(BOARD)
124 export BOARD_DIR
125endif
126
127# Location of Maple SDK dir
128MAPLE_SDK_DIR ?= $(TOP_DIR)/3rdparty/maple/cur
129
130LOCAL_MAPLE_SDK_DIR = 3rdparty/maple/sdk
131export MAPLE_SDK_DIR
132export LOCAL_MAPLE_SDK_DIR
133MAPLE_BOARD ?= $(BOARD)
134ifneq ("$(MAPLE_BOARD)", "")
135 MAPLE_BOARD_DIR ?= $(MAPLE_SDK_DIR)/../boards/cur/$(MAPLE_BOARD)
136else
137 MAPLE_BOARD_DIR = $(shell cat $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build/.maple_board_dir 2> /dev/null)
138 tmp = $(shell ; rm -f $(OUT_DIR)/.maple_board_dir)
139endif
140
141ING_SDK_VER ?= 6.5.7
142ING_SDK ?= sdk-all-$(ING_SDK_VER)
143ING_SDK_PATCH ?=sdk-bal-$(ING_SDK_VER).patch
144ING_SDK_TOP_DIR ?= $(TOP_DIR)/3rdparty/bcm-sdk
145ifeq ("$(BOARD)", "")
146 ING_SDK_DEFAULT_DIR := $(ING_SDK_TOP_DIR)/build/$(ING_SDK)
147else
148 ING_SDK_DEFAULT_DIR := $(ING_SDK_TOP_DIR)/build-$(BOARD)/$(ING_SDK)
149endif
150ING_SDK_DIR ?= $(ING_SDK_DEFAULT_DIR)
151export ING_SDK_VER
152export ING_SDK
153export ING_SDK_PATCH
154export ING_SDK_TOP_DIR
155export ING_SDK_DIR
156
157SWITCH ?= qax
158export SWITCH
159
160TMP_BAL_VERSION_H=${MAKE_DIR}/bal_version.tmp
161BAL_VERSION_H:=${TOP_DIR}/src/common/include/bal_version.h
162
163# NOTE: BUILD_INFO is set and exported by Jenkins when built by that tool
164export JENKINS_BUILD
165ifeq ("$(JENKINS_BUILD)", "y")
166 PERFORCE_REVISION:=$(P4_CHANGELIST)
167else ifneq ("$(RELEASE_BUILD), "y")
168 PERFORCE_REVISION:=$(shell p4 changes -m 1 //$(DEPOT)/$(BRANCH)/...\#have | cut -d " " -f 2)
169 BUILD_INFO="Developer build \("${USER}"@"${PWD}"\)"
170 export BUILD_INFO
171else
172 BUILD_INFO="Customer Release Build \("${USER}"@"${PWD}"\)"
173 export BUILD_INFO
174endif
175
176
177RELEASE_TYPE:=${RELEASE_TYPE}
178BUILD_USER:=${USER}
179BUILD_TOPDIR:=${TOP_DIR}
180BUILD_PERFORCE_REVISION:=$(PERFORCE_REVISION)
181BUILD_VERSION_PREFIX:=$(RELEASE_TYPE)$(MAJOR).$(MINOR).$(PATCH)
182BUILD_VERSION:=$(BUILD_VERSION_PREFIX).${BUILD_PERFORCE_REVISION}
183BUILD_DATE:=`date +%m-%d-%Y-%H%M%S`
184export BUILD_VERSION
185export BUILD_PERFORCE_REVISION
186export SRC_RELEASE_FILE_PREFIX ?= release.src.$(BUILD_VERSION_PREFIX)
187export INCLUDE_MAPLE_SDK_RELEASE ?= y
188
189V ?= 0
190ifeq (x"$(V)", x"0")
191 SILENT = -s
192 export SILENT
193 SILENT_BUILD=@
194endif
195
196# Include board support file
197# It exports variables such as CROSS_COMPILE
198ifneq ("$(BOARD)", "")
199 -include mk/boards/$(BOARD)/board.config
200endif
201
202ifneq ("$(OVEERIDE_GOAL)", "")
203all: $(OVEERIDE_GOAL)
204else
205all: print_maple_dir core sdn_agent
206endif
207
208clean: clean_core clean_agent clean_ocs_omci
209 $(SILENT_BUILD)rm -fr $(OUT_DIR)
210
211help_general:
212 @echo "make parameters:"
213 @echo " BOARD - board to build for"
214 @echo " BOARD_DIR - board directory"
215 @echo " V=<output_level> - =1-verbose command output, =2-makefile debug output"
216 @echo " EXTRA_TYPES - Low-level option. Space-delimited list of extra types without bcmolt_ prefix"
217 @echo " ENABLE_CLI - =n-exclude CLI support. Included by default"
218 @echo "make targets:"
219 @echo " all - build all subsystems. This is the default target"
220 @echo " core - build core subsystem (BAL standalone)"
221 @echo " sdn_agent - build agent subsystem (BAL SDN agent)"
222 @echo " maple_sdk_dir - create 3rdparty/maple/sdk"
223 @echo " maple_sdk - build maple sdk. Please set BOARD=<board> parameter"
224 @echo " maple_sdk_clean - clean maple sdk"
225 @echo " ing_sdk_dir - create 3rdparty/bcm-sdk/build"
226 @echo " ing_sdk - build 3rdparty/bcm-sdk/build"
227 @echo " ing_sdk_clean - clean 3rdparty/bcm-sdk/build"
228 @echo " ing_bcm_user - build the bcm_user binary (toolchains paths must be set correctly first)"
229 @echo " clean - clean everything"
230 @echo " clean_core - clean core subsystem"
231 @echo " clean_sdn_agent - clean SDN agent"
232 @echo " clean_ocs_omci - clean OCS OMCI stack"
233 @echo " clean_bcm_omci - clean Broadcom OMCI stack"
234 @echo " docs - generate reference document in html format"
235 @echo " docs_pdf - generate reference document in pdf format"
236 @echo " docs_clean - clean documents"
237 @echo " version_file - builds BAL version file"
238 @echo " bin_release_core - create BAL core binary release archive"
239 @echo " bin_release_sdn_agent - create BAL SDN agent binary release archive"
240 @echo " bin_release - create BAL core and SDN agent binary release archives"
241 @echo " src_release - create all BAL source release archives"
242 @echo ""
243 @echo "Optional make arguments:"
244 @echo ""
245 @echo " BUILD_NC_AGENT=n - do NOT build NETCONF agent into bcm_sdn_agent. Used with make target \"sdn_agent\""
246 @echo " TEST_SW_UTIL_LOOPBACK=y - stub out the switch utils"
247 @echo ""
248
249
250help: help_general help_core
251
252.PHONY: version_file
253
254version_file:
255 @echo " Generating $@"
256 @echo "/*************************************************************" > $(TMP_BAL_VERSION_H)
257 @echo " * DO NOT EDIT! THIS FILE WAS AUTO GENERATED. DO NOT EDIT! *" >> $(TMP_BAL_VERSION_H)
258 @echo " *************************************************************/" >> $(TMP_BAL_VERSION_H)
259 @echo " wrote header..."
260 @$(BUILD_TOPDIR)/tools/copyright_tools/insert_copyright.pl -t c -l $(BUILD_TOPDIR)/COPYRIGHT >> $(TMP_BAL_VERSION_H)
261 @echo "#if !defined(BAL_VERSION_H)" >> $(TMP_BAL_VERSION_H)
262 @echo "#define BAL_VERSION_H" >> $(TMP_BAL_VERSION_H)
263 @echo "" >> $(TMP_BAL_VERSION_H)
264 @echo "#define BAL_VERSION \"${BUILD_VERSION}\"" >> $(TMP_BAL_VERSION_H)
265 @echo "#define BAL_VERSION_STR_LEN (`echo ${BUILD_VERSION} | wc -c`)" >> $(TMP_BAL_VERSION_H)
266 @echo "" >> $(TMP_BAL_VERSION_H)
267 @echo "#define BAL_BUILD_DATE \"`date`\"" >> $(TMP_BAL_VERSION_H)
268 @echo "#define BAL_BUILD_INFO \"${BUILD_INFO}\"" >> $(TMP_BAL_VERSION_H)
269 @echo "" >> $(TMP_BAL_VERSION_H)
270 @echo "#endif /* BAL_VERSION_H */" >> $(TMP_BAL_VERSION_H)
271 @diff $(TMP_BAL_VERSION_H) $(BAL_VERSION_H) > /dev/null; \
272 if [ $$? -ne 0 ]; then \
273 mv -f $(TMP_BAL_VERSION_H) $(BAL_VERSION_H); \
274 fi
275
276.PHONY: overlay_bal_maple_scripts
277
278overlay_bal_maple_scripts:
279 @echo "Creating and Overlaying BAL-specific svk_init.sh and trx_init.sh onto maple fs"
280 @echo "(in $(LOCAL_MAPLE_SDK_DIR)/build/fs/)"
281 @cp -f $(LOCAL_MAPLE_SDK_DIR)/host_customized/board/wrx/fs/svk_init.sh ~/svk_init.sh
282 @cat ~/svk_init.sh | sed s/".\/bcm_user_appl"/'.\/bcm_user_appl < trx_init.sh \&\& .\/bcm_user_appl'/g > ~/svk_init_for_bal.sh
283 @cat ~/svk_init.sh | sed s/".\/bcm_user_appl"/'.\/bcm_user_appl < trx_init.sh'/g > ~/svk_init_for_bal_startup.sh
284 @mkdir -p $(LOCAL_MAPLE_SDK_DIR)/build/fs/
285 @mv -f ~/svk_init_for_bal.sh $(LOCAL_MAPLE_SDK_DIR)/build/fs/svk_init.sh
286 @mv -f ~/svk_init_for_bal_startup.sh $(LOCAL_MAPLE_SDK_DIR)/build/fs/svk_init_startup.sh
287 @chmod 755 $(LOCAL_MAPLE_SDK_DIR)/build/fs/svk_init.sh
288 @chmod 755 $(LOCAL_MAPLE_SDK_DIR)/build/fs/svk_init_startup.sh
289 @cp -f $(TOP_DIR)/scripts/trx_init.sh $(LOCAL_MAPLE_SDK_DIR)/build/fs/.
290 @rm ~/svk_init.sh
291
292.PHONY:
293
294.PHONY: sdn_agent
295sdn_agent: version_file build_sdn_agent
296
297.PHONY: build_sdn_agent
298build_sdn_agent: build_agent
299 $(SILENT_BUILD)mv $(TOP_DIR)/build/agent/3rdparty/indigo/ofpal_of_agent $(TOP_DIR)/build/agent/bcm_sdn_agent
300 $(SILENT_BUILD)mk/create_artifacts.sh
301
302.PHONY: ing_bcm_user
303
304ing_bcm_user:
305 @echo "Building ING bcm.user"
306 @pushd 3rdparty/bcm-sdk/build/sdk-all-6.4.4/systems/linux/user/gto-2_6 && make && popd
307
308
309# The following variables are only set if they have not been set
310# previously or passed in.
311
312.PHONY: docs
313docs: docs_$(DOCS_SUBSYSTEM)
314
315docs_pdf: docs_$(DOCS_SUBSYSTEM)
316 $(SILENT_BUILD)$(MAKE) -C $(OUT_DOCS_DIR)/latex
317
318docs_clean:
319 $(SILENT_BUILD)$(BOLD_PRINT) "Cleaning docs"
320 $(SILENT_BUILD)rm -fr $(OUT_DOCS_DIR)
321
322clobber: clean docs_clean
323
324.PHONY: print_maple_dir
325
326print_maple_dir:
327 @echo "Using MAPLE from $(MAPLE_SDK_DIR) copied to $(LOCAL_MAPLE_SDK_DIR)"
328
329core: version_file build_core
330 $(SILENT_BUILD)export BUILD_NC_AGENT=n;\
331 export BUILD_OF_AGENT=n;\
332 mk/create_artifacts.sh
333
334%_core:
335 $(SILENT_BUILD)$(MAKE) $(SILENT) SUBSYSTEM=core -f $(MAKE_DIR)/Makefile.main BUILD_NC_AGENT=n $@
336
337agent: version_file build_agent
338
339%_agent:
340 $(SILENT_BUILD)$(MAKE) $(SILENT) SUBSYSTEM=agent -f $(MAKE_DIR)/Makefile.main $@
341
342.PHONY: bin_release_sdn_agent
343bin_release_sdn_agent: bin_release_agent
344
345.PHONY: bin_release
346bin_release: bin_release_core bin_release_agent
347
348.PHONY: maple_sdk_devel_to_release
349
350maple_sdk_devel_to_release:
351ifneq ("$(RELEASE_BUILD)", "y")
352 $(SILENT_BUILD)if [ ! -f $(MAPLE_SDK_DIR)/build/maple/host/fs/bcm68620_boot.bin ]; then \
353 echo !!! Build maple first;\
354 echo make -C $(MAPLE_SDK_DIR) BOARD=wrx;\
355 exit -1;\
356 fi
357 $(SILENT_BUILD)cd $(MAPLE_SDK_DIR) && rm -fr release && scripts/rel_delivery.sh $(MAPLE_REL_DELIVERY_PREFIX)
358 $(SILENT_BUILD)rm -fr $(LOCAL_MAPLE_SDK_DIR)
359endif
360 $(SILENT_BUILD)mkdir -p $(LOCAL_MAPLE_SDK_DIR)
361 $(SILENT_BUILD)cp -ar $(MAPLE_SDK_DIR)/release/* $(LOCAL_MAPLE_SDK_DIR)/
362ifneq ("$(RELEASE_BUILD)", "y")
363 $(SILENT_BUILD)cp $(MAPLE_SDK_DIR)/make/bcm68620/lint.sh $(LOCAL_MAPLE_SDK_DIR)/make/bcm68620/
364endif
365
366.PHONY: maple_sdk_dir
367maple_sdk_dir: maple_sdk_devel_to_release
368 $(SILENT_BUILD)if [ ! -f $(LOCAL_MAPLE_SDK_DIR)/embedded_binaries/bcm68620_boot.bin ]; then \
369 echo !!! $(LOCAL_MAPLE_SDK_DIR)/embedded_binaries/bcm68620_boot.bin is absent;\
370 echo !!! Please copy BCM68620 SDK release to $(LOCAL_MAPLE_SDK_DIR);\
371 exit -1;\
372 fi
373 $(SILENT_BUILD)mkdir -p src/common/os_abstraction
374 $(SILENT_BUILD)rm -fr src/common/os_abstraction/*
375 $(SILENT_BUILD)cd src/common/os_abstraction && ln -s ../../../$(LOCAL_MAPLE_SDK_DIR)/host_customized/os_abstraction/* .
376 $(SILENT_BUILD)rm -f src/common/os_abstraction/bcmos_platform.h
377
378src_release:
379 $(SILENT_BUILD)$(MAKE_DIR)/src_release.sh
380
381.PHONY: maple_sdk
382maple_sdk: maple_sdk_build overlay_bal_maple_scripts
383
384maple_sdk_build:
385 $(SILENT_BUILD)rm -fr $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build/output/*
386 $(SILENT_BUILD)cd $(LOCAL_MAPLE_SDK_DIR) && \
387 unset OUT_DIR && \
388 BOARD=$(MAPLE_BOARD) BOARD_DIR=$(MAPLE_BOARD_DIR) $(MAKE) $(SILENT)
389ifeq ("$(BOARD)", "")
390 $(SILENT_BUILD)mkdir -p $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build/output/
391 $(SILENT_BUILD)find $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR) -name 'lib*.a' -exec ln -s \{\} $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build/output/ 2> /dev/null \;
392 $(SILENT_BUILD)rm -f $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build/.maple_board_dir
393else
394 $(SILENT_BUILD)echo $(MAPLE_BOARD_DIR) > $(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build/.maple_board_dir
395endif
396
397maple_sdk_clean:
398 $(SILENT_BUILD)OUT_DIR=$(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build OUT_DIR_BASE=$(TOP_DIR)/$(LOCAL_MAPLE_SDK_DIR)/build \
399 BOARD_DIR=$(MAPLE_BOARD_DIR) $(MAKE) $(SILENT) -C $(LOCAL_MAPLE_SDK_DIR) TOP_DIR=$(TOP_DIR)/3rdparty/maple/sdk \
400 BOARD=$(MAPLE_BOARD) clean
401
402ing_sdk_dir:
403 $(SILENT_BUILD)$(ING_SDK_TOP_DIR)/make_ing_dir.sh
404
405ing_sdk:
406 $(SILENT_BUILD)$(MAKE) -C $(ING_SDK_TOP_DIR) -f Makefile.sdk sdk
407
408ing_sdk_clean:
409ifeq ($(ING_SDK_DEFAULT_DIR), $(ING_SDK_DIR))
410 $(SILENT_BUILD)rm -fr $(ING_SDK_DIR)
411else
412 $(SILENT_BUILD)$(MAKE) -C $(ING_SDK_DIR) clean
413endif
414
415clean_ocs_omci:
416 $(SILENT_BUILD)$(MAKE) -C $(TOP_DIR)/3rdparty/ocs_omci clean
417
418#clean_bcm_omci:
419# $(SILENT_BUILD)$(MAKE) -C $(TOP_DIR)/3rdparty/ocs_omci clean
420
421.PHONY: clean_sdn_agent
422clean_sdn_agent: clean_agent
423
424print-% : ; @echo $* = $($*)
425