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()