You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2024/11/11 09:17:28 UTC
(nuttx-apps) 01/02: add CMakeLists.txt for quickjs
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git
commit 1adfefd88dc0c7204c83f152933c608583037d7d
Author: wenlingyun1 <we...@xiaomi.com>
AuthorDate: Tue Apr 30 10:10:35 2024 +0800
add CMakeLists.txt for quickjs
Signed-off-by: wenlingyun1 <we...@xiaomi.com>
---
interpreters/quickjs/CMakeLists.txt | 161 ++++++++++++++++++++++++++++++++++++
1 file changed, 161 insertions(+)
diff --git a/interpreters/quickjs/CMakeLists.txt b/interpreters/quickjs/CMakeLists.txt
new file mode 100644
index 000000000..78b32f940
--- /dev/null
+++ b/interpreters/quickjs/CMakeLists.txt
@@ -0,0 +1,161 @@
+# ##############################################################################
+# apps/interpreters/quickjs/CMakeLists.txt
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more contributor
+# license agreements. See the NOTICE file distributed with this work for
+# additional information regarding copyright ownership. The ASF licenses this
+# file to you 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.
+#
+# ##############################################################################
+
+if(CONFIG_INTERPRETERS_QUICKJS)
+ set(QUICKJS_DIR ${CMAKE_CURRENT_LIST_DIR}/quickjs)
+
+ if(NOT EXISTS ${QUICKJS_DIR})
+ set(QUICKJS_URL_BASE https://github.com/bellard/quickjs/archive/)
+
+ FetchContent_Declare(
+ quickjs_fetch
+ URL ${QUICKJS_URL_BASE}/refs/heads/master.zip SOURCE_DIR
+ ${CMAKE_CURRENT_LIST_DIR}/quickjs BINARY_DIR
+ ${CMAKE_BINARY_DIR}/apps/interpreters/quickjs/quickjs
+ PATCH_COMMAND
+ patch -p1 -d ${CMAKE_CURRENT_LIST_DIR}/quickjs <
+ ${CMAKE_CURRENT_LIST_DIR}/0001-Disabled-unsupported-feature-on-NuttX.patch
+ DOWNLOAD_NO_PROGRESS true
+ TIMEOUT 30)
+
+ FetchContent_GetProperties(quickjs)
+
+ if(NOT quickjs_fetch_POPULATED)
+ FetchContent_Populate(quickjs_fetch)
+ endif()
+ endif()
+
+ set(CMAKE_C_STANDARD 11)
+ set(CMAKE_CXX_STANDARD 17)
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
+ include(ExternalProject)
+
+ # add quickjs to global INCLUDE DIR
+ list(APPEND CFLAGS ${INCDIR_PREFIX}$(APPDIR)/interpreters/quickjs)
+ list(APPEND CXXFLAGS ${INCDIR_PREFIX}$(APPDIR)/interpreters/quickjs)
+ set_property(
+ TARGET nuttx
+ APPEND
+ PROPERTY NUTTX_INCLUDE_DIRECTORIES ${NUTTX_APPS_DIR}/interpreters/quickjs)
+ set(QUICKJS_VERSION "\"2020-11-08\"")
+ set(QUICKJS_FLAGS)
+ set(QUICKJS_INCDIR)
+ set(QUICKJS_CSRCS)
+ set(QUICKJS_SRCS)
+
+ if(CONFIG_INTERPRETERS_QUICKJS_MINI)
+ list(APPEND QUICKJS_SRCS qjsmini.c)
+ endif()
+
+ list(
+ APPEND
+ QUICKJS_FLAGS
+ -Wno-shadow
+ -Wno-array-bounds
+ -Wno-incompatible-pointer-types
+ -Wno-implicit-function-declaration
+ -Wno-unused-function
+ -Wno-format
+ -D__linux__
+ -DCONFIG_VERSION=${QUICKJS_VERSION}
+ -include
+ alloca.h)
+
+ list(APPEND QUICKJS_INCDIR ${QUICKJS_DIR})
+
+ list(
+ APPEND
+ QUICKJS_CSRCS
+ ${QUICKJS_DIR}/quickjs.c
+ ${QUICKJS_DIR}/libregexp.c
+ ${QUICKJS_DIR}/libbf.c
+ ${QUICKJS_DIR}/libunicode.c
+ ${QUICKJS_DIR}/cutils.c)
+
+ if(CONFIG_ARCH_ARM)
+ list(APPEND QUICKJS_FLAGS -DFE_TONEAREST=0x00000000)
+ list(APPEND QUICKJS_FLAGS -DFE_UPWARD=0x00400000)
+ list(APPEND QUICKJS_FLAGS -DFE_DOWNWARD=0x00800000)
+ list(APPEND QUICKJS_FLAGS -DFE_TOWARDZERO=0x00c00000)
+ endif()
+
+ if(CONFIG_INTERPRETERS_QUICKJS_BIGNUM)
+ list(APPEND QUICKJS_FLAGS -DCONFIG_BIGNUM)
+ list(APPEND QUICKJS_CSRCS ${CMAKE_CURRENT_BINARY_DIR}/qjscalc.c)
+ endif()
+
+ if(CONFIG_INTERPRETERS_QUICKJS_FULL)
+ add_custom_command(
+ PRE_BUILD
+ COMMAND ${CMAKE_CURRENT_BINARY_DIR}/qjsc -c -o
+ ${CMAKE_CURRENT_BINARY_DIR}/repl.c -m ${QUICKJS_DIR}/repl.js
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/repl.c
+ DEPENDS qjsc)
+ add_custom_command(
+ PRE_BUILD
+ COMMAND ${CMAKE_CURRENT_BINARY_DIR}/qjsc -fbignum -c -o
+ ${CMAKE_CURRENT_BINARY_DIR}/qjscalc.c ${QUICKJS_DIR}/qjscalc.js
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/qjscalc.c
+ DEPENDS qjsc)
+ list(APPEND QUICKJS_SRCS ${QUICKJS_DIR}/qjs.c
+ ${CMAKE_CURRENT_BINARY_DIR}/repl.c)
+ list(APPEND QUICKJS_CSRCS ${QUICKJS_DIR}/quickjs-libc.c)
+ endif()
+
+ nuttx_add_library(libqjs)
+ target_sources(libqjs PRIVATE ${QUICKJS_CSRCS})
+ target_include_directories(libqjs PRIVATE ${QUICKJS_INCDIR})
+ target_compile_options(libqjs PRIVATE ${QUICKJS_FLAGS})
+ nuttx_export_header(TARGET libqjs INCLUDE_DIRECTORIES ${QUICKJS_DIR})
+
+ if(NOT CONFIG_INTERPRETERS_QUICKJS_NONE)
+ set(QJS_PRIORITY ${CONFIG_INTERPRETERS_QUICKJS_PRIORITY})
+ set(QJS_STACKSIZE ${CONFIG_INTERPRETERS_QUICKJS_STACKSIZE})
+ nuttx_add_application(
+ NAME
+ qjs
+ PRIORITY
+ ${QJS_PRIORITY}
+ STACKSIZE
+ ${QJS_STACKSIZE}
+ SRCS
+ ${QUICKJS_SRCS}
+ INCLUDE_DIRECTORIES
+ ${QUICKJS_INCDIR}
+ COMPILE_FLAGS
+ ${QUICKJS_FLAGS}
+ DEPENDS
+ libqjs)
+ endif()
+
+ set(QUICKJS_LIB
+ ${CMAKE_CURRENT_BINARY_DIR}
+ CACHE INTERNAL "")
+
+ ExternalProject_Add(
+ qjsc
+ SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/quickjs
+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/
+ CMAKE_ARGS -DCONFIG_BIGNUM=${CONFIG_INTERPRETERS_QUICKJS_BIGNUM}
+ -DQUICKJS_VERSION=${QUICKJS_VERSION} -DAPPDIR=${NUTTX_APPS_DIR}
+ TEST_COMMAND ""
+ INSTALL_COMMAND "")
+
+endif()