nanohub: isolate shared variant config in a separate file
Bug: 29635686
Change-Id: Iad753736ecea013ef5233d913b48140168f5443a
Signed-off-by: Alexey Polyudov <apolyudov@google.com>
diff --git a/firmware/app/app.mk b/firmware/app/app.mk
index 2ace2d2..c1cadc4 100644
--- a/firmware/app/app.mk
+++ b/firmware/app/app.mk
@@ -31,19 +31,37 @@
PREFIX = $(CROSS_COMPILE)
TOOLCHAIN_DIR = $(shell dirname `which $(CROSS_COMPILE)gcc`)/..
+# NANOHUB_DIR is relative to CWD (which is always APP Makefile dir)
+
NANOAPP_POSTPROCESS := $(NANOHUB_DIR)/../util/nanoapp_postprocess/nanoapp_postprocess
NANOAPP_SIGN := $(NANOHUB_DIR)/../util/nanoapp_sign/nanoapp_sign
-VARIANT ?= lunchbox
-PLATFORM ?= stm32
-CHIP ?= stm32f411
-CPU ?= cortexm4
+# TOP_RELPATH is ANDROID_TOP relative to NANOHUB_DIR
+TOP_RELPATH := ../../../..
+TOP_ABSPATH := $(realpath $(NANOHUB_DIR)/$(TOP_RELPATH))
+# for local variants there is always a path; for out-of-tree variants there may be
+# - a $(VARIANT) soft link under firmware/variant subdir, or
+# - VARIANT_PATH must be defined as ANDROID_TOP-relative variant path in APP Makefile
VARIANT_PATH ?= device/google/contexthub/firmware/variant/$(VARIANT)
-VARIANT_PATH := $(NANOHUB_DIR)/../../../../$(VARIANT_PATH)
+
+# $(VARIANT)_conf.mk may defines VARIANT_PATH, PLATFORM, CHIP, CPU, VARIANT
+include $(TOP_ABSPATH)/device/google/contexthub/firmware/variant/$(VARIANT)/$(VARIANT)_conf.mk
+# VARIANT_PATH from conf.mk is ANDROID_TOP relative
+
+# change VARIANT_PATH to become CWD-relative
+VARIANT_PATH := $(NANOHUB_DIR)/$(TOP_RELPATH)/$(VARIANT_PATH)
# all output goes here
-OUT ?= out/$(VARIANT)/app/$(BIN)
+ifndef OUT
+OUT:=out/nanohub/$(VARIANT)/app/$(BIN)
+else
+ifneq ($(filter $(TOP_ABSPATH)/out/target/product/%,$(OUT)),)
+# this looks like Android OUT env var; update it
+IMAGE_TARGET_OUT:=$(OUT)/vendor/firmware/$(BIN).napp
+OUT:=$(OUT)/nanohub/$(VARIANT)/app/$(BIN)
+endif
+endif
################################################################################
#
@@ -174,13 +192,18 @@
NANOHUB_KEY_PATH := $(NANOHUB_DIR)/os/platform/$(PLATFORM)/misc
-.PHONY: all
-all: $(OUT)/$(BIN).S $(OUT)/$(BIN).napp
+.PHONY: all clean sync
+all: $(OUT)/$(BIN).S $(OUT)/$(BIN).napp $(IMAGE_TARGET_OUT)
$(OUT)/$(BIN).napp : $(OUT)/$(UNSIGNED_BIN) $(NANOAPP_SIGN)
@mkdir -p $(dir $@)
$(NANOAPP_SIGN) -e $(NANOHUB_KEY_PATH)/debug.privkey \
-m $(NANOHUB_KEY_PATH)/debug.pubkey -s $< $@
+ifdef IMAGE_TARGET_OUT
+$(IMAGE_TARGET_OUT): $(OUT)/$(BIN).napp
+ mkdir -p $(dir $@)
+ cp $< $(IMAGE_TARGET_OUT)
+endif
ifeq ($(BIN_MODE),static)
$(OUT)/$(UNSIGNED_BIN) : $(OUT)/$(BIN).elf $(NANOAPP_POSTPROCESS)
@@ -262,6 +285,8 @@
# Clean targets ################################################################
-.PHONY: clean
clean :
rm -rf $(OUT)
+
+sync: $(OUT)/$(BIN).napp
+ adb push $< /vendor/firmware/$(BIN).napp
diff --git a/firmware/app/test0.app/Makefile b/firmware/app/test0.app/Makefile
index b5931d1..0747921 100644
--- a/firmware/app/test0.app/Makefile
+++ b/firmware/app/test0.app/Makefile
@@ -32,11 +32,10 @@
# Device configuration #########################################################
# select device variant for this app
-VARIANT_PATH = device/google/contexthub/firmware/variant/nucleo
-VARIANT = nucleo
+# if there is no path of the form $(NANOHUB_DIR)/variant/$(VARIANT), the
+# VARIANT_PATH variable must be set to ANDROID_TOP-relative valid path containing VARIANT subtree
-# setup variant parameters
-# PLATFORM, CPU, CHIP must match variant Makefile (located under VARIANT_PATH);
-# if not defined there, there is not need to specify them here either
+TARGET_PRODUCT ?= nucleo
+VARIANT := $(TARGET_PRODUCT)
include $(NANOHUB_DIR)/app/app.mk
diff --git a/firmware/app/test1.app/Makefile b/firmware/app/test1.app/Makefile
index b21c4ba..b7e224e 100644
--- a/firmware/app/test1.app/Makefile
+++ b/firmware/app/test1.app/Makefile
@@ -34,11 +34,10 @@
# Device configuration #########################################################
# select device variant for this app
-VARIANT_PATH = device/google/contexthub/firmware/variant/nucleo
-VARIANT = nucleo
+# if there is no path of the form $(NANOHUB_DIR)/variant/$(VARIANT), the
+# VARIANT_PATH variable must be set to ANDROID_TOP-relative valid path containing VARIANT subtree
-# setup variant parameters
-# PLATFORM, CPU, CHIP must match variant Makefile (located under VARIANT_PATH);
-# if not defined there, there is not need to specify them here either
+TARGET_PRODUCT ?= nucleo
+VARIANT := $(TARGET_PRODUCT)
include $(NANOHUB_DIR)/app/app.mk
diff --git a/firmware/variant/linux/Makefile b/firmware/variant/linux/Makefile
index 4dec406..9d87a8f 100644
--- a/firmware/variant/linux/Makefile
+++ b/firmware/variant/linux/Makefile
@@ -1,5 +1,5 @@
+include linux_conf.mk
+
SRC_PATH=../..
-VARIANT_PATH=src/variant/linux
-VARIANT=linux
include $(SRC_PATH)/src/variant/variant.mk
diff --git a/firmware/variant/linux/linux_conf.mk b/firmware/variant/linux/linux_conf.mk
new file mode 100644
index 0000000..5febed9
--- /dev/null
+++ b/firmware/variant/linux/linux_conf.mk
@@ -0,0 +1,10 @@
+# settings that apps and OS both want to know about variant
+
+VENDOR := google
+VARIANT := linux
+CPU := x86
+CHIP := x86
+PLATFORM := native
+
+# VARIANT_PATH is relative to ANDROID TOP
+VARIANT_PATH := device/google/contexthub/firmware/variant/$(VARIANT)
diff --git a/firmware/variant/lunchbox/Makefile b/firmware/variant/lunchbox/Makefile
index 3079098..8b63784 100644
--- a/firmware/variant/lunchbox/Makefile
+++ b/firmware/variant/lunchbox/Makefile
@@ -1,5 +1,5 @@
+include lunchbox_conf.mk
+
SRC_PATH=../..
-VARIANT_PATH=src/variant/lunchbox
-VARIANT=lunchbox
include $(SRC_PATH)/src/variant/variant.mk
diff --git a/firmware/variant/lunchbox/lunchbox_conf.mk b/firmware/variant/lunchbox/lunchbox_conf.mk
new file mode 100644
index 0000000..aac2014
--- /dev/null
+++ b/firmware/variant/lunchbox/lunchbox_conf.mk
@@ -0,0 +1,10 @@
+# settings that apps and OS both want to know about variant
+
+VENDOR := google
+VARIANT := lunchbox
+CPU := cortexm4
+CHIP := stm32f411
+PLATFORM := stm32
+
+# VARIANT_PATH is relative to ANDROID TOP
+VARIANT_PATH := device/google/contexthub/firmware/variant/$(VARIANT)
diff --git a/firmware/variant/nucleo/Makefile b/firmware/variant/nucleo/Makefile
index 872c73e..dcf074e 100644
--- a/firmware/variant/nucleo/Makefile
+++ b/firmware/variant/nucleo/Makefile
@@ -1,5 +1,5 @@
+include nucleo_conf.mk
+
SRC_PATH=../..
-VARIANT_PATH=src/variant/nucleo
-VARIANT=nucleo
include $(SRC_PATH)/src/variant/variant.mk
diff --git a/firmware/variant/nucleo/nucleo_conf.mk b/firmware/variant/nucleo/nucleo_conf.mk
new file mode 100644
index 0000000..33f7c98
--- /dev/null
+++ b/firmware/variant/nucleo/nucleo_conf.mk
@@ -0,0 +1,10 @@
+# settings that apps and OS both want to know about variant
+
+VENDOR := google
+VARIANT := nucleo
+CPU := cortexm4
+CHIP := stm32f411
+PLATFORM := stm32
+
+# VARIANT_PATH is relative to ANDROID TOP
+VARIANT_PATH := device/google/contexthub/firmware/variant/$(VARIANT)
diff --git a/firmware/variant/variant.mk b/firmware/variant/variant.mk
index 340f91c..2fd8e3d 100644
--- a/firmware/variant/variant.mk
+++ b/firmware/variant/variant.mk
@@ -1,7 +1,6 @@
PLATFORM?=stm32
CPU?=cortexm4
CHIP?=stm32f411
-OUT?=out
# SRC_PATH points to "firmware"; TOP_PATH is the abs path to top of andrlid tree
TOP_RELPATH := ../../../..
@@ -9,14 +8,37 @@
VARIANT_ABSPATH := $(TOP_ABSPATH)/$(VARIANT_PATH)
VARIANT_PATH := $(TOP_RELPATH)/$(VARIANT_PATH)
+ifndef OUT
+OUT:=out/nanohub/$(VARIANT)
+MAKE_OUT=$(VARIANT_PATH)/$(OUT)
+else
+ifneq ($(filter $(TOP_ABSPATH)/out/target/product/%,$(OUT)),)
+# this looks like Android OUT env var; update it
+OUT:=$(OUT)/nanohub/$(VARIANT)
+MAKE_OUT:=$(OUT)
+IMAGE_TARGET_OUT:=vendor/firmware/nanohub.full.bin
+endif
+endif
+
+.PHONY: all clean sync
+
all:
- make -C $(SRC_PATH) -f firmware.mk VARIANT=$(VARIANT) VARIANT_PATH=$(VARIANT_PATH) OUT=$(VARIANT_PATH)/$(OUT) PLATFORM=$(PLATFORM) CPU=$(CPU) CHIP=$(CHIP) $(EXTRA_ARGS)
+ make -C $(SRC_PATH) -f firmware.mk VARIANT=$(VARIANT) VARIANT_PATH=$(VARIANT_PATH) OUT=$(MAKE_OUT) PLATFORM=$(PLATFORM) CPU=$(CPU) CHIP=$(CHIP) $(EXTRA_ARGS)
ifdef IMAGE_OUT
cd $(VARIANT_ABSPATH) && cp $(OUT)/full.bin $(IMAGE_OUT)
endif
+ifdef IMAGE_TARGET_OUT
+ cd $(VARIANT_ABSPATH) && mkdir -p $(dir $(TOP_ABSPATH)/$(IMAGE_TARGET_OUT)) && cp $(OUT)/full.bin $(TOP_ABSPATH)/$(IMAGE_TARGET_OUT)
+endif
clean:
rm -rf $(OUT)
ifdef IMAGE_OUT
- rm $(IMAGE_OUT)
+ rm $(VARIANT_ABSPATH)/$(IMAGE_OUT)
endif
+ifdef IMAGE_TARGET_OUT
+ rm $(TOP_ABSPATH)/$(IMAGE_TARGET_OUT)
+endif
+
+sync:
+ adb push $(OUT)/full.bin /vendor/firmware/nanohub.full.bin