diff --git a/.gitmodules b/.gitmodules index 4b15013ec..ecf8d84c9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -32,3 +32,6 @@ [submodule "APP_Framework/lib/lorawan/lorawan_gateway_single_channel"] path = APP_Framework/lib/lorawan/lorawan_gateway_single_channel url = https://gitlink.org.cn/IACU/lorawan_gateway_single_channel.git +[submodule "APP_Framework/lib/JerryScript/jerryscript"] + path = APP_Framework/lib/JerryScript/jerryscript + url = https://gitlink.org.cn/wgzAIIT/jerryscript.git diff --git a/APP_Framework/lib/JerryScript/Kconfig b/APP_Framework/lib/JerryScript/Kconfig new file mode 100644 index 000000000..89a10d51d --- /dev/null +++ b/APP_Framework/lib/JerryScript/Kconfig @@ -0,0 +1,5 @@ +menu "lib using JerryScript" + menuconfig PKG_USING_JERRYSCRIPT + bool "JerryScript: Ultra-lightweight JavaScript engine for the Internet of Things." + default n +endmenu diff --git a/APP_Framework/lib/JerryScript/Makefile b/APP_Framework/lib/JerryScript/Makefile new file mode 100644 index 000000000..3381f2fb0 --- /dev/null +++ b/APP_Framework/lib/JerryScript/Makefile @@ -0,0 +1,8 @@ +SRC_FILES := +SRC_FILES += jerryscript/build/lib/libjerry-core.a \ + jerryscript/build/lib/libjerry-ext.a \ + jerryscript/build/lib/libjerry-math.a + +SRC_FILES += setjmp.S jerry_port.c jerry_main.c + +include $(KERNEL_ROOT)/compiler.mk diff --git a/APP_Framework/lib/JerryScript/README.md b/APP_Framework/lib/JerryScript/README.md new file mode 100644 index 000000000..c83f18865 --- /dev/null +++ b/APP_Framework/lib/JerryScript/README.md @@ -0,0 +1,58 @@ +# jerryscript编译步骤,依赖 Ubuntu 20.04 操作系统. +## 1、jerryscript源码下载 + +JerryScript 源码以子模块的形式保存在xiuos/APP_Framework/lib/JerryScript/jerryscript下,进行编译前需要下载,在xiuos根目录下执行: + +```bash +git submodule +git submodule init +git submodule update APP_Framework/lib/JerryScript/jerryscript +``` + +## 2、jerryscript编译依赖安装 + +第一次编译需要安装依赖,在APP_Framework/lib/JerryScript路径下,依次执行: + +``` +jerryscript/tools/apt-get-install-deps.sh +sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi +sudo apt install \ + bison flex gettext texinfo libncurses5-dev libncursesw5-dev \ + gperf automake libtool pkg-config build-essential gperf genromfs \ + libgmp-dev libmpc-dev libmpfr-dev libisl-dev binutils-dev libelf-dev \ + libexpat-dev gcc-multilib g++-multilib picocom u-boot-tools util-linux +``` + +## 3、jerryscript源码编译 + +在APP_Framework/lib/JerryScript路径下,以stm32f4discovery开发板为例,执行: + +```bash +jerryscript/tools/build.py \ + --clean \ + --lto=OFF \ + --jerry-cmdline=OFF \ + --jerry-math=ON \ + --amalgam=ON \ + --mem-heap=70 \ + --profile=es.next \ + --toolchain=${PWD}/jerryscript/cmake/toolchain_mcu_stm32f4.cmake +``` + +## 4、stm32f4discovery开发板bin包构建 + +在xiuos/Ubiquitous/XiZi_IIoT目录下,执行 + +```makefile +make BOARD=stm32f407-st-discovery menuconfig +``` + +然后在menuconfig界面进入APP_Framework → app lib → lib using JerryScript ,完成勾选,保存退出。 + +执行 + +```makefile +make BOARD=stm32f407-st-discovery +``` + +完成编译。 diff --git a/APP_Framework/lib/JerryScript/jerry_main.c b/APP_Framework/lib/JerryScript/jerry_main.c new file mode 100644 index 000000000..5503a8e75 --- /dev/null +++ b/APP_Framework/lib/JerryScript/jerry_main.c @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2022 AIIT XUOS Lab + * XiUOS is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +/** + * @file jerry_main.c + * @brief support jerryscript + * @version 1.0 + * @author AIIT XUOS Lab + * @date 2023.08.07 + */ + +#include +#include +#include +#include + +bool js_parse_test1(void* parameter) +{ + bool run_ok = false; + + const jerry_char_t script[] = "var str = 'Hello, World!';"; + + /* Initialize engine */ + jerry_init (JERRY_INIT_EMPTY); + + /* Setup Global scope code */ + jerry_value_t parsed_code = jerry_parse (NULL, 0, script, sizeof (script) - 1, JERRY_PARSE_NO_OPTS); + + /* Check if there is any JS code parse error */ + if (!jerry_value_is_error (parsed_code)) + { + /* Execute the parsed source code in the Global scope */ + jerry_value_t ret_value = jerry_run (parsed_code); + + /* Check the execution return value if there is any error */ + run_ok = !jerry_value_is_error (ret_value); + + /* Returned value must be freed */ + jerry_release_value (ret_value); + printf("jerry_run ret=%d\n", ret_value); + } + + /* Parsed source code must be freed */ + jerry_release_value (parsed_code); + + /* Cleanup engine */ + jerry_cleanup (); + + printf("run_ok is %d.\n", run_ok); + + return (run_ok ? 0 : 1); +} + +int js_parse_test2(void* parameter) +{ + int return_value = 1; + + /* Initialize engine */ + jerry_init (JERRY_INIT_EMPTY); + + /* Parse the 'function (a,b) { return a + b; }' function */ + const char function_args[] = "a, b"; + const char function_source[] = "return a * b"; + + jerry_value_t parsed_function = jerry_parse_function (NULL, + 0, + (const jerry_char_t *) function_args, + strlen (function_args), + (const jerry_char_t *) function_source, + strlen (function_source), + JERRY_PARSE_NO_OPTS); + + if (!jerry_value_is_error (parsed_function)) + { + /* Run the parsed function */ + jerry_value_t args[] = { + jerry_create_number (3), + jerry_create_number (55), + }; + jerry_size_t argc = sizeof (args) / sizeof (args[0]); + jerry_value_t ret_value = jerry_call_function (parsed_function, + jerry_create_undefined(), + args, + argc); + + /* Process result value */ + if (jerry_value_is_number (ret_value)) { + double value = jerry_get_number_value (ret_value); + printf ("Function result: %lf\n", value); + + return_value = !(value == (3 * 55)); + } + + /* Release the function arguments */ + for (jerry_size_t idx = 0; idx < argc; idx++) { + jerry_release_value (args[idx]); + } + + /* Returned value must be freed */ + jerry_release_value (ret_value); + } + + /* Parsed function must be freed */ + jerry_release_value (parsed_function); + + /* Cleanup engine */ + jerry_cleanup (); + + return return_value; +} + + +int js_parse_test3(void* parameter) +{ + jerry_init (JERRY_INIT_EMPTY); + + jerry_value_t value; + // create or acquire value + value = jerry_create_string ((const jerry_char_t *) "Demo string"); + + // Read the string into a byte buffer. + jerry_size_t string_size = jerry_get_string_size (value); + jerry_char_t *string_buffer_p = (jerry_char_t *) malloc (sizeof (jerry_char_t) * (string_size + 1)); + + jerry_size_t copied_bytes = jerry_string_to_char_buffer (value, string_buffer_p, string_size); + string_buffer_p[copied_bytes] = '\0'; + + jerry_release_value (value); + + jerry_cleanup (); + + printf ("Test string: %s\n", string_buffer_p); + free (string_buffer_p); + + return 0; +} + + +static int counter = 0; + +static jerry_value_t +method_getter (const jerry_value_t this_obj, + const jerry_value_t func_obj, + const jerry_value_t args[], + const jerry_length_t argc) +{ + counter++; + printf("Getter called, returning: %d\n", counter); + + return jerry_create_number (counter); +} + +static jerry_value_t +method_setter (const jerry_value_t this_obj, + const jerry_value_t func_obj, + const jerry_value_t args[], + const jerry_length_t argc) +{ + // Note: the arguments count and type should be checked + // in this example it is ommitted! + + double new_value = jerry_get_number_value (args[0]); + counter = (int) new_value; + + printf("Setter called, setting: %d\n", counter); + + return jerry_create_undefined (); +} + +int js_parse_test4(void* parameter) +{ + jerry_init (JERRY_INIT_EMPTY); + + jerry_value_t global_obj_val = jerry_get_global_object (); + + // configure the property + jerry_property_descriptor_t prop_desc; + jerry_init_property_descriptor_fields (&prop_desc); + + // set the property descriptor fields: + + prop_desc.is_get_defined = true; + prop_desc.getter = jerry_create_external_function (method_getter); + prop_desc.is_set_defined = true; + prop_desc.setter = jerry_create_external_function (method_setter); + + // add the property as "my_prop" for the global object + jerry_value_t prop_name = jerry_create_string ((const jerry_char_t *) "my_prop"); + jerry_value_t return_value = jerry_define_own_property (global_obj_val, prop_name, &prop_desc); + if (jerry_value_is_error (return_value)) + { + // there was an error + } + + // if there was no error at this point the global object should have a "my_prop" property + + jerry_release_value (return_value); + jerry_release_value (prop_name); + + jerry_free_property_descriptor_fields (&prop_desc); + jerry_release_value (global_obj_val); + + // run an example js code to use the getter/setters + + const char *src_p = "this.my_prop; this.my_prop; this.my_prop = 4; this.my_prop"; + jerry_value_t eval_result = jerry_eval ((const jerry_char_t *) src_p, strlen (src_p), JERRY_PARSE_NO_OPTS); + + // "eval_result" is the last result of "this.my_prop" that is "5" currently. + double result_number = jerry_get_number_value (eval_result); + printf("output: %lf\n", result_number); + + jerry_cleanup (); + + return result_number != 5.0; + return 0; +} + +void jstest(void) +{ + int ret; + pthread_t thread; + pthread_attr_t attr; + attr.schedparam.sched_priority = 22; + attr.stacksize = 8192; + int32 task = 0; + + ret = PrivTaskCreate(&thread, &attr, (void*)js_parse_test4, NULL); + if (ret < 0) { + printf("taskcreate failed, status=%d\n", ret); + return; + } +} +PRIV_SHELL_CMD_FUNCTION(jstest, jerryscript test cmd, PRIV_SHELL_CMD_FUNC_ATTR); diff --git a/APP_Framework/lib/JerryScript/jerry_port.c b/APP_Framework/lib/JerryScript/jerry_port.c new file mode 100644 index 000000000..34fe09007 --- /dev/null +++ b/APP_Framework/lib/JerryScript/jerry_port.c @@ -0,0 +1,264 @@ +/* + * Copyright (c) 2022 AIIT XUOS Lab + * XiUOS is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +/** + * @file jerry_port.c + * @brief support jerryscript + * @version 1.0 + * @author AIIT XUOS Lab + * @date 2023.08.07 + */ + +#include +#include +#include +#include +#include + +#include "jerryscript.h" +#include "jerryscript-port.h" + +/** + * JerryScript log level + */ +static jerry_log_level_t jerry_log_level = JERRY_LOG_LEVEL_ERROR; + +/** + * Sets log level. + */ +void set_log_level (jerry_log_level_t level) +{ + jerry_log_level = level; +} /* set_log_level */ + +/** + * Aborts the program. + */ +void jerry_port_fatal (jerry_fatal_code_t code) +{ + exit (1); +} /* jerry_port_fatal */ + +/** + * Provide log message implementation for the engine. + */ +void +jerry_port_log (jerry_log_level_t level, /**< log level */ + const char *format, /**< format string */ + ...) /**< parameters */ +{ + if (level <= jerry_log_level) + { + va_list args; + va_start (args, format); + vfprintf (stderr, format, args); + va_end (args); + } +} /* jerry_port_log */ + +/** + * Determines the size of the given file. + * @return size of the file + */ +static size_t +jerry_port_get_file_size (FILE *file_p) /**< opened file */ +{ + fseek (file_p, 0, SEEK_END); + long size = ftell (file_p); + fseek (file_p, 0, SEEK_SET); + + return (size_t) size; +} /* jerry_port_get_file_size */ + +/** + * Opens file with the given path and reads its source. + * @return the source of the file + */ +uint8_t * +jerry_port_read_source (const char *file_name_p, /**< file name */ + size_t *out_size_p) /**< [out] read bytes */ +{ + FILE *file_p = fopen (file_name_p, "rb"); + + if (file_p == NULL) + { + jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Error: failed to open file: %s\n", file_name_p); + return NULL; + } + + size_t file_size = jerry_port_get_file_size (file_p); + uint8_t *buffer_p = (uint8_t *) malloc (file_size); + + if (buffer_p == NULL) + { + fclose (file_p); + + jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Error: failed to allocate memory for module"); + return NULL; + } + + size_t bytes_read = fread (buffer_p, 1u, file_size, file_p); + + if (!bytes_read) + { + fclose (file_p); + free (buffer_p); + + jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Error: failed to read file: %s\n", file_name_p); + return NULL; + } + + fclose (file_p); + *out_size_p = bytes_read; + + return buffer_p; +} /* jerry_port_read_source */ + +/** + * Release the previously opened file's content. + */ +void +jerry_port_release_source (uint8_t *buffer_p) /**< buffer to free */ +{ + free (buffer_p); +} /* jerry_port_release_source */ + +/** + * Normalize a file path + * + * @return length of the path written to the output buffer + */ +size_t +jerry_port_normalize_path (const char *in_path_p, /**< input file path */ + char *out_buf_p, /**< output buffer */ + size_t out_buf_size, /**< size of output buffer */ + char *base_file_p) /**< base file path */ +{ + (void) base_file_p; + + size_t len = strlen (in_path_p); + if (len + 1 > out_buf_size) + { + return 0; + } + + /* Return the original string. */ + strcpy (out_buf_p, in_path_p); + return len; +} /* jerry_port_normalize_path */ + +/** + * Get the module object of a native module. + * + * @return undefined + */ +jerry_value_t +jerry_port_get_native_module (jerry_value_t name) /**< module specifier */ +{ + (void) name; + return jerry_create_undefined (); +} /* jerry_port_get_native_module */ + +/** + * Dummy function to get the time zone adjustment. + * + * @return 0 + */ +double +jerry_port_get_local_time_zone_adjustment (double unix_ms, bool is_utc) +{ + /* We live in UTC. */ + return 0; +} /* jerry_port_get_local_time_zone_adjustment */ + +/** + * Dummy function to get the current time. + * + * @return 0 + */ +double +jerry_port_get_current_time (void) +{ + return 0; +} /* jerry_port_get_current_time */ + +/** + * Provide the implementation of jerry_port_print_char. + * Uses 'printf' to print a single character to standard output. + */ +void +jerry_port_print_char (char c) /**< the character to print */ +{ + printf ("%c", c); +} /* jerry_port_print_char */ + +/** + * Provide implementation of jerry_port_sleep. + */ +void jerry_port_sleep (uint32_t sleep_time) /**< milliseconds to sleep */ +{ + usleep ((useconds_t) sleep_time * 1000); +} /* jerry_port_sleep */ + +/** + * Pointer to the current context. + */ +static jerry_context_t *current_context_p = NULL; + +/** + * Set the current_context_p as the passed pointer. + */ +void +jerry_port_default_set_current_context (jerry_context_t *context_p) /**< points to the created context */ +{ + current_context_p = context_p; +} /* jerry_port_default_set_current_context */ + +/** + * Get the current context. + * + * @return the pointer to the current context + */ +jerry_context_t * +jerry_port_get_current_context (void) +{ + return current_context_p; +} /* jerry_port_get_current_context */ + +/** + * Track unhandled promise rejections. + * + * Note: + * This port function is called by jerry-core when JERRY_BUILTIN_PROMISE + * is enabled. + * + * @param promise rejected promise + * @param operation HostPromiseRejectionTracker operation + */ +void +jerry_port_track_promise_rejection (const jerry_value_t promise, + const jerry_promise_rejection_operation_t operation) +{ + (void) operation; /* unused */ + + jerry_value_t reason = jerry_get_promise_result (promise); + jerry_value_t reason_to_string = jerry_value_to_string (reason); + jerry_size_t req_sz = jerry_get_utf8_string_size (reason_to_string); + jerry_char_t str_buf_p[req_sz + 1]; + jerry_string_to_utf8_char_buffer (reason_to_string, str_buf_p, req_sz); + str_buf_p[req_sz] = '\0'; + + jerry_release_value (reason_to_string); + jerry_release_value (reason); + + jerry_port_log (JERRY_LOG_LEVEL_WARNING, "Uncaught (in promise) %s\n", str_buf_p); +} /* jerry_port_track_promise_rejection */ diff --git a/APP_Framework/lib/JerryScript/jerryscript b/APP_Framework/lib/JerryScript/jerryscript new file mode 160000 index 000000000..8ba0d1b6e --- /dev/null +++ b/APP_Framework/lib/JerryScript/jerryscript @@ -0,0 +1 @@ +Subproject commit 8ba0d1b6ee5a065a42f3b306771ad8e3c0d819bc diff --git a/APP_Framework/lib/JerryScript/setjmp.S b/APP_Framework/lib/JerryScript/setjmp.S new file mode 100644 index 000000000..783d87c9f --- /dev/null +++ b/APP_Framework/lib/JerryScript/setjmp.S @@ -0,0 +1,65 @@ +/* Copyright JS Foundation and other contributors, http://js.foundation + * + * 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. + */ + +.syntax unified + +.macro func _name +.global \_name +.type \_name, %function +\_name: +.endm +.macro endfunc _name +.size \_name, .-\_name +.endm + +/** + * setjmp (jmp_buf env) + * + * See also: + * longjmp + * + * @return 0 - if returns from direct call, + * nonzero - if returns after longjmp. + */ +func setjmp + stmia r0!, {r4 - r11, lr} + str sp, [r0], #4 + vstm r0, {s16 - s31} + mov r0, #0 + bx lr +endfunc setjmp + +/** + * longjmp (jmp_buf env, int val) + * + * Note: + * if val is not 0, then it would be returned from setjmp, + * otherwise - 0 would be returned. + * + * See also: + * setjmp + */ +func longjmp + ldmia r0!, {r4 - r11, lr} + ldr sp, [r0] + add r0, r0, #4 + vldm r0, {s16 - s31} + mov r0, r1 + cmp r0, #0 + bne 1f + mov r0, #1 + 1: + bx lr +endfunc longjmp diff --git a/APP_Framework/lib/JerryScript/setjmp.h b/APP_Framework/lib/JerryScript/setjmp.h new file mode 100644 index 000000000..006a5a3f7 --- /dev/null +++ b/APP_Framework/lib/JerryScript/setjmp.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2022 AIIT XUOS Lab + * XiUOS is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +/** + * @file setjmp.h + * @brief support jerryscript + * @version 1.0 + * @author AIIT XUOS Lab + * @date 2023.08.07 + */ + +#ifndef SETJMP_H +#define SETJMP_H + +#include + +typedef uint64_t jmp_buf[14]; + +int setjmp (jmp_buf env); +void longjmp (jmp_buf env, int val); + +#endif /* !SETJMP_H */ diff --git a/APP_Framework/lib/Kconfig b/APP_Framework/lib/Kconfig index 8f9b35eda..d1e231384 100755 --- a/APP_Framework/lib/Kconfig +++ b/APP_Framework/lib/Kconfig @@ -15,4 +15,5 @@ menu "app lib" source "$APP_DIR/lib/embedded_database/Kconfig" source "$APP_DIR/lib/lorawan/Kconfig" source "$APP_DIR/lib/mqtt/Kconfig" + source "$APP_DIR/lib/JerryScript/Kconfig" endmenu diff --git a/APP_Framework/lib/Makefile b/APP_Framework/lib/Makefile index 5877462e4..4f8f72437 100644 --- a/APP_Framework/lib/Makefile +++ b/APP_Framework/lib/Makefile @@ -22,4 +22,8 @@ ifeq ($(CONFIG_TOOL_USING_MQTT),y) SRC_DIR += mqtt endif +ifeq ($(CONFIG_PKG_USING_JERRYSCRIPT),y) + SRC_DIR += JerryScript +endif + include $(KERNEL_ROOT)/compiler.mk diff --git a/Ubiquitous/XiZi_IIoT/board/cortex-m4-emulator/config.mk b/Ubiquitous/XiZi_IIoT/board/cortex-m4-emulator/config.mk index fa6254e81..d54d624dc 100644 --- a/Ubiquitous/XiZi_IIoT/board/cortex-m4-emulator/config.mk +++ b/Ubiquitous/XiZi_IIoT/board/cortex-m4-emulator/config.mk @@ -1,9 +1,9 @@ export CROSS_COMPILE ?=/usr/bin/arm-none-eabi- -export CFLAGS := -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -Dgcc -O0 -gdwarf-2 -g -fgnu89-inline -Wa,-mimplicit-it=thumb -Werror -export AFLAGS := -c -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -x assembler-with-cpp -Wa,-mimplicit-it=thumb -gdwarf-2 +export CFLAGS := -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -Dgcc -O0 -fgnu89-inline -Wa,-mimplicit-it=thumb -Werror +export AFLAGS := -c -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -x assembler-with-cpp -Wa,-mimplicit-it=thumb export LFLAGS := -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -Wl,--gc-sections,-Map=XiZi-cortex-m4-emulator.map,-cref,-u,Reset_Handler -T $(BSP_ROOT)/link.lds -export CXXFLAGS := -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -Dgcc -O0 -gdwarf-2 -g -Werror +export CXXFLAGS := -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -Dgcc -O0 -Werror ifeq ($(CONFIG_LIB_MUSLLIB), y) export LFLAGS += -nostdlib -nostdinc -fno-builtin -nodefaultlibs diff --git a/Ubiquitous/XiZi_IIoT/board/cortex-m4-emulator/link.lds b/Ubiquitous/XiZi_IIoT/board/cortex-m4-emulator/link.lds index b3299549a..30c5cdc7d 100644 --- a/Ubiquitous/XiZi_IIoT/board/cortex-m4-emulator/link.lds +++ b/Ubiquitous/XiZi_IIoT/board/cortex-m4-emulator/link.lds @@ -63,6 +63,7 @@ SECTIONS PROVIDE(g_service_table_end = ABSOLUTE(.)); PROVIDE(_etext = ABSOLUTE(.)); + _exit = .; } > flash /* .ARM.exidx is sorted, so has to go in its own output section. */ diff --git a/Ubiquitous/XiZi_IIoT/board/stm32f407-st-discovery/config.mk b/Ubiquitous/XiZi_IIoT/board/stm32f407-st-discovery/config.mk index 6928d87a2..3c56b9815 100644 --- a/Ubiquitous/XiZi_IIoT/board/stm32f407-st-discovery/config.mk +++ b/Ubiquitous/XiZi_IIoT/board/stm32f407-st-discovery/config.mk @@ -1,9 +1,9 @@ export CROSS_COMPILE ?=/usr/bin/arm-none-eabi- -export CFLAGS := -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffunction-sections -fdata-sections -Dgcc -O0 -gdwarf-2 -g -fgnu89-inline -Wa,-mimplicit-it=thumb -export AFLAGS := -c -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffunction-sections -fdata-sections -x assembler-with-cpp -Wa,-mimplicit-it=thumb -gdwarf-2 +export CFLAGS := -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffunction-sections -fdata-sections -Dgcc -O0 -fgnu89-inline -Wa,-mimplicit-it=thumb +export AFLAGS := -c -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffunction-sections -fdata-sections -x assembler-with-cpp -Wa,-mimplicit-it=thumb export LFLAGS := -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffunction-sections -fdata-sections -Wl,--gc-sections,-Map=XiZi-stm32f407-st-discovery.map,-cref,-u,Reset_Handler -T $(BSP_ROOT)/link.lds -export CXXFLAGS := -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffunction-sections -fdata-sections -Dgcc -O0 -gdwarf-2 -g -Werror +export CXXFLAGS := -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffunction-sections -fdata-sections -Dgcc -O0 -Werror ifeq ($(CONFIG_LIB_MUSLLIB), y) export LFLAGS += -nostdlib -nostdinc -fno-builtin -nodefaultlibs diff --git a/Ubiquitous/XiZi_IIoT/board/stm32f407-st-discovery/link.lds b/Ubiquitous/XiZi_IIoT/board/stm32f407-st-discovery/link.lds index b3299549a..30c5cdc7d 100644 --- a/Ubiquitous/XiZi_IIoT/board/stm32f407-st-discovery/link.lds +++ b/Ubiquitous/XiZi_IIoT/board/stm32f407-st-discovery/link.lds @@ -63,6 +63,7 @@ SECTIONS PROVIDE(g_service_table_end = ABSOLUTE(.)); PROVIDE(_etext = ABSOLUTE(.)); + _exit = .; } > flash /* .ARM.exidx is sorted, so has to go in its own output section. */ diff --git a/Ubiquitous/XiZi_IIoT/path_kernel.mk b/Ubiquitous/XiZi_IIoT/path_kernel.mk index 0ea1dbee5..64a755aee 100755 --- a/Ubiquitous/XiZi_IIoT/path_kernel.mk +++ b/Ubiquitous/XiZi_IIoT/path_kernel.mk @@ -584,6 +584,13 @@ ifeq ($(CONFIG_TOOL_USING_MQTT), y) KERNELPATHS +=-I$(KERNEL_ROOT)/../../APP_Framework/lib/mqtt endif +ifeq ($(CONFIG_PKG_USING_JERRYSCRIPT), y) +KERNELPATHS += -I$(KERNEL_ROOT)/../../APP_Framework/lib/JerryScript +KERNELPATHS += -I$(KERNEL_ROOT)/../../APP_Framework/lib/JerryScript/jerryscript/jerry-core/include +KERNELPATHS += -I$(KERNEL_ROOT)/../../APP_Framework/lib/JerryScript/jerryscript/jerry-ext/include +KERNELPATHS += -I$(KERNEL_ROOT)/../../APP_Framework/lib/JerryScript/jerryscript/jerry-math/include +endif + ifeq ($(CONFIG_FS_LWEXT4),y) KERNELPATHS += -I$(KERNEL_ROOT)/fs/lwext4/lwext4_submodule/blockdev/xiuos # KERNELPATHS += -I$(KERNEL_ROOT)/fs/lwext4/lwext4_submodule/include #