130 lines
3.6 KiB
Makefile
130 lines
3.6 KiB
Makefile
#
|
|
# Copyright (C) 2016 The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
|
|
#find build target
|
|
PLATFORM ?= stm32f4xx
|
|
CPU ?= cortexm4f
|
|
VARIANT ?= lunchbox
|
|
DEBUG ?= -DDEBUG
|
|
|
|
#bad words
|
|
BADWORDS += strcpy strcat atoi
|
|
BADWORDS += "rsaPrivOp=RSA private ops must never be compiled into firmware."
|
|
|
|
#find makefiles
|
|
MAKE_PLAT = misc/platform/$(PLATFORM)/Makefile
|
|
MAKE_CPU = misc/cpu/$(CPU)/Makefile
|
|
|
|
#link paths
|
|
ifdef VARIANT_PATH
|
|
LINK_PATH_MISC = $(VARIANT_PATH)/misc
|
|
LINK_PATH_SRC = $(VARIANT_PATH)/src
|
|
LINK_PATH_INC = $(VARIANT_PATH)/inc
|
|
else
|
|
LINK_PATH_MISC = misc/variant/$(VARIANT)
|
|
LINK_PATH_SRC = src/variant/$(VARIANT)
|
|
LINK_PATH_INC = inc/variant/$(VARIANT)
|
|
endif
|
|
|
|
#variant makefile
|
|
MAKE_VAR = $(LINK_PATH_MISC)/Makefile
|
|
|
|
#top make target
|
|
SRCS_os :=
|
|
SRCS_bl :=
|
|
DELIVERABLES :=
|
|
real: all
|
|
|
|
#include makefiles for plat and cpu
|
|
include $(MAKE_PLAT)
|
|
include $(MAKE_CPU)
|
|
include $(MAKE_VAR)
|
|
|
|
FLAGS += -Wall -Werror -Iinc -Ilinks -Iexternal/freebsd/inc -I../lib/include -fshort-double
|
|
#help avoid commmon embedded C mistakes
|
|
FLAGS += -Wmissing-declarations -Wlogical-op -Waddress -Wempty-body -Wpointer-arith -Wenum-compare -Wdouble-promotion -Wfloat-equal -Wshadow -fno-strict-aliasing
|
|
|
|
OSFLAGS += -g -ggdb3 -D_OS_BUILD_ -O2
|
|
APPFLAGS += -Os
|
|
|
|
#debug mode
|
|
FLAGS += $(DEBUG)
|
|
|
|
#bootloader pieces
|
|
SRCS_bl += ../lib/nanohub/sha2.c ../lib/nanohub/rsa.c ../lib/nanohub/aes.c src/seos.c
|
|
|
|
#frameworks
|
|
SRCS_os += src/printf.c src/timer.c src/seos.c src/heap.c src/slab.c src/spi.c src/trylock.c
|
|
SRCS_os += src/hostIntf.c src/hostIntfI2c.c src/hostIntfSpi.c src/nanohubCommand.c src/sensors.c src/syscall.c
|
|
SRCS_os += src/eventQ.c src/osApi.c src/appSec.c src/simpleQ.c src/floatRt.c
|
|
SRCS_os += src/algos/ap_hub_sync.c
|
|
|
|
#some help for bootloader
|
|
SRCS_bl += src/printf.c
|
|
|
|
ifndef PLATFORM_HAS_HARDWARE_CRC
|
|
SRCS_os += ../lib/nanohub/softcrc.c
|
|
endif
|
|
|
|
#app code
|
|
include $(wildcard app/*/Makefile)
|
|
|
|
|
|
#extra deps
|
|
DEPS += $(wildcard app/*.h)
|
|
DEPS += $(wildcard inc/*.h)
|
|
DEPS += Makefile $(MAKE_PLAT) $(MAKE_CPU) $(MAKE_VAR)
|
|
|
|
all: symlinks $(DELIVERABLES)
|
|
|
|
symlinks: links/p_$(PLATFORM) links/c_$(CPU) links/v_$(VARIANT)
|
|
|
|
links/p_$(PLATFORM):
|
|
rm -rf links/plat links/p_*
|
|
mkdir -p links/plat
|
|
ln -s ../../misc/platform/$(PLATFORM) links/plat/misc
|
|
ln -s ../../src/platform/$(PLATFORM) links/plat/src
|
|
ln -s ../../inc/platform/$(PLATFORM) links/plat/inc
|
|
touch links/p_$(PLATFORM)
|
|
|
|
links/c_$(CPU):
|
|
rm -rf links/cpu links/c_*
|
|
mkdir -p links/cpu
|
|
ln -s ../../misc/cpu/$(CPU) links/cpu/misc
|
|
ln -s ../../src/cpu/$(CPU) links/cpu/src
|
|
ln -s ../../inc/cpu/$(CPU) links/cpu/inc
|
|
touch links/c_$(CPU)
|
|
|
|
links/v_$(VARIANT):
|
|
rm -rf links/variant links/v_*
|
|
mkdir -p links/variant
|
|
ln -s ../../$(LINK_PATH_MISC) links/variant/misc
|
|
ln -s ../../$(LINK_PATH_SRC) links/variant/src
|
|
ln -s ../../$(LINK_PATH_INC) links/variant/inc
|
|
touch links/v_$(VARIANT)
|
|
|
|
%.unchecked.elf: symlinks $(SRCS_$*) $(DEPS)
|
|
$(GCC) -o $@ $(SRCS_$*) $(OSFLAGS) $(OSFLAGS_$*) $(FLAGS) -lgcc -nostdlib
|
|
|
|
%.checked.elf : %.unchecked.elf symcheck.sh
|
|
./symcheck.sh $< $@ $(BADWORDS)
|
|
|
|
full.bin: $(BL_FILE) $(OS_FILE)
|
|
cat $(BL_FILE) $(OS_FILE) > $@
|
|
|
|
clean:
|
|
rm -rf $(DELIVERABLES) os.elf bootloader.elf links $(CLEANFILES)
|
|
|