Commit 3a66ae51 authored by Daniel Friesel's avatar Daniel Friesel
Browse files

Expose configuration via Kconfig

parent e12d6d52
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
*.o
*.su
/.config
/.config.old
/build
/Kconfig
/src/app/aemr/main.cc
/src/app/prototest/nanopb.pb.h
/src/app/prototest/nanopb.pb.cc
+156 −53
Original line number Diff line number Diff line
default: build/system.elf
# Only load .config when app/arch are not specified on commandline
ifneq (${app}, )
	CONFIG_app = ${app}
else
	-include .config
endif

ifneq (${arch}, )
	CONFIG_arch = ${arch}
endif

# Make cannot include "foo"/Makefile.inc, so remove quotes from config entries
quote="
app_dir = $(subst ${quote},,${CONFIG_app})
arch_dir = $(subst ${quote},,${CONFIG_arch})

INCLUDES = -Iinclude -Iinclude/arch/${arch}
INCLUDES = -Iinclude -Iinclude/arch/${arch_dir}
COMMON_FLAGS = -g -Os -Wall -Wextra
CFLAGS = -std=c99
CXXFLAGS = -std=c++14 -fno-rtti -fno-threadsafe-statics -fno-exceptions

QUIET = @

ASM_TARGETS =
C_TARGETS =
CXX_TARGETS = src/app/${app}/main.cc src/os/object/cpp_helpers.cc src/os/object/outputstream.cc

QUIET = @
CXX_TARGETS = src/app/${app_dir}/main.cc src/os/object/cpp_helpers.cc src/os/object/outputstream.cc

ifneq (${verbose}, )
ifdef verbose
	QUIET =
endif

ifneq (${app_dir}, )
	include src/app/${app_dir}/Makefile.inc
endif

ifneq (${stack_usage}, )
	COMMON_FLAGS += -fstack-usage
endif

ifneq (${app}, )
	include src/app/${app}/Makefile.inc
endif
# Allow .config driver entries to be overriddenvia commandline / environment

ifneq ($(findstring dummy,${drivers}), )
	CONFIG_driver_dummy = y
endif

ifneq ($(findstring lm75,${drivers}), )
	CONFIG_driver_lm75 = y
endif

ifneq ($(findstring s5851a,${drivers}), )
	CONFIG_driver_s5851a = y
endif

ifneq ($(findstring am2320,${drivers}), )
	CONFIG_driver_am2320 = y
endif

ifneq ($(findstring bme280,${drivers}), )
	CONFIG_driver_bme280 = y
endif

ifneq ($(findstring bme680,${drivers}), )
	CONFIG_driver_bme680 = y
endif

ifneq ($(findstring ccs811,${drivers}), )
	CONFIG_driver_ccs811 = y
endif

ifneq ($(findstring eeprom24lc64,${drivers}), )
	CONFIG_driver_eeprom24lc64 = y
endif

ifneq ($(findstring max44006,${drivers}), )
	CONFIG_driver_max44006 = y
endif

ifneq ($(findstring max44009,${drivers}), )
	CONFIG_driver_max44009 = y
endif

ifneq ($(findstring hdc1080,${drivers}), )
	CONFIG_driver_hdc1080 = y
endif

ifneq ($(findstring mpu9250,${drivers}), )
	CONFIG_driver_mpu9250 = y
endif

ifneq ($(findstring mmsimple,${drivers}), )
	CONFIG_driver_mmsimple = y
endif

ifneq ($(findstring mmsubstate,${drivers}), )
	CONFIG_driver_mmsubstate = y
endif

ifneq ($(findstring nrf24l01,${drivers}), )
	CONFIG_driver_nrf24l01 = y
endif

ifneq ($(findstring sharp96,${drivers}), )
	CONFIG_driver_sharp96 = y
endif

ifneq ($(findstring resistive_load,${drivers}), )
	CONFIG_driver_resistive_load = y
endif

ifneq ($(findstring softi2c,${drivers}), )
	CONFIG_driver_softi2c = y
endif

# Load drivers

ifdef CONFIG_driver_dummy
	CXX_TARGETS += src/driver/dummy.cc
	COMMON_FLAGS += -DDRIVER_DUMMY
endif

ifneq ($(findstring lm75,${drivers}), )
ifdef CONFIG_driver_lm75
	CXX_TARGETS += src/driver/lm75.cc
	COMMON_FLAGS += -DDRIVER_LM75
endif

ifneq ($(findstring s5851a,${drivers}), )
ifdef CONFIG_driver_s5851a
	CXX_TARGETS += src/driver/s5851a.cc
	COMMON_FLAGS += -DDRIVER_S5851A
endif

ifneq ($(findstring am2320,${drivers}), )
ifdef CONFIG_driver_am2320
	CXX_TARGETS += src/driver/am2320.cc
	COMMON_FLAGS += -DDRIVER_AM2320
endif

ifneq ($(findstring bme280,${drivers}), )
ifdef CONFIG_driver_bme280
	CXX_TARGETS += src/driver/bme280.cc src/driver/bme680_util.cc
	COMMON_FLAGS += -DDRIVER_BME280
endif

ifneq ($(findstring bme680,${drivers}), )
ifdef CONFIG_driver_bme680
	CXX_TARGETS += src/driver/bme680.cc src/driver/bme680_util.cc
	COMMON_FLAGS += -DDRIVER_BME680
endif

ifneq ($(findstring ccs811,${drivers}), )
ifdef CONFIG_driver_ccs811
	CXX_TARGETS += src/driver/ccs811.cc
	COMMON_FLAGS += -DDRIVER_CCS811
endif

ifneq ($(findstring eeprom24lc64,${drivers}), )
ifdef CONFIG_driver_eeprom24lc64
	CXX_TARGETS += src/driver/eeprom24lc64.cc
	COMMON_FLAGS += -DDRIVER_EEPROM24LC64
endif

ifneq ($(findstring max44006,${drivers}), )
ifdef CONFIG_driver_max44006
	CXX_TARGETS += src/driver/max44006.cc
	COMMON_FLAGS += -DDRIVER_MAX44006
endif

ifneq ($(findstring max44009,${drivers}), )
ifdef CONFIG_driver_max44009
	CXX_TARGETS += src/driver/max44009.cc
	COMMON_FLAGS += -DDRIVER_MAX44009
endif

ifneq ($(findstring hdc1080,${drivers}), )
ifdef CONFIG_driver_hdc1080
	CXX_TARGETS += src/driver/hdc1080.cc
	COMMON_FLAGS += -DDRIVER_HDC1080
endif

ifneq ($(findstring mpu9250,${drivers}), )
ifdef CONFIG_driver_mpu9250
	CXX_TARGETS += src/driver/mpu9250.cc
	COMMON_FLAGS += -DDRIVER_MPU9250
endif

ifneq ($(findstring mmsimple,${drivers}), )
ifdef CONFIG_driver_mmsimple
	CXX_TARGETS += src/driver/mmsimple.cc
	COMMON_FLAGS += -DDRIVER_MMSIMPLE
endif

ifneq ($(findstring mmsubstate,${drivers}), )
ifdef CONFIG_driver_mmsubstate
	CXX_TARGETS += src/driver/mmsubstate.cc
	COMMON_FLAGS += -DDRIVER_MMSUBSTATE
endif

ifneq ($(findstring nrf24l01,${drivers}), )
ifdef CONFIG_driver_nrf24l01
	CXX_TARGETS += src/driver/nrf24l01.cc
	ifeq (${arch}, msp430fr5994lp)
	ifeq (${arch_dir}, msp430fr5994lp)
		nrf24l01_cs_pin ?= p1_3
		nrf24l01_en_pin ?= p6_2
		nrf24l01_irq_pin ?= p8_3
	endif
	ifeq (${arch}, msp430fr5969lp)
	ifeq (${arch_dir}, msp430fr5969lp)
		nrf24l01_en_pin ?= p4_3
		nrf24l01_cs_pin ?= p2_4
		nrf24l01_irq_pin ?= p1_5
	endif
	ifeq (${arch}, arduino-nano)
	ifeq (${arch_dir}, arduino-nano)
		nrf24l01_en_pin ?= pc1
		nrf24l01_cs_pin ?= pc0
		nrf24l01_irq_pin ?= pc2
	endif
	ifeq (${arch}, arduino-nano-168)
	ifeq (${arch_dir}, arduino-nano-168)
		nrf24l01_en_pin ?= pc1
		nrf24l01_cs_pin ?= pc0
		nrf24l01_irq_pin ?= pc2
@@ -121,19 +211,19 @@ ifneq ($(findstring nrf24l01,${drivers}), )
	COMMON_FLAGS += -DNRF24L01_IRQ_PIN=GPIO::${nrf24l01_irq_pin}
endif

ifneq ($(findstring sharp96,${drivers}), )
ifdef CONFIG_driver_sharp96
	CXX_TARGETS += src/driver/sharp96.cc
	ifeq (${arch}, msp430fr5969lp)
	ifeq (${arch_dir}, msp430fr5969lp)
		sharp96_power_pin ?= p4_2
		sharp96_en_pin ?= p4_3
		sharp96_cs_pin ?= p2_4
	endif
	ifeq (${arch}, msp430fr5994lp)
	ifeq (${arch_dir}, msp430fr5994lp)
		sharp96_power_pin ?= p1_2
		sharp96_en_pin ?= p6_2
		sharp96_cs_pin ?= p1_3
	endif
	ifeq (${arch}, msp430fr5994lp-256k)
	ifeq (${arch_dir}, msp430fr5994lp-256k)
		sharp96_power_pin ?= p1_2
		sharp96_en_pin ?= p6_2
		sharp96_cs_pin ?= p1_3
@@ -144,7 +234,7 @@ ifneq ($(findstring sharp96,${drivers}), )
	COMMON_FLAGS += -DSHARP96_CS_PIN=GPIO::${sharp96_cs_pin}
endif

ifneq ($(findstring resistive_load,${drivers}), )
ifdef CONFIG_driver_resistive_load
	CXX_TARGETS += src/driver/resistive_load.cc
	resistor1_pin ?= p3_0
	resistor2_pin ?= p3_1
@@ -157,17 +247,25 @@ ifneq ($(findstring resistive_load,${drivers}), )
	COMMON_FLAGS += -DRESISTIVE_LOAD_PIN4=GPIO::${resistor4_pin}
endif

ifneq ($(findstring softi2c,${drivers}), )
ifdef CONFIG_driver_softi2c
	CXX_TARGETS += src/driver/soft_i2c.cc
	COMMON_FLAGS += -DDRIVER_SOFTI2C
endif

# Configure drivers (TODO: Kconfig)

ifneq (${i2c_freq}, )
	COMMON_FLAGS += -DF_I2C=${i2c_freq}
	CONFIG_i2c_freq = ${i2c_freq}
endif
ifdef CONFIG_i2c_freq
	COMMON_FLAGS += -DF_I2C=${CONFIG_i2c_freq}
endif

ifneq (${timer_freq}, )
	COMMON_FLAGS += -DF_TIMER=${timer_freq}
	CONFIG_timer_freq = ${timer_freq}
endif
ifdef CONFIG_timer_freq
	COMMON_FLAGS += -DF_TIMER=${CONFIG_timer_freq}
endif

ifeq (${softi2c_pullup}, internal)
@@ -191,43 +289,42 @@ ifeq (${softi2c_timer}, 1)
	COMMON_FLAGS += -DSOFTI2C_TIMER
endif

ifeq (${kout_nop}, 1)
	COMMON_FLAGS += -DKOUT_NOP
endif

ifeq (${timer_cycles}, 1)
	COMMON_FLAGS += -DTIMER_CYCLES
endif

ifeq (${timer_us}, 1)
	COMMON_FLAGS += -DTIMER_US
endif

ifeq (${timer_s}, 1)
	COMMON_FLAGS += -DTIMER_S
endif

ifeq (${loop}, 1)
	COMMON_FLAGS += -DWITH_LOOP
endif
ifdef CONFIG_loop
	COMMON_FLAGS += -DWITH_LOOP
endif

ifeq (${wakeup}, 1)
	COMMON_FLAGS += -DWITH_WAKEUP
endif
ifdef CONFIG_wakeup
	COMMON_FLAGS += -DWITH_WAKEUP
endif

ifeq (${ostream}, 1)
	COMMON_FLAGS += -DWITH_OSTREAM
endif
ifdef CONFIG_ostream
	COMMON_FLAGS += -DWITH_OSTREAM
endif

ifeq (${trace_malloc}, 1)
	CXX_TARGETS += src/lib/mpmalloc.cc
	COMMON_FLAGS += -DMULTIPASS_TRACE_MALLOC
endif

ifneq (${arch}, )
	include src/arch/${arch}/Makefile.inc
ifneq (${arch_dir}, )
	include src/arch/${arch_dir}/Makefile.inc
endif

default: build/system.elf

stack: default
	${QUIET}test -n "${OBJDUMP}"
	${QUIET}test -n "${ARCH_SHORTNAME}"
@@ -238,13 +335,19 @@ stackm: default
	${QUIET}test -n "${ARCH_SHORTNAME}"
	${QUIET}script/static-stack-analyze.pl --machine-readable ${OBJDUMP} ${ARCH_SHORTNAME} ${OBJECTS}

Kconfig: script/mkconfig
	${QUIET}script/mkconfig > Kconfig

config: Kconfig
	${QUIET}kconfig-qconf Kconfig

clean: arch_clean
	rm -f build/system.elf

help: arch_help
	@echo
	@echo "common flags:"
	@echo "    timer_cycles timer_us timer_s -- enable specific timers. May be mutually exclusive"
	@echo "    timer_us timer_s -- enable specific timers. May be mutually exclusive"
	@echo "    loop -- enable loop() function"
	@echo "    i2c_freq -- I2C Frequency in Hz"
	@echo "    timer_freq -- Timer frequency in Hz"
@@ -260,8 +363,8 @@ help: arch_help
	@echo "    trace_malloc -- trace mpmalloc/mpcalloc/mprealloc calls on stdout"
	@echo "    stack_usage -- Generate .su files for stack usage estimation (-> make stack)"
	@echo
	@echo "${arch} drivers:"
	@ls -1 src/arch/${arch}/driver | fgrep .c | cut -d . -f 1 | sed 's/^/    /'
	@echo "${arch_dir} drivers:"
	@ls -1 src/arch/${arch_dir}/driver | fgrep .c | cut -d . -f 1 | sed 's/^/    /'
	@echo
	@echo "common drivers:"
	@ls -1 src/driver | fgrep .c | cut -d . -f 1 | sed 's/^/    /'
@@ -275,4 +378,4 @@ info: arch_info
	@echo "CXXFLAGS: ${CXXFLAGS}"
	@echo "Selected (common/arch) drivers: ${drivers} / ${arch_drivers}"

.PHONY: clean default stack stackm help info
.PHONY: clean config default stack stackm help info

script/mkconfig

0 → 100755
+92 −0
Original line number Diff line number Diff line
#!/bin/sh

cat <<EOF

menu "System"

config loop
bool "Regularly call loop()"

config wakeup
bool "Call wakeup() on wakeup"

config ostream
bool "C++ ostream support in stdout"

config i2c_freq
int "I2C Frequency [Hz]"
range 1000 100000
default 100000
depends on meta_driver_i2c

config timer_freq
int "Timer Frequency"
range 1 10000
default 10
depends on meta_driver_timer

endmenu

choice Architecture
bool "Architecture"

EOF

for arch in $(ls -1 src/arch); do
	echo config arch_${arch} | tr - _
	echo bool '"'"$(cat src/arch/${arch}/prompt)"'"'
	echo
done

echo endchoice
echo

for arch in $(ls -1 src/arch); do
	echo config arch
	echo string
	echo default '"'"${arch}"'"'
	echo depends on arch_${arch} | tr - _
	echo
done

for arch in $(ls -1 src/arch); do
	if [ -e "src/arch/${arch}/Kconfig" ]; then
		echo menu '"'"$(cat src/arch/${arch}/prompt) Configuration"'"'
		echo depends on arch_${arch} | tr - _
		echo
		cat "src/arch/${arch}/Kconfig"
		echo
		echo endmenu
		echo
	fi
done

cat <<EOF
choice Application
bool "Application"

EOF

for app in $(ls -1 src/app); do
	echo config app_${app} | tr - _
	if [ -e "src/app/${app}/Kconfig" ]; then
		echo bool
		cat src/app/${app}/Kconfig
	else
		echo bool '"'${app}'"'
	fi
	echo
done

echo endchoice
echo

for app in $(ls -1 src/app); do
	echo config app
	echo string
	echo default '"'"${app}"'"'
	echo depends on app_${app} | tr - _
	echo
done

cat src/driver/Kconfig

src/app/aemr/Kconfig

0 → 100644
+2 −0
Original line number Diff line number Diff line
prompt "Automatic Energy Model Refinement"
depends on !loop && !wakeup
+3 −1
Original line number Diff line number Diff line
ifdef app
	override arch_drivers += ,counter
endif
Loading