zephyr/Makefile.inc

121 lines
2.9 KiB
Makefile

PROJECT_BASE ?= $(shell pwd)
ARCH?=x86
O ?= $(PROJECT_BASE)/outdir
# Turn O into an absolute path; we call the main Kbuild with $(MAKE) -C
# which changes the working directory, relative paths don't work right.
# Need to create the directory first to make readlink happy
$(shell mkdir -p $(O))
override O := $(shell readlink -f $(O))
export ARCH MDEF_FILE QEMU_EXTRA_FLAGS PROJECT_BASE
ifdef PLATFORM_CONFIG
ifndef KERNEL_TYPE
$(error KERNEL_TYPE is not defined! Set it to either micro or nano)
endif
KBUILD_DEFCONFIG=$(KERNEL_TYPE)_$(PLATFORM_CONFIG)_defconfig
export KBUILD_DEFCONFIG
endif
ifdef KBUILD_DEFCONFIG
CONFIG_DEPS=$(O)/.initconfig
else
CONFIG_DEPS=FORCE
endif
SOURCE_DIR ?= $(PROJECT_BASE)/src/
# Kbuild doesn't work correctly if this is an absolute path
override SOURCE_DIR := $(shell python -c "import os.path; print(\"%s\" % os.path.relpath(os.path.realpath('$(SOURCE_DIR)'), os.path.realpath('$(ZEPHYR_BASE)')))")/
export SOURCE_DIR
CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
else if [ -x /bin/bash ]; then echo /bin/bash; \
else echo sh; fi ; fi)
ifeq ("$(origin V)", "command line")
KBUILD_VERBOSE = $(V)
endif
ifndef KBUILD_VERBOSE
KBUILD_VERBOSE = 0
endif
ifeq ($(KBUILD_VERBOSE),1)
Q =
S =
else
Q = @
S = -s
endif
all: $(CONFIG_DEPS) $(O)/.dir
$(Q)$(MAKE) -C $(ZEPHYR_BASE) O=$(O) \
PROJECT=$(PROJECT_BASE) SOURCE_DIR=$(SOURCE_DIR) \
CFLAGS=$(CFLAGS)
rm-files:= .config
rm-objects:= *.o
rm-dirs := $(O)
cmd_clean_inner_files = \
$(shell cd $(PROJECT_BASE);rm $(rm-files) -f; rm $(rm-dirs) -rf)
clean: FORCE
$(Q)rm $(SOURCE_DIR)$(rm-objects) -f
$(Q)rm $(SOURCE_DIR)/modules.order -f
$(Q)rm $(SOURCE_DIR)/.*.cmd -f
$(call cmd_clean_inner_files)
pristine: distclean
distclean: clean
@rm $(PROJECT_BASE)/.config -f
@rm $(PROJECT_BASE)/.config.old -f
@rm $(PROJECT_BASE)/.version -f
mrproper: FORCE
$(call cmd_clean_inner_files)
$(Q)$(MAKE) -C $(ZEPHYR_BASE) PROJECT=$(PROJECT_BASE) mrproper
%config: $(O)/.dir FORCE
$(Q)$(MAKE) $(S) -C $(ZEPHYR_BASE) O=$(O) PROJECT=$(PROJECT_BASE) $@
qemu: $(CONFIG_DEPS) $(O)/.dir
$(Q)$(MAKE) -C $(ZEPHYR_BASE) O=$(O) \
PROJECT=$(PROJECT_BASE) SOURCE_DIR=$(SOURCE_DIR) \
CFLAGS=$(CFLAGS) qemu
$(O)/.config: $(O)/.dir
$(Q)cp $(ZEPHYR_BASE)/arch/$(ARCH)/configs/$(KBUILD_DEFCONFIG) \
$(O)/.config
$(O)/.initconfig: mergeconfig
$(Q)yes "" | $(MAKE) $(S) -C $(ZEPHYR_BASE) O=$(O) \
PROJECT=$(PROJECT_BASE) oldconfig
touch $@
ifneq (($strip $(CONF_FILE)),)
mergeconfig: $(O)/.config $(CONF_FILE)
$(Q)$(CONFIG_SHELL) $(ZEPHYR_BASE)/scripts/kconfig/merge_config.sh \
-q -m -O $(O) $(O)/.config $(CONF_FILE)
else
mergeconfig: defconfig $(CONF_FILE);
endif
$(CONF_FILE):;
%/.dir:
$(Q)set -e;
$(Q)test -s $(abspath $(dir $@)) || mkdir $(abspath $(dir $@)) -p
$(Q)touch $@
help:
$(Q)$(MAKE) -C $(ZEPHYR_BASE) help
PHONY += FORCE clean mrproper
FORCE:
.PHONY: $(PHONY)
.PRECIOUS: %/.dir