ac1bf19c90
This patch simplifies the integration with the zephyr build system whilst at the same time enriching the set of build targets to allow zephyr to be configured using its kbuild features. It works by exploiting "make outputexports", a feature of the zephyr build system that makes the zephyr compiler configuration available to other build systems in an easily accessible manner. Whilst looking at the build we also correct the implementation of clean so that it no longer destroys any custom zephyr configuration. Like any other zephyr application one must use "make pristine" to remove the config too. JerryScript-DCO-1.0-Signed-off-by: Daniel Thompson daniel.thompson@linaro.org
169 lines
5.2 KiB
Makefile
169 lines
5.2 KiB
Makefile
# Copyright © 2016 Intel Corporation
|
|
#
|
|
# 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.
|
|
|
|
.DEFAULT_GOAL := all
|
|
|
|
ifeq ($(.DEFAULT_GOAL),)
|
|
$(warning no default goal is set)
|
|
endif
|
|
|
|
BOARD ?= arduino_101
|
|
export BOARD
|
|
|
|
TARGET_ZEPHYR ?= ./targets/zephyr
|
|
TARGET_ZEPHYR_SRC_DIR = $(TARGET_ZEPHYR)/src
|
|
|
|
TYPE ?= jerry-core
|
|
JERRYHEAP ?= 16
|
|
JERRYPROFILE ?= minimal
|
|
|
|
# Include functionality like regular expressions
|
|
# check Jerry script documentation
|
|
#
|
|
# -cp
|
|
# -cp_minimal
|
|
# -cp_minimal-mem_stats
|
|
# -mem_stats
|
|
# -mem_stress_test
|
|
|
|
ifndef ZEPHYR_BASE
|
|
$(error Missing Zephyr base, did you source zephyr-env.sh? )
|
|
endif
|
|
|
|
INTERM = build/$(BOARD)/obj-$(BOARD)
|
|
OUTPUT = build/$(BOARD)/zephyr
|
|
|
|
include $(OUTPUT)/Makefile.export
|
|
|
|
EXT_CFLAGS := -fno-asynchronous-unwind-tables -fno-omit-frame-pointer
|
|
EXT_CFLAGS += -fno-stack-protector -fno-strict-overflow -ffreestanding
|
|
EXT_CFLAGS += -fno-reorder-functions -fno-defer-pop -fdata-sections
|
|
EXT_CFLAGS += -ffunction-sections -fno-inline-functions
|
|
|
|
EXT_CFLAGS += $(KBUILD_CFLAGS) $(NOSTDINC_FLAGS) $(subst -I,-isystem,$(ZEPHYRINCLUDE))
|
|
|
|
EXT_CFLAGS += -Wall -Wno-format-zero-length -Wno-pointer-sign
|
|
EXT_CFLAGS += -Werror=format -Werror=implicit-int -Wno-unused-but-set-variable
|
|
EXT_CFLAGS += -Wno-main -Wno-strict-aliasing -Wno-old-style-declaration
|
|
EXT_CFLAGS += -Wno-error=format=
|
|
EXT_CFLAGS += -D_XOPEN_SOURCE=700
|
|
|
|
EXT_CFLAGS += -Wno-error=conversion
|
|
|
|
EXTERNAL_LIB = $(INTERM)/lib/libjerry-core.a
|
|
|
|
LIBS = jerry-core
|
|
|
|
BUILD_CONFIG = O="$(OUTPUT)" V=$(V) USER_LIBS="$(LIBS)" USER_LIB_INCLUDE_DIR="-L $(CURDIR)/$(INTERM)/lib" TARGET_ZEPHYR=$(TARGET_ZEPHYR)
|
|
|
|
.PHONY: all
|
|
all: zephyr
|
|
|
|
$(EXTERNAL_LIB):
|
|
ifdef V
|
|
@echo "- JERRY SCRIPT -------------------------------------------------"
|
|
endif
|
|
mkdir -p $(INTERM)
|
|
mkdir -p $(OUTPUT)
|
|
cmake -B$(INTERM) -H./ \
|
|
-DENABLE_LTO=OFF \
|
|
-DFEATURE_VALGRIND=OFF \
|
|
-DFEATURE_PROFILE=$(JERRYPROFILE) \
|
|
-DFEATURE_ERROR_MESSAGES=ON \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DCMAKE_VERBOSE_MAKEFILE=$(V) \
|
|
-DMEM_HEAP_SIZE_KB=$(JERRYHEAP) \
|
|
-DEXTERNAL_CMAKE_C_COMPILER=$(CC) \
|
|
-DEXTERNAL_CMAKE_C_COMPILER_ID=GNU \
|
|
-DJERRY_CMDLINE=OFF \
|
|
-DEXTERNAL_COMPILE_FLAGS="$(EXT_CFLAGS)" \
|
|
-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain_external.cmake \
|
|
-DFEATURE_SNAPSHOT_EXEC=OFF \
|
|
-DENABLE_ALL_IN_ONE=OFF \
|
|
-DJERRY_LIBC=OFF \
|
|
$(EXT_JERRY_FLAGS)
|
|
|
|
make -C $(INTERM) $(TYPE)$(VARIETY) V=1
|
|
|
|
$(OUTPUT)/Makefile.export: $(OUTPUT)/include/config/auto.conf
|
|
make -f $(TARGET_ZEPHYR)/Makefile $(BUILD_CONFIG) outputexports
|
|
|
|
$(OUTPUT)/include/config/auto.conf:
|
|
make -f $(TARGET_ZEPHYR)/Makefile $(BUILD_CONFIG) initconfig
|
|
|
|
zephyr: jerry
|
|
ifdef V
|
|
@echo "- ZEPHYR -------------------------------------------------------"
|
|
endif
|
|
make -f $(TARGET_ZEPHYR)/Makefile $(BUILD_CONFIG)
|
|
@echo "Finished"
|
|
@file $(OUTPUT)/zephyr.strip
|
|
@size $(OUTPUT)/zephyr.strip
|
|
|
|
jerry: $(EXTERNAL_LIB)
|
|
@touch $(EXTERNAL_LIB)
|
|
|
|
GENERIC_TARGETS = qemu qemugdb flash debug debugserver
|
|
KCONFIG_TARGETS = \
|
|
initconfig config nconfig menuconfig xconfig gconfig \
|
|
oldconfig silentoldconfig defconfig savedefconfig \
|
|
allnoconfig allyesconfig alldefconfig randconfig \
|
|
listnewconfig olddefconfig
|
|
CLEAN_TARGETS = pristine mrproper
|
|
|
|
$(GENERIC_TARGETS): jerry
|
|
$(CLEAN_TARGETS): clean
|
|
|
|
$(GENERIC_TARGETS) $(KCONFIG_TARGETS) $(CLEAN_TARGETS):
|
|
ifdef V
|
|
@echo "- ZEPHYR -------------------------------------------------------"
|
|
endif
|
|
make -f $(TARGET_ZEPHYR)/Makefile $(BUILD_CONFIG) $@
|
|
|
|
dfu-x86: all
|
|
@- dfu-util -a x86_app -D build/$(BOARD)/zephyr/zephyr.bin; \
|
|
if [ $$? -eq 0 ] ; then echo "\nYour program will launch in 5 seconds." ; \
|
|
else echo "\nProgram didn't flash, try pressing the reset buttons \nand wait a second for the bootloader to load, \nor flash again the factory bootloader."; fi
|
|
|
|
usage:
|
|
help:
|
|
@echo Usage:
|
|
@echo showconfig Show parameters and configuration
|
|
@echo flash Flash into board
|
|
@echo all Compile jerryscript and zephyr
|
|
|
|
showconfig:
|
|
@echo "- CONFIGURATION ------------------------------------------------"
|
|
@echo "INTERM = $(INTERM)"
|
|
@echo "OUTPUT = $(OUTPUT)"
|
|
@echo "CC = $(CC) "
|
|
@echo "BOARD = $(ZEPHYR_BASE)/boards/$(BOARD)/Makefile.board "
|
|
@echo "TOOLCHAIN = $(ZEPHYR_BASE)/scripts/Makefile.toolchain.$(ZEPHYR_GCC_VARIANT) "
|
|
@echo "TOOLCHAIN_CFLAGS = $(TOOLCHAIN_CFLAGS) "
|
|
@echo "CROSS_COMPILE = $(CROSS_COMPILE) "
|
|
@echo "TOOLCHAIN_LIBS = $(TOOLCHAIN_LIBS) "
|
|
@echo "LIBS = $(LIBS) "
|
|
@echo "BUILD_CONFIG = $(BUILD_CONFIG) "
|
|
make -f $(TARGET_ZEPHYR)/Makefile $(BUILD_CONFIG) showconfig
|
|
|
|
clean:
|
|
ifdef V
|
|
@echo "- CLEANING JERRY SCRIPT ----------------------------------------"
|
|
endif
|
|
rm -rf $(INTERM) $(TARGET_ZEPHYR_SRC_DIR)/*.o
|
|
ifdef V
|
|
@echo "- CLEANING ZEPHYR ----------------------------------------------"
|
|
endif
|
|
make -f $(TARGET_ZEPHYR)/Makefile $(BUILD_CONFIG) clean
|