Skip to content

Commit 1adfefd

Browse files
WenLY1xiaoxiang781216
authored andcommitted
add CMakeLists.txt for quickjs
Signed-off-by: wenlingyun1 <wenlingyun1@xiaomi.com>
1 parent b3e1077 commit 1adfefd

File tree

1 file changed

+161
-0
lines changed

1 file changed

+161
-0
lines changed

interpreters/quickjs/CMakeLists.txt

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
# ##############################################################################
2+
# apps/interpreters/quickjs/CMakeLists.txt
3+
#
4+
# Licensed to the Apache Software Foundation (ASF) under one or more contributor
5+
# license agreements. See the NOTICE file distributed with this work for
6+
# additional information regarding copyright ownership. The ASF licenses this
7+
# file to you under the Apache License, Version 2.0 (the "License"); you may not
8+
# use this file except in compliance with the License. You may obtain a copy of
9+
# the License at
10+
#
11+
# http://www.apache.org/licenses/LICENSE-2.0
12+
#
13+
# Unless required by applicable law or agreed to in writing, software
14+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
16+
# License for the specific language governing permissions and limitations under
17+
# the License.
18+
#
19+
# ##############################################################################
20+
21+
if(CONFIG_INTERPRETERS_QUICKJS)
22+
set(QUICKJS_DIR ${CMAKE_CURRENT_LIST_DIR}/quickjs)
23+
24+
if(NOT EXISTS ${QUICKJS_DIR})
25+
set(QUICKJS_URL_BASE https://github.com/bellard/quickjs/archive/)
26+
27+
FetchContent_Declare(
28+
quickjs_fetch
29+
URL ${QUICKJS_URL_BASE}/refs/heads/master.zip SOURCE_DIR
30+
${CMAKE_CURRENT_LIST_DIR}/quickjs BINARY_DIR
31+
${CMAKE_BINARY_DIR}/apps/interpreters/quickjs/quickjs
32+
PATCH_COMMAND
33+
patch -p1 -d ${CMAKE_CURRENT_LIST_DIR}/quickjs <
34+
${CMAKE_CURRENT_LIST_DIR}/0001-Disabled-unsupported-feature-on-NuttX.patch
35+
DOWNLOAD_NO_PROGRESS true
36+
TIMEOUT 30)
37+
38+
FetchContent_GetProperties(quickjs)
39+
40+
if(NOT quickjs_fetch_POPULATED)
41+
FetchContent_Populate(quickjs_fetch)
42+
endif()
43+
endif()
44+
45+
set(CMAKE_C_STANDARD 11)
46+
set(CMAKE_CXX_STANDARD 17)
47+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
48+
include(ExternalProject)
49+
50+
# add quickjs to global INCLUDE DIR
51+
list(APPEND CFLAGS ${INCDIR_PREFIX}$(APPDIR)/interpreters/quickjs)
52+
list(APPEND CXXFLAGS ${INCDIR_PREFIX}$(APPDIR)/interpreters/quickjs)
53+
set_property(
54+
TARGET nuttx
55+
APPEND
56+
PROPERTY NUTTX_INCLUDE_DIRECTORIES ${NUTTX_APPS_DIR}/interpreters/quickjs)
57+
set(QUICKJS_VERSION "\"2020-11-08\"")
58+
set(QUICKJS_FLAGS)
59+
set(QUICKJS_INCDIR)
60+
set(QUICKJS_CSRCS)
61+
set(QUICKJS_SRCS)
62+
63+
if(CONFIG_INTERPRETERS_QUICKJS_MINI)
64+
list(APPEND QUICKJS_SRCS qjsmini.c)
65+
endif()
66+
67+
list(
68+
APPEND
69+
QUICKJS_FLAGS
70+
-Wno-shadow
71+
-Wno-array-bounds
72+
-Wno-incompatible-pointer-types
73+
-Wno-implicit-function-declaration
74+
-Wno-unused-function
75+
-Wno-format
76+
-D__linux__
77+
-DCONFIG_VERSION=${QUICKJS_VERSION}
78+
-include
79+
alloca.h)
80+
81+
list(APPEND QUICKJS_INCDIR ${QUICKJS_DIR})
82+
83+
list(
84+
APPEND
85+
QUICKJS_CSRCS
86+
${QUICKJS_DIR}/quickjs.c
87+
${QUICKJS_DIR}/libregexp.c
88+
${QUICKJS_DIR}/libbf.c
89+
${QUICKJS_DIR}/libunicode.c
90+
${QUICKJS_DIR}/cutils.c)
91+
92+
if(CONFIG_ARCH_ARM)
93+
list(APPEND QUICKJS_FLAGS -DFE_TONEAREST=0x00000000)
94+
list(APPEND QUICKJS_FLAGS -DFE_UPWARD=0x00400000)
95+
list(APPEND QUICKJS_FLAGS -DFE_DOWNWARD=0x00800000)
96+
list(APPEND QUICKJS_FLAGS -DFE_TOWARDZERO=0x00c00000)
97+
endif()
98+
99+
if(CONFIG_INTERPRETERS_QUICKJS_BIGNUM)
100+
list(APPEND QUICKJS_FLAGS -DCONFIG_BIGNUM)
101+
list(APPEND QUICKJS_CSRCS ${CMAKE_CURRENT_BINARY_DIR}/qjscalc.c)
102+
endif()
103+
104+
if(CONFIG_INTERPRETERS_QUICKJS_FULL)
105+
add_custom_command(
106+
PRE_BUILD
107+
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/qjsc -c -o
108+
${CMAKE_CURRENT_BINARY_DIR}/repl.c -m ${QUICKJS_DIR}/repl.js
109+
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/repl.c
110+
DEPENDS qjsc)
111+
add_custom_command(
112+
PRE_BUILD
113+
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/qjsc -fbignum -c -o
114+
${CMAKE_CURRENT_BINARY_DIR}/qjscalc.c ${QUICKJS_DIR}/qjscalc.js
115+
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/qjscalc.c
116+
DEPENDS qjsc)
117+
list(APPEND QUICKJS_SRCS ${QUICKJS_DIR}/qjs.c
118+
${CMAKE_CURRENT_BINARY_DIR}/repl.c)
119+
list(APPEND QUICKJS_CSRCS ${QUICKJS_DIR}/quickjs-libc.c)
120+
endif()
121+
122+
nuttx_add_library(libqjs)
123+
target_sources(libqjs PRIVATE ${QUICKJS_CSRCS})
124+
target_include_directories(libqjs PRIVATE ${QUICKJS_INCDIR})
125+
target_compile_options(libqjs PRIVATE ${QUICKJS_FLAGS})
126+
nuttx_export_header(TARGET libqjs INCLUDE_DIRECTORIES ${QUICKJS_DIR})
127+
128+
if(NOT CONFIG_INTERPRETERS_QUICKJS_NONE)
129+
set(QJS_PRIORITY ${CONFIG_INTERPRETERS_QUICKJS_PRIORITY})
130+
set(QJS_STACKSIZE ${CONFIG_INTERPRETERS_QUICKJS_STACKSIZE})
131+
nuttx_add_application(
132+
NAME
133+
qjs
134+
PRIORITY
135+
${QJS_PRIORITY}
136+
STACKSIZE
137+
${QJS_STACKSIZE}
138+
SRCS
139+
${QUICKJS_SRCS}
140+
INCLUDE_DIRECTORIES
141+
${QUICKJS_INCDIR}
142+
COMPILE_FLAGS
143+
${QUICKJS_FLAGS}
144+
DEPENDS
145+
libqjs)
146+
endif()
147+
148+
set(QUICKJS_LIB
149+
${CMAKE_CURRENT_BINARY_DIR}
150+
CACHE INTERNAL "")
151+
152+
ExternalProject_Add(
153+
qjsc
154+
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/quickjs
155+
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/
156+
CMAKE_ARGS -DCONFIG_BIGNUM=${CONFIG_INTERPRETERS_QUICKJS_BIGNUM}
157+
-DQUICKJS_VERSION=${QUICKJS_VERSION} -DAPPDIR=${NUTTX_APPS_DIR}
158+
TEST_COMMAND ""
159+
INSTALL_COMMAND "")
160+
161+
endif()

0 commit comments

Comments
 (0)