1#
2# Copyright (C) 2016 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#      http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16
17#find build target
18PLATFORM ?= stm32
19CHIP ?= stm32f411
20CPU ?= cortexm4
21VARIANT ?= lunchbox
22DEBUG ?= -DDEBUG
23OUT := out/nanohub/$(VARIANT)
24
25#bad words
26BADWORDS += strcpy strcat atoi
27BADWORDS += "rsaPrivOp=RSA private ops must never be compiled into firmware."
28
29#find makefiles
30MAKE_PLAT = os/platform/$(PLATFORM)/$(PLATFORM).mk
31MAKE_CPU = os/cpu/$(CPU)/$(CPU).mk
32
33ifndef VARIANT_PATH
34VARIANT_PATH := variant/$(VARIANT)
35endif
36
37MAKE_VAR = $(VARIANT_PATH)/$(VARIANT).mk
38
39#top make target
40SRCS_os :=
41SRCS_bl :=
42DELIVERABLES :=
43
44.PHONY: real all
45real: all
46
47#include makefiles for plat and cpu
48include $(MAKE_PLAT)
49include $(MAKE_CPU)
50include $(MAKE_VAR)
51
52FLAGS += -Ios/algos
53FLAGS += -Ios/cpu/$(CPU)/inc
54FLAGS += -Ios/inc
55FLAGS += -Ios/platform/$(PLATFORM)/inc
56FLAGS += -I$(VARIANT_PATH)/inc
57FLAGS += -Iexternal/freebsd/inc
58FLAGS += -I../lib/include
59FLAGS += -I../../../../system/chre/chre_api/include/chre_api
60
61FLAGS += -Wall -Werror
62#help avoid commmon embedded C mistakes
63FLAGS += -Wmissing-declarations -Wlogical-op -Waddress -Wempty-body -Wpointer-arith -Wenum-compare -Wdouble-promotion -Wfloat-equal -Wshadow -fno-strict-aliasing
64
65OSFLAGS += -g -ggdb3 -D_OS_BUILD_ -O2
66OSFLAGS_os += -DUSE_PRINTF_FLAG_CHARS
67
68#debug mode
69FLAGS += $(DEBUG)
70
71include firmware_conf.mk
72
73FLAGS += $(COMMON_FLAGS)
74
75#bootloader pieces
76SRCS_bl += ../lib/nanohub/sha2.c ../lib/nanohub/rsa.c ../lib/nanohub/aes.c os/core/seos.c
77
78#frameworks
79SRCS_os += os/core/printf.c os/core/timer.c os/core/seos.c os/core/heap.c os/core/slab.c os/core/spi.c os/core/trylock.c
80SRCS_os += os/core/hostIntf.c os/core/hostIntfI2c.c os/core/hostIntfSpi.c os/core/nanohubCommand.c os/core/sensors.c os/core/syscall.c
81SRCS_os += os/core/eventQ.c os/core/osApi.c os/core/appSec.c os/core/simpleQ.c os/core/floatRt.c os/core/nanohub_chre.c
82SRCS_os += os/algos/ap_hub_sync.c
83SRCS_bl += os/core/bl.c
84
85#some help for bootloader
86SRCS_bl += os/core/printf.c
87
88SRCS_os += ../lib/nanohub/softcrc.c
89
90#extra deps
91DEPS += $(wildcard inc/*.h)
92DEPS += $(wildcard ../inc/*.h)
93DEPS += $(wildcard ../inc/chre/*.h)
94DEPS += $(wildcard $(VARIANT_PATH)/inc/variant/*.h)
95DEPS += firmware.mk firmware_conf.mk $(MAKE_PLAT) $(MAKE_CPU) $(MAKE_VAR)
96DELIVERABLES += $(OUT)/full.bin
97
98all: $(DELIVERABLES)
99
100$(OUT)/bl.unchecked.elf: $(SRCS_bl) $(DEPS)
101	mkdir -p $(dir $@)
102	$(GCC) -o $@ $(SRCS_bl) $(OSFLAGS) $(OSFLAGS_bl) $(FLAGS)
103
104$(OUT)/os.unchecked.elf: $(SRCS_os) $(DEPS)
105	mkdir -p $(dir $@)
106	$(GCC) -o $@ $(SRCS_os) $(OSFLAGS) $(OSFLAGS_os) $(FLAGS)
107
108$(OUT)/%.checked.elf : $(OUT)/%.unchecked.elf  symcheck.sh
109	mkdir -p $(dir $@)
110	./symcheck.sh $< $@ $(BADWORDS)
111
112$(OUT)/full.bin: $(BL_FILE) $(OS_FILE)
113	mkdir -p $(dir $@)
114	cat $(BL_FILE) $(OS_FILE) > $@
115
116clean:
117	rm -rf $(OUT)
118
119.SECONDARY: $(OUT)/os.checked.elf
120