#
# 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)

