80dc523ad3
With this change, REPL works almost the same as a standard JS REPL does
(browser console, Node.js, etc.). A result of each expression is
printed, e.g. "2+2" will print "4". Result is printed even if its
value is "undefined", e.g. "print(1)" will print "1", and on the next
line "undefined" (which is again how "normal" JS console work, except
a normal JS way to print to console is console.log()).
If an exception occured, a message "Error executing statement:", followed
by external representation of exception object, is printed. Note that
distinctive exception objects are supported only in "cp" (compact profile),
not in "cp_minimal". In the latter case, there's only exception hierarchy
top-level prototype, so any error message will look like:
Error executing statement: [object Function]
(That's the reason why there's error message prefix - so it weren't too
confusing even if used in cp_minimal config. Unfortunately, compile-time
JerryScript configuration isn't available to Zephyr's main.c, so there's
no easy way to implement cp vs cp_minimal distinction).
JerryScript-DCO-1.0-Signed-off-by: Paul Sokolovsky paul.sokolovsky@linaro.org
197 lines
6.2 KiB
Makefile
Executable File
197 lines
6.2 KiB
Makefile
Executable File
# 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_factory
|
|
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 ?= release
|
|
JERRYHEAP ?= 16
|
|
|
|
# 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
|
|
|
|
# -cp is required for user-friendly error messages in REPL
|
|
VARIETY ?= -cp_minimal
|
|
|
|
INTERM = build/$(BOARD)/obj-$(BOARD)
|
|
OUTPUT = build/$(BOARD)
|
|
|
|
-include $(ZEPHYR_BASE)/boards/$(BOARD_NAME)/Makefile.board
|
|
-include $(ZEPHYR_BASE)/scripts/Makefile.toolchain.$(ZEPHYR_GCC_VARIANT)
|
|
|
|
CC = $(CROSS_COMPILE)gcc
|
|
|
|
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
|
|
|
|
# TODO @sergioamr Read the arch and cflags from zephyr
|
|
|
|
ifeq ($(BOARD),qemu_x86)
|
|
CONFIG_TOOLCHAIN_VARIANT = x86
|
|
CPU = x86
|
|
EXT_CFLAGS += -march=pentium
|
|
EXT_CFLAGS += -mpreferred-stack-boundary=2 -mno-sse
|
|
else ifeq ($(BOARD),$(filter $(BOARD),qemu_cortex_m3 frdm_k64f))
|
|
CONFIG_TOOLCHAIN_VARIANT = arm
|
|
CPU = arm7-m
|
|
EXT_CFLAGS += -march=armv7-m -mthumb -mcpu=cortex-m3 -mabi=aapcs
|
|
else ifeq ($(BOARD),em_starterkit)
|
|
# TODO: Tested only to build, untested to boot
|
|
CONFIG_TOOLCHAIN_VARIANT = arc
|
|
CPU = arc
|
|
EXT_CFLAGS += -mARCv2EM -mav2em -mno-sdata
|
|
else
|
|
CONFIG_TOOLCHAIN_VARIANT = iamcu
|
|
CPU = lakemont
|
|
EXT_CFLAGS += -march=lakemont -mtune=lakemont -miamcu -msoft-float
|
|
EXT_CFLAGS += -mpreferred-stack-boundary=2 -mno-sse
|
|
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
|
|
EXT_CFLAGS += -Wno-error=format=
|
|
|
|
EXT_CFLAGS += $(TOOLCHAIN_CFLAGS)
|
|
EXT_CFLAGS += $(LIB_INCLUDE_DIR)
|
|
EXT_CFLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
|
|
EXT_CFLAGS += -isystem $(shell $(CC) -print-file-name=include-fixed)
|
|
|
|
ZEPHYR_LIBC_INC = $(subst -I,,$(TOOLCHAIN_CFLAGS))
|
|
LIB_INCLUDE_DIR += -L $(CURDIR)/$(OUTPUT)
|
|
|
|
EXTERNAL_LIB = $(INTERM)/lib$(TYPE).external$(VARIETY)-entry.a
|
|
ZEPHYR_BIN = $(OUTPUT)/zephyr/zephyr.strip
|
|
|
|
PREFIX = $(TYPE)$(VARIETY)
|
|
LIBS = $(TYPE).external$(VARIETY)-entry $(PREFIX).jerry-core $(PREFIX).jerry-libm.lib
|
|
|
|
BUILD_CONFIG = O="$(OUTPUT)/zephyr" V=$(V) USER_LIBS="$(LIBS)" USER_LIB_INCLUDE_DIR="-L $(CURDIR)/$(OUTPUT)" TARGET_ZEPHYR=$(TARGET_ZEPHYR)
|
|
|
|
.PHONY: all
|
|
all: jerry zephyr
|
|
|
|
$(EXTERNAL_LIB):
|
|
ifdef V
|
|
@echo "- JERRY SCRIPT -------------------------------------------------"
|
|
endif
|
|
mkdir -p $(INTERM)
|
|
mkdir -p $(OUTPUT)
|
|
cmake -B$(INTERM) -H./ \
|
|
-DENABLE_LTO=OFF \
|
|
-DENABLE_VALGRIND=OFF \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DCMAKE_VERBOSE_MAKEFILE=$(V) \
|
|
-DEXTERNAL_CMAKE_C_COMPILER=$(CC) \
|
|
-DEXTERNAL_CMAKE_C_COMPILER_ID=GNU \
|
|
-DEXTERNAL_CMAKE_SYSTEM_PROCESSOR=$(CPU) \
|
|
-DEXTERNAL_MEM_HEAP_SIZE_KB=$(JERRYHEAP) \
|
|
-DEXTERNAL_COMPILE_FLAGS="$(EXT_CFLAGS)" \
|
|
-DEXTERNAL_CMAKE_SYSTEM_PROCESSOR=lakemont \
|
|
-DEXTERNAL_LIBC_INTERFACE="$(ZEPHYR_LIBC_INC)" \
|
|
-DCMAKE_TOOLCHAIN_FILE=build/configs/toolchain_external.cmake \
|
|
-DEXTERNAL_BUILD_ENTRY_FILE=$(TARGET_ZEPHYR_SRC_DIR)/jerry-entry.c
|
|
|
|
make -C $(INTERM) $(TYPE).external$(VARIETY) V=1
|
|
cp `cat $(INTERM)/$(TYPE).external$(VARIETY)/list` $(OUTPUT)/.
|
|
cp $(EXTERNAL_LIB) $(OUTPUT)/.
|
|
|
|
$(ZEPHYR_BIN):
|
|
ifdef V
|
|
@echo "- ZEPHYR -------------------------------------------------------"
|
|
endif
|
|
make -f $(TARGET_ZEPHYR)/Makefile $(BUILD_CONFIG)
|
|
@echo "Finished"
|
|
@file $(OUTPUT)/zephyr/zephyr.strip
|
|
@size $(OUTPUT)/zephyr/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/zephyr.strip
|
|
make -f $(TARGET_ZEPHYR)/Makefile $(BUILD_CONFIG) flash
|
|
|
|
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) "
|
|
make -f $(TARGET_ZEPHYR)/Makefile $(BUILD_CONFIG) showconfig
|
|
|
|
# TODO @sergioamr Temporal cleanup before finding why Zephyr is ignoring my
|
|
# outdir for the project
|
|
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
|
|
|