Files
jerryscript/targets/zephyr/Makefile.zephyr
T
Paul Sokolovsky fdf9e71caa target: zephyr: Make "OUTPUT" varible match Zephyr's "O" variable. (#1404)
JerryScript Zephyr port overrides standard Zephyr output location. But
components integrating Zephyr port may want to override it again. Make
sure that arbitrary overrides are possible, and just set the default
value to Zephyr port's custom preference.

JerryScript-DCO-1.0-Signed-off-by: Paul Sokolovsky paul.sokolovsky@linaro.org
2016-10-21 11:52:19 +02:00

225 lines
6.3 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
BOARD_NAME ?= arduino_101
ifeq ($(BOARD),qemu_x86)
BOARD_NAME = qemu_x86
endif
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
DOTCONFIG = $(OUTPUT)/.config
include $(DOTCONFIG)
override ARCH = $(subst ",,$(CONFIG_ARCH))
# (this comment is to close the mismatched quote) "
-include $(ZEPHYR_BASE)/boards/$(BOARD_NAME)/Makefile.board
-include $(ZEPHYR_BASE)/scripts/Makefile.toolchain.$(ZEPHYR_GCC_VARIANT)
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
ifeq ($(ARCH),x86)
CPU = i686
ifeq ($(CONFIG_X86_IAMCU),y)
EXT_CFLAGS += -march=lakemont -mtune=lakemont -miamcu -msoft-float
else
EXT_CFLAGS += -march=pentium
endif
EXT_CFLAGS += -mpreferred-stack-boundary=2 -mno-sse
else ifeq ($(ARCH),arm)
ifeq ($(CONFIG_CPU_CORTEX_M4),y)
CPU = armv7e-m
EXT_CFLAGS += -march=$(CPU) -mthumb -mcpu=cortex-m4 -mabi=aapcs
else
CPU = armv7-m
EXT_CFLAGS += -march=$(CPU) -mthumb -mcpu=cortex-m3 -mabi=aapcs
endif
ifeq ($(CONFIG_FP_SOFTABI), y)
EXT_CFLAGS += -mfloat-abi=softfp -mfpu=fpv4-sp-d16
endif
ifeq ($(CONFIG_FP_HARDABI), y)
EXT_CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16
endif
else ifeq ($(ARCH),arc)
# TODO: Tested only to build, untested to boot
CPU = arc
EXT_CFLAGS += -mARCv2EM -mav2em -mno-sdata
else
CPU = $(error ARCH=$(ARCH) is not supported)
endif
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 += -nostdlib
# Pass2
-include $(ZEPHYR_BASE)/scripts/Makefile.toolchain.$(ZEPHYR_GCC_VARIANT)
CC = $(CROSS_COMPILE)gcc
ZEPHYR_LIBC_INC = $(subst -I,,$(TOOLCHAIN_CFLAGS))
LIB_INCLUDE_DIR += -L $(CURDIR)/$(OUTPUT)/..
EXT_CFLAGS += -Wno-error=conversion
EXT_CFLAGS += $(LIB_INCLUDE_DIR)
EXT_CFLAGS += $(subst -I,-isystem,$(TOOLCHAIN_CFLAGS))
EXTERNAL_LIB = $(INTERM)/lib/libjerry-core.a
ZEPHYR_BIN = $(OUTPUT)/zephyr.strip
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: jerry zephyr
$(DOTCONFIG):
make -f $(TARGET_ZEPHYR)/Makefile $(BUILD_CONFIG) initconfig
$(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 \
-DEXTERNAL_CMAKE_SYSTEM_PROCESSOR=$(CPU) \
-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
$(ZEPHYR_BIN):
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)
zephyr: $(EXTERNAL_LIB) $(ZEPHYR_BIN)
@touch $(ZEPHYR_BIN)
qemu: $(EXTERNAL_LIB) $(ZEPHYR_BIN)
make -f $(TARGET_ZEPHYR)/Makefile $(BUILD_CONFIG) qemu
flash: $(EXTERNAL_LIB) $(OUTPUT)/zephyr.strip
make -f $(TARGET_ZEPHYR)/Makefile $(BUILD_CONFIG) flash
debugserver:
make -f $(TARGET_ZEPHYR)/Makefile BOARD=$(BOARD_NAME) debugserver
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 "LIB_INCLUDE_DIR = $(LIB_INCLUDE_DIR) "
@echo "BUILD_CONFIG = $(BUILD_CONFIG) "
@echo "ZEPHYR_LIBC_INC = $(ZEPHYR_LIBC_INC) "
make -f $(TARGET_ZEPHYR)/Makefile $(BUILD_CONFIG) showconfig
clean:
@echo "Clearing Jerryscript"
@rm -rf $(OUTPUT)
@rm -rf $(INTERM)
@rm -f $(TARGET_ZEPHYR_SRC_DIR)/*.o
@echo "Clearing Zephyr"
make -f $(TARGET_ZEPHYR)/Makefile clean
make -f $(TARGET_ZEPHYR)/Makefile pristine
mrproper:
make -f $(TARGET_ZEPHYR)/Makefile mrproper