| # | |
| # Copyright (c) 2017, The OpenThread Authors. | |
| # All rights reserved. | |
| # | |
| # Redistribution and use in source and binary forms, with or without | |
| # modification, are permitted provided that the following conditions are met: | |
| # 1. Redistributions of source code must retain the above copyright | |
| # notice, this list of conditions and the following disclaimer. | |
| # 2. Redistributions in binary form must reproduce the above copyright | |
| # notice, this list of conditions and the following disclaimer in the | |
| # documentation and/or other materials provided with the distribution. | |
| # 3. Neither the name of the copyright holder nor the | |
| # names of its contributors may be used to endorse or promote products | |
| # derived from this software without specific prior written permission. | |
| # | |
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
| # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
| # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | |
| # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
| # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
| # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
| # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
| # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
| # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
| # POSSIBILITY OF SUCH DAMAGE. | |
| # | |
| .NOTPARALLEL: | |
| AR = arc-elf32-ar | |
| CCAS = arc-elf32-gcc | |
| CPP = arc-elf32-cpp | |
| CC = arc-elf32-gcc | |
| CXX = arc-elf32-g++ | |
| LD = arc-elf32-gcc | |
| STRIP = arc-elf32-strip | |
| NM = arc-elf32-nm | |
| RANLIB = arc-elf32-ranlib | |
| OBJCOPY = arc-elf32-objcopy | |
| BuildJobs ?= 10 | |
| configure_OPTIONS = \ | |
| --enable-cli-app=all \ | |
| --enable-ncp-app=all \ | |
| --with-ncp-bus=uart \ | |
| --with-examples=emsk \ | |
| --with-platform-info=EMSK \ | |
| $(NULL) | |
| ifeq ($(CERT_LOG),1) | |
| configure_OPTIONS += --enable-cert-log | |
| endif | |
| ifeq ($(COMMISSIONER),1) | |
| configure_OPTIONS += --enable-commissioner | |
| endif | |
| ifeq ($(JOINER),1) | |
| configure_OPTIONS += --enable-joiner | |
| endif | |
| ifeq ($(DHCP6_SERVER),1) | |
| configure_OPTIONS += --enable-dhcp6-server | |
| endif | |
| ifeq ($(DHCP6_CLIENT),1) | |
| configure_OPTIONS += --enable-dhcp6-client | |
| endif | |
| TopSourceDir := $(dir $(shell readlink $(firstword $(MAKEFILE_LIST)))).. | |
| AbsTopSourceDir := $(dir $(realpath $(firstword $(MAKEFILE_LIST)))).. | |
| CONFIG_FILE = OPENTHREAD_PROJECT_CORE_CONFIG_FILE='\"openthread-core-emsk-config.h\"' | |
| CONFIG_FILE_PATH = $(AbsTopSourceDir)/examples/platforms/emsk/ | |
| COMMONCFLAGS := \ | |
| -fdata-sections \ | |
| -ffunction-sections \ | |
| -Os \ | |
| -g \ | |
| -D$(CONFIG_FILE) \ | |
| -I$(CONFIG_FILE_PATH) \ | |
| $(NULL) | |
| CPPFLAGS += \ | |
| $(COMMONCFLAGS) \ | |
| $(target_CPPFLAGS) \ | |
| $(NULL) | |
| CFLAGS += \ | |
| $(COMMONCFLAGS) \ | |
| $(target_CFLAGS) \ | |
| $(NULL) | |
| CXXFLAGS += \ | |
| $(COMMONCFLAGS) \ | |
| $(target_CXXFLAGS) \ | |
| -fno-exceptions \ | |
| -fno-rtti \ | |
| $(NULL) | |
| CCASFLAGS += \ | |
| $(COMMONCCASFLAGS) \ | |
| $(target_CCASFLAGS) \ | |
| $(NULL) | |
| LDFLAGS += \ | |
| $(COMMONCFLAGS) \ | |
| $(target_LDFLAGS) \ | |
| -nostartfiles \ | |
| -specs=nano.specs \ | |
| -Wl,--gc-sections \ | |
| -Wl,-Map=map.map \ | |
| -Wl,--defsym=_STACKSIZE=524288 \ | |
| -Wl,--defsym=_HEAPSIZE=524288 \ | |
| $(NULL) | |
| ECHO := @echo | |
| MAKE := make | |
| MKDIR_P := mkdir -p | |
| LN_S := ln -s | |
| RM_F := rm -f | |
| INSTALL := /usr/bin/install | |
| INSTALLFLAGS := -p | |
| BuildPath = build | |
| TopBuildDir = $(BuildPath) | |
| AbsTopBuildDir = $(PWD)/$(TopBuildDir) | |
| ResultPath = output | |
| TopResultDir = $(ResultPath) | |
| AbsTopResultDir = $(PWD)/$(TopResultDir) | |
| TargetTuple = emsk | |
| ARCHS = arcem11d | |
| TopTargetLibDir = $(TopResultDir)/$(TargetTuple)/lib | |
| ifndef BuildJobs | |
| BuildJobs := $(shell getconf _NPROCESSORS_ONLN) | |
| endif | |
| JOBSFLAG := -j$(BuildJobs) | |
| # | |
| # configure-arch <arch> | |
| # | |
| # Configure OpenThread for the specified architecture. | |
| # | |
| # arch - The architecture to configure. | |
| # | |
| define configure-arch | |
| $(ECHO) " CONFIG $(TargetTuple)..." | |
| (cd $(BuildPath)/$(TargetTuple) && $(AbsTopSourceDir)/configure \ | |
| INSTALL="$(INSTALL) $(INSTALLFLAGS)" \ | |
| CPP="$(CPP)" CC="$(CC)" CXX="$(CXX)" CCAS="$(CCAS)" OBJC="$(OBJC)" OBJCXX="$(OBJCXX)" AR="$(AR)" RANLIB="$(RANLIB)" NM="$(NM)" STRIP="$(STRIP)" CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" CCASFLAGS="$(CCASFLAGS)" LDFLAGS="$(LDFLAGS)" \ | |
| --host=arc-elf32 \ | |
| --prefix=/ \ | |
| --exec-prefix=/$(TargetTuple) \ | |
| $(configure_OPTIONS)) | |
| endef # configure-arch | |
| # | |
| # build-arch <arch> | |
| # | |
| # Build the OpenThread intermediate build products for the specified | |
| # architecture. | |
| # | |
| # arch - The architecture to build. | |
| # | |
| define build-arch | |
| $(ECHO) " BUILD $(TargetTuple)" | |
| $(MAKE) $(JOBSFLAG) -C $(BuildPath)/$(TargetTuple) --no-print-directory \ | |
| all | |
| endef # build-arch | |
| # | |
| # stage-arch <arch> | |
| # | |
| # Stage (install) the OpenThread final build products for the specified | |
| # architecture. | |
| # | |
| # arch - The architecture to stage. | |
| # | |
| define stage-arch | |
| $(ECHO) " STAGE $(TargetTuple)" | |
| $(MAKE) $(JOBSFLAG) -C $(BuildPath)/$(TargetTuple) --no-print-directory \ | |
| DESTDIR=$(AbsTopResultDir) \ | |
| install | |
| endef # stage-arch | |
| # | |
| # ARCH_template <arch> | |
| # | |
| # Define macros, targets and rules to configure, build, and stage the | |
| # OpenThread for a single architecture. | |
| # | |
| # arch - The architecture to instantiate the template for. | |
| # | |
| define ARCH_template | |
| CONFIGURE_TARGETS += configure-$(1) | |
| BUILD_TARGETS += do-build-$(1) | |
| STAGE_TARGETS += stage-$(1) | |
| BUILD_DIRS += $(BuildPath)/$(TargetTuple) | |
| DIRECTORIES += $(BuildPath)/$(TargetTuple) | |
| configure-$(1): target_CPPFLAGS=$($(1)_target_CPPFLAGS) | |
| configure-$(1): target_CFLAGS=$($(1)_target_CFLAGS) | |
| configure-$(1): target_CXXFLAGS=$($(1)_target_CXXFLAGS) | |
| configure-$(1): target_LDFLAGS=$($(1)_target_LDFLAGS) | |
| configure-$(1): target_CCASFLAGS=$($(1)_target_CCASFLAGS) | |
| configure-$(1): $(BuildPath)/$(TargetTuple)/config.status | |
| $(BuildPath)/$(TargetTuple)/config.status: | $(BuildPath)/$(TargetTuple) | |
| $$(call configure-arch,$(1)) | |
| do-build-$(1): configure-$(1) | |
| do-build-$(1): | |
| +$$(call build-arch,$(1)) | |
| stage-$(1): do-build-$(1) | |
| stage-$(1): | $(TopResultDir) | |
| $$(call stage-arch,$(1)) | |
| $(1): stage-$(1) | |
| endef # ARCH_template | |
| .DEFAULT_GOAL := all | |
| all: stage | |
| # | |
| # EMSK2.3 arcem11d | |
| # | |
| # Common options | |
| MKDEP_OPT = -MMD -MT $@ -MF $@.d | |
| OPT_OLEVEL = -O0 | |
| # Include EMSK BSP folder | |
| ALL_INCLUDES = -I$(top_srcdir)/third_party/synopsys/embarc_emsk_bsp \ | |
| -I$(top_srcdir)/examples/platforms/emsk \ | |
| -I$(top_srcdir)/third_party/synopsys/embarc_emsk_bsp/library/clib | |
| # COMMON_COMPILE_OPT = -mno-sdata $(OPT_OLEVEL) \ | |
| $(ALL_INCLUDES) $(MKDEP_OPT) | |
| # Core options of arcem11d in EMSK2.3 from ARC TCF file | |
| COMMON_CORE_OPT_GNU = -mcpu=em4_fpuda \ | |
| -mlittle-endian \ | |
| -mcode-density \ | |
| -mdiv-rem \ | |
| -mswap \ | |
| -mnorm \ | |
| -mmpy-option=6 \ | |
| -mbarrel-shifter \ | |
| -mfpu=fpuda_all \ | |
| --param l1-cache-size=16384 \ | |
| --param l1-cache-line-size=32 | |
| CCORE_OPT_GNU += $(COMMON_CORE_OPT_GNU) | |
| CXXCORE_OPT_GNU += $(COMMON_CORE_OPT_GNU) | |
| ACORE_OPT_GNU += $(COMMON_CORE_OPT_GNU) | |
| LCORE_OPT_GNU += $(COMMON_CORE_OPT_GNU) | |
| # C/CPP/ASM/Linker Options | |
| COMPILE_OPT += $(CCORE_OPT_GNU) \ | |
| $(COMMON_COMPILE_OPT) -std=gnu99 | |
| CXX_COMPILE_OPT += $(CXXCORE_OPT_GNU) \ | |
| $(COMMON_COMPILE_OPT) | |
| ASM_OPT += $(ACORE_OPT_GNU) \ | |
| $(COMMON_COMPILE_OPT) -x assembler-with-cpp | |
| LINK_OPT += $(LCORE_OPT_GNU) \ | |
| -mno-sdata -nostartfiles --verbose | |
| arcem11d_target_ABI = arcem11d | |
| arcem11d_target_CPPFLAGS = $(CXX_COMPILE_OPT) | |
| arcem11d_target_CFLAGS = $(COMPILE_OPT) | |
| arcem11d_target_CXXFLAGS = $(CXX_COMPILE_OPT) | |
| arcem11d_target_CCASFLAGS = $(ASM_OPT) | |
| arcem11d_target_LDFLAGS = $(LINK_OPT) | |
| # Instantiate an architecture-specific build template for each target | |
| # architecture. | |
| $(foreach arch,$(ARCHS),$(eval $(call ARCH_template,$(arch)))) | |
| # | |
| # Common / Finalization | |
| # | |
| configure: $(CONFIGURE_TARGETS) | |
| build: $(BUILD_TARGETS) | |
| stage: $(STAGE_TARGETS) | |
| DIRECTORIES = $(TopResultDir) $(TopResultDir)/$(TargetTuple)/lib $(BUILD_DIRS) | |
| CLEAN_DIRS = $(TopResultDir) $(BUILD_DIRS) | |
| all: stage | |
| $(DIRECTORIES): | |
| $(ECHO) " MKDIR $@" | |
| @$(MKDIR_P) "$@" | |
| clean: | |
| $(ECHO) " CLEAN" | |
| @$(RM_F) -r $(CLEAN_DIRS) | |
| help: | |
| $(ECHO) "Simply type 'make -f $(firstword $(MAKEFILE_LIST))' to build OpenThread for the following " | |
| $(ECHO) "architectures: " | |
| $(ECHO) "" | |
| $(ECHO) " $(ARCHS)" | |
| $(ECHO) "" | |
| $(ECHO) "To build only a particular architecture, specify: " | |
| $(ECHO) "" | |
| $(ECHO) " make -f $(firstword $(MAKEFILE_LIST)) <architecture>" | |
| $(ECHO) "" |