@zappdev/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/README.md +55 -0
  2. package/dist/zapp-cli.js +9471 -0
  3. package/native/src/app/app.zc +490 -0
  4. package/native/src/event/event.zc +24 -0
  5. package/native/src/event/events.zc +70 -0
  6. package/native/src/platform/darwin/backend.zc +923 -0
  7. package/native/src/platform/darwin/backend_bootstrap.zc +9 -0
  8. package/native/src/platform/darwin/bootstrap.zc +9 -0
  9. package/native/src/platform/darwin/engine_jsc.zc +86 -0
  10. package/native/src/platform/darwin/engine_qjs.zc +92 -0
  11. package/native/src/platform/darwin/platform.zc +156 -0
  12. package/native/src/platform/darwin/webview.zc +550 -0
  13. package/native/src/platform/darwin/webview_bootstrap.zc +9 -0
  14. package/native/src/platform/darwin/window.zc +1223 -0
  15. package/native/src/platform/darwin/worker/common.zc +223 -0
  16. package/native/src/platform/darwin/worker/core/base64_core.zc +29 -0
  17. package/native/src/platform/darwin/worker/core/crypto_core.zc +19 -0
  18. package/native/src/platform/darwin/worker/core/encoding_core.zc +32 -0
  19. package/native/src/platform/darwin/worker/core/fetch_core.zc +145 -0
  20. package/native/src/platform/darwin/worker/core/url_core.zc +69 -0
  21. package/native/src/platform/darwin/worker/core/websocket_core.zc +179 -0
  22. package/native/src/platform/darwin/worker/dispatch.zc +55 -0
  23. package/native/src/platform/darwin/worker/jsc/base64_jsc.zc +39 -0
  24. package/native/src/platform/darwin/worker/jsc/crypto_jsc.zc +49 -0
  25. package/native/src/platform/darwin/worker/jsc/encoding_jsc.zc +86 -0
  26. package/native/src/platform/darwin/worker/jsc/fetch_jsc.zc +149 -0
  27. package/native/src/platform/darwin/worker/jsc/url_jsc.zc +54 -0
  28. package/native/src/platform/darwin/worker/jsc/websocket_jsc.zc +127 -0
  29. package/native/src/platform/darwin/worker/jsc.zc +670 -0
  30. package/native/src/platform/darwin/worker/mod.zc +30 -0
  31. package/native/src/platform/darwin/worker/qjs/fetch_qjs.zc +233 -0
  32. package/native/src/platform/darwin/worker/qjs/qjs_macros.zc +23 -0
  33. package/native/src/platform/darwin/worker/qjs/websocket_qjs.zc +223 -0
  34. package/native/src/platform/darwin/worker/qjs.zc +1053 -0
  35. package/native/src/platform/darwin/worker/timers.zc +149 -0
  36. package/native/src/platform/darwin/worker/timers_qjs.zc +209 -0
  37. package/native/src/platform/platform.zc +64 -0
  38. package/native/src/platform/shared/log.zc +156 -0
  39. package/native/src/platform/shared/worker/qjs/base64_qjs.zc +38 -0
  40. package/native/src/platform/shared/worker/qjs/crypto_qjs.zc +44 -0
  41. package/native/src/platform/shared/worker/qjs/encoding_qjs.zc +95 -0
  42. package/native/src/platform/shared/worker/qjs/url_qjs.zc +65 -0
  43. package/native/src/platform/shared/worker_registry.zc +206 -0
  44. package/native/src/platform/window.zc +446 -0
  45. package/native/src/platform/windows/backend.zc +452 -0
  46. package/native/src/platform/windows/backend_bootstrap.zc +9 -0
  47. package/native/src/platform/windows/bootstrap.zc +9 -0
  48. package/native/src/platform/windows/engine_qjs.zc +60 -0
  49. package/native/src/platform/windows/platform.zc +387 -0
  50. package/native/src/platform/windows/webview.zc +1175 -0
  51. package/native/src/platform/windows/webview_bootstrap.zc +9 -0
  52. package/native/src/platform/windows/window.zc +1271 -0
  53. package/native/src/platform/windows/worker/common.zc +409 -0
  54. package/native/src/platform/windows/worker/core/base64_core.zc +52 -0
  55. package/native/src/platform/windows/worker/core/crypto_core.zc +34 -0
  56. package/native/src/platform/windows/worker/core/encoding_core.zc +60 -0
  57. package/native/src/platform/windows/worker/core/fetch_core.zc +274 -0
  58. package/native/src/platform/windows/worker/core/url_core.zc +216 -0
  59. package/native/src/platform/windows/worker/core/websocket_core.zc +343 -0
  60. package/native/src/platform/windows/worker/dispatch.zc +34 -0
  61. package/native/src/platform/windows/worker/mod.zc +46 -0
  62. package/native/src/platform/windows/worker/qjs/fetch_qjs.zc +255 -0
  63. package/native/src/platform/windows/worker/qjs/websocket_qjs.zc +263 -0
  64. package/native/src/platform/windows/worker/qjs.zc +1049 -0
  65. package/native/src/platform/windows/worker/timers_qjs.zc +288 -0
  66. package/native/src/platform/worker.zc +8 -0
  67. package/native/src/service/service.zc +228 -0
  68. package/native/vendor/quickjs-ng/.gitattributes +4 -0
  69. package/native/vendor/quickjs-ng/.github/dependabot.yml +7 -0
  70. package/native/vendor/quickjs-ng/.github/workflows/ci.yml +812 -0
  71. package/native/vendor/quickjs-ng/.github/workflows/docs.yml +49 -0
  72. package/native/vendor/quickjs-ng/.github/workflows/release.yml +162 -0
  73. package/native/vendor/quickjs-ng/.github/workflows/test-docs.yml +23 -0
  74. package/native/vendor/quickjs-ng/.github/workflows/tsan.yml +32 -0
  75. package/native/vendor/quickjs-ng/.github/workflows/valgrind.yml +33 -0
  76. package/native/vendor/quickjs-ng/.gitmodules +5 -0
  77. package/native/vendor/quickjs-ng/CMakeLists.txt +553 -0
  78. package/native/vendor/quickjs-ng/LICENSE +24 -0
  79. package/native/vendor/quickjs-ng/Makefile +149 -0
  80. package/native/vendor/quickjs-ng/amalgam.js +53 -0
  81. package/native/vendor/quickjs-ng/api-test.c +927 -0
  82. package/native/vendor/quickjs-ng/builtin-array-fromasync.h +119 -0
  83. package/native/vendor/quickjs-ng/builtin-array-fromasync.js +36 -0
  84. package/native/vendor/quickjs-ng/builtin-iterator-zip-keyed.h +332 -0
  85. package/native/vendor/quickjs-ng/builtin-iterator-zip-keyed.js +194 -0
  86. package/native/vendor/quickjs-ng/builtin-iterator-zip.h +337 -0
  87. package/native/vendor/quickjs-ng/builtin-iterator-zip.js +210 -0
  88. package/native/vendor/quickjs-ng/ctest.c +17 -0
  89. package/native/vendor/quickjs-ng/cutils.h +2013 -0
  90. package/native/vendor/quickjs-ng/cxxtest.cc +2 -0
  91. package/native/vendor/quickjs-ng/dtoa.c +1619 -0
  92. package/native/vendor/quickjs-ng/dtoa.h +87 -0
  93. package/native/vendor/quickjs-ng/examples/fib.c +67 -0
  94. package/native/vendor/quickjs-ng/examples/fib_module.js +10 -0
  95. package/native/vendor/quickjs-ng/examples/hello.js +1 -0
  96. package/native/vendor/quickjs-ng/examples/hello_module.js +6 -0
  97. package/native/vendor/quickjs-ng/examples/meson.build +17 -0
  98. package/native/vendor/quickjs-ng/examples/pi_bigint.js +118 -0
  99. package/native/vendor/quickjs-ng/examples/point.c +154 -0
  100. package/native/vendor/quickjs-ng/examples/test_fib.js +8 -0
  101. package/native/vendor/quickjs-ng/examples/test_point.js +43 -0
  102. package/native/vendor/quickjs-ng/fuzz.c +51 -0
  103. package/native/vendor/quickjs-ng/gen/function_source.c +81 -0
  104. package/native/vendor/quickjs-ng/gen/hello.c +53 -0
  105. package/native/vendor/quickjs-ng/gen/hello_module.c +106 -0
  106. package/native/vendor/quickjs-ng/gen/repl.c +3053 -0
  107. package/native/vendor/quickjs-ng/gen/standalone.c +324 -0
  108. package/native/vendor/quickjs-ng/gen/test_fib.c +81 -0
  109. package/native/vendor/quickjs-ng/libregexp-opcode.h +58 -0
  110. package/native/vendor/quickjs-ng/libregexp.c +2687 -0
  111. package/native/vendor/quickjs-ng/libregexp.h +98 -0
  112. package/native/vendor/quickjs-ng/libunicode-table.h +4707 -0
  113. package/native/vendor/quickjs-ng/libunicode.c +1746 -0
  114. package/native/vendor/quickjs-ng/libunicode.h +126 -0
  115. package/native/vendor/quickjs-ng/list.h +107 -0
  116. package/native/vendor/quickjs-ng/lre-test.c +73 -0
  117. package/native/vendor/quickjs-ng/meson.build +684 -0
  118. package/native/vendor/quickjs-ng/meson_options.txt +6 -0
  119. package/native/vendor/quickjs-ng/qjs-wasi-reactor.c +208 -0
  120. package/native/vendor/quickjs-ng/qjs.c +748 -0
  121. package/native/vendor/quickjs-ng/qjsc.c +673 -0
  122. package/native/vendor/quickjs-ng/quickjs-atom.h +267 -0
  123. package/native/vendor/quickjs-ng/quickjs-c-atomics.h +54 -0
  124. package/native/vendor/quickjs-ng/quickjs-libc.c +4986 -0
  125. package/native/vendor/quickjs-ng/quickjs-libc.h +79 -0
  126. package/native/vendor/quickjs-ng/quickjs-opcode.h +369 -0
  127. package/native/vendor/quickjs-ng/quickjs.c +60259 -0
  128. package/native/vendor/quickjs-ng/quickjs.h +1419 -0
  129. package/native/vendor/quickjs-ng/repl.js +1927 -0
  130. package/native/vendor/quickjs-ng/run-test262.c +2417 -0
  131. package/native/vendor/quickjs-ng/standalone.js +129 -0
  132. package/native/vendor/quickjs-ng/tests/assert.js +49 -0
  133. package/native/vendor/quickjs-ng/tests/bug1221.js +16 -0
  134. package/native/vendor/quickjs-ng/tests/bug1296.js +12 -0
  135. package/native/vendor/quickjs-ng/tests/bug1297.js +22 -0
  136. package/native/vendor/quickjs-ng/tests/bug1301.js +21 -0
  137. package/native/vendor/quickjs-ng/tests/bug1302.js +24 -0
  138. package/native/vendor/quickjs-ng/tests/bug1305.js +26 -0
  139. package/native/vendor/quickjs-ng/tests/bug1318.js +54 -0
  140. package/native/vendor/quickjs-ng/tests/bug1352.js +8 -0
  141. package/native/vendor/quickjs-ng/tests/bug1354.js +6 -0
  142. package/native/vendor/quickjs-ng/tests/bug1355.js +58 -0
  143. package/native/vendor/quickjs-ng/tests/bug1368.js +9 -0
  144. package/native/vendor/quickjs-ng/tests/bug39/1.js +6 -0
  145. package/native/vendor/quickjs-ng/tests/bug39/2.js +6 -0
  146. package/native/vendor/quickjs-ng/tests/bug39/3.js +7 -0
  147. package/native/vendor/quickjs-ng/tests/bug488-upstream.js +7 -0
  148. package/native/vendor/quickjs-ng/tests/bug633/0.js +7 -0
  149. package/native/vendor/quickjs-ng/tests/bug633/1.js +4 -0
  150. package/native/vendor/quickjs-ng/tests/bug633/2.js +4 -0
  151. package/native/vendor/quickjs-ng/tests/bug633/3.js +4 -0
  152. package/native/vendor/quickjs-ng/tests/bug645/0.js +4 -0
  153. package/native/vendor/quickjs-ng/tests/bug645/1.js +9 -0
  154. package/native/vendor/quickjs-ng/tests/bug645/2.js +7 -0
  155. package/native/vendor/quickjs-ng/tests/bug648.js +13 -0
  156. package/native/vendor/quickjs-ng/tests/bug652.js +4 -0
  157. package/native/vendor/quickjs-ng/tests/bug741.js +19 -0
  158. package/native/vendor/quickjs-ng/tests/bug775.js +7 -0
  159. package/native/vendor/quickjs-ng/tests/bug776.js +7 -0
  160. package/native/vendor/quickjs-ng/tests/bug832.js +2 -0
  161. package/native/vendor/quickjs-ng/tests/bug858.js +26 -0
  162. package/native/vendor/quickjs-ng/tests/bug904.js +6 -0
  163. package/native/vendor/quickjs-ng/tests/bug988.js +7 -0
  164. package/native/vendor/quickjs-ng/tests/bug999.js +3 -0
  165. package/native/vendor/quickjs-ng/tests/destructured-export.js +8 -0
  166. package/native/vendor/quickjs-ng/tests/detect_module/0.js +1 -0
  167. package/native/vendor/quickjs-ng/tests/detect_module/1.js +2 -0
  168. package/native/vendor/quickjs-ng/tests/detect_module/2.js +1 -0
  169. package/native/vendor/quickjs-ng/tests/detect_module/3.js +8 -0
  170. package/native/vendor/quickjs-ng/tests/detect_module/4.js +3 -0
  171. package/native/vendor/quickjs-ng/tests/empty.js +0 -0
  172. package/native/vendor/quickjs-ng/tests/fixture_cyclic_import.js +2 -0
  173. package/native/vendor/quickjs-ng/tests/fixture_string_exports.js +12 -0
  174. package/native/vendor/quickjs-ng/tests/function_source.js +14 -0
  175. package/native/vendor/quickjs-ng/tests/microbench.js +1267 -0
  176. package/native/vendor/quickjs-ng/tests/null_or_undefined.js +38 -0
  177. package/native/vendor/quickjs-ng/tests/str-pad-leak.js +5 -0
  178. package/native/vendor/quickjs-ng/tests/test_bigint.js +107 -0
  179. package/native/vendor/quickjs-ng/tests/test_bjson.js +366 -0
  180. package/native/vendor/quickjs-ng/tests/test_builtin.js +1314 -0
  181. package/native/vendor/quickjs-ng/tests/test_closure.js +220 -0
  182. package/native/vendor/quickjs-ng/tests/test_cyclic_import.js +12 -0
  183. package/native/vendor/quickjs-ng/tests/test_domexception.js +35 -0
  184. package/native/vendor/quickjs-ng/tests/test_language.js +755 -0
  185. package/native/vendor/quickjs-ng/tests/test_loop.js +367 -0
  186. package/native/vendor/quickjs-ng/tests/test_queue_microtask.js +39 -0
  187. package/native/vendor/quickjs-ng/tests/test_std.js +340 -0
  188. package/native/vendor/quickjs-ng/tests/test_string_exports.js +25 -0
  189. package/native/vendor/quickjs-ng/tests/test_worker.js +43 -0
  190. package/native/vendor/quickjs-ng/tests/test_worker_module.js +30 -0
  191. package/native/vendor/quickjs-ng/tests.conf +14 -0
  192. package/native/vendor/quickjs-ng/unicode_download.sh +19 -0
  193. package/native/vendor/quickjs-ng/unicode_gen.c +3108 -0
  194. package/native/vendor/quickjs-ng/unicode_gen_def.h +310 -0
  195. package/native/vendor/quickjs-ng/update-version.sh +32 -0
  196. package/native/vendor/webview2/include/WebView2.h +60636 -0
  197. package/native/vendor/webview2/include/WebView2EnvironmentOptions.h +406 -0
  198. package/package.json +33 -0
  199. package/src/backend.ts +139 -0
  200. package/src/build-config.ts +87 -0
  201. package/src/build.ts +276 -0
  202. package/src/common.ts +195 -0
  203. package/src/config.ts +89 -0
  204. package/src/dev.ts +164 -0
  205. package/src/generate.ts +200 -0
  206. package/src/icons.ts +116 -0
  207. package/src/init.ts +190 -0
  208. package/src/package.ts +150 -0
  209. package/src/zapp-cli.ts +263 -0
@@ -0,0 +1,553 @@
1
+ cmake_minimum_required(VERSION 3.10)
2
+
3
+ project(quickjs LANGUAGES C)
4
+
5
+ include(CheckCCompilerFlag)
6
+ include(GNUInstallDirs)
7
+
8
+ set(CMAKE_C_VISIBILITY_PRESET hidden)
9
+ set(CMAKE_C_STANDARD_REQUIRED ON)
10
+ set(CMAKE_C_EXTENSIONS ON)
11
+ set(CMAKE_C_STANDARD 11)
12
+
13
+ macro(xoption OPTION_NAME OPTION_TEXT OPTION_DEFAULT)
14
+ option(${OPTION_NAME} ${OPTION_TEXT} ${OPTION_DEFAULT})
15
+ if(DEFINED ENV{${OPTION_NAME}})
16
+ # Allow setting the option through an environment variable.
17
+ set(${OPTION_NAME} $ENV{${OPTION_NAME}})
18
+ endif()
19
+ if(${OPTION_NAME})
20
+ add_definitions(-D${OPTION_NAME})
21
+ endif()
22
+ message(STATUS " ${OPTION_NAME}: ${${OPTION_NAME}}")
23
+ endmacro()
24
+
25
+ # note: QJS_ENABLE_TSAN is currently incompatible with the other sanitizers but we
26
+ # don't explicitly check for that because who knows what the future will bring?
27
+ # QJS_ENABLE_MSAN only works with clang at the time of writing; also not checked
28
+ # for the same reason
29
+ xoption(BUILD_SHARED_LIBS "Build a shared library" OFF)
30
+ # if we ever require CMake 3.21, we can automatically detect this setting by looking at PROJECT_IS_TOP_LEVEL
31
+ # similar to how glslang does
32
+ xoption(QJS_ENABLE_INSTALL "Enable quickjs installation" ON)
33
+ xoption(QJS_BUILD_WERROR "Build with -Werror" OFF)
34
+ xoption(QJS_BUILD_EXAMPLES "Build examples" OFF)
35
+ xoption(QJS_BUILD_CLI_STATIC "Build a static qjs executable" OFF)
36
+ xoption(QJS_BUILD_CLI_WITH_MIMALLOC "Build the qjs executable with mimalloc" OFF)
37
+ xoption(QJS_BUILD_CLI_WITH_STATIC_MIMALLOC "Build the qjs executable with mimalloc (statically linked)" OFF)
38
+ xoption(QJS_DISABLE_PARSER "Disable JS source code parser" OFF)
39
+ xoption(QJS_ENABLE_ASAN "Enable AddressSanitizer (ASan)" OFF)
40
+ xoption(QJS_ENABLE_MSAN "Enable MemorySanitizer (MSan)" OFF)
41
+ xoption(QJS_ENABLE_TSAN "Enable ThreadSanitizer (TSan)" OFF)
42
+ xoption(QJS_ENABLE_UBSAN "Enable UndefinedBehaviorSanitizer (UBSan)" OFF)
43
+
44
+ # Used to properly define JS_LIBC_EXTERN.
45
+ add_compile_definitions(QUICKJS_NG_BUILD)
46
+
47
+ # MINGW doesn't exist in older cmake versions, newer versions don't know
48
+ # about CMAKE_COMPILER_IS_MINGW, and there is no unique CMAKE_C_COMPILER_ID
49
+ # for mingw-based compilers...
50
+ if(MINGW)
51
+ # do nothing
52
+ elseif(CMAKE_C_COMPILER MATCHES "mingw")
53
+ set(MINGW TRUE)
54
+ else()
55
+ set(MINGW FALSE)
56
+ endif()
57
+
58
+ if(CMAKE_SYSTEM_NAME STREQUAL "tvOS")
59
+ set(TVOS TRUE)
60
+ else()
61
+ set(TVOS FALSE)
62
+ endif()
63
+ if(CMAKE_SYSTEM_NAME STREQUAL "watchOS")
64
+ set(WATCHOS TRUE)
65
+ else()
66
+ set(WATCHOS FALSE)
67
+ endif()
68
+
69
+ if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
70
+ set(SUNOS TRUE)
71
+ else()
72
+ set(SUNOS FALSE)
73
+ endif()
74
+
75
+ if(NOT CMAKE_BUILD_TYPE)
76
+ message(STATUS "No build type selected, default to Release")
77
+ set(CMAKE_BUILD_TYPE "Release")
78
+ endif()
79
+
80
+ message(STATUS "Building in ${CMAKE_BUILD_TYPE} mode")
81
+ message(STATUS "Building with ${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION} on ${CMAKE_SYSTEM}")
82
+
83
+ macro(xcheck_add_c_compiler_flag FLAG)
84
+ string(REPLACE "-" "" FLAG_NO_HYPHEN ${FLAG})
85
+ check_c_compiler_flag(${FLAG} COMPILER_SUPPORTS_${FLAG_NO_HYPHEN})
86
+ if(COMPILER_SUPPORTS_${FLAG_NO_HYPHEN})
87
+ add_compile_options(${FLAG})
88
+ endif()
89
+ endmacro()
90
+
91
+ xcheck_add_c_compiler_flag(-Wall)
92
+ if(NOT MSVC AND NOT IOS AND NOT TVOS AND NOT WATCHOS)
93
+ if(QJS_BUILD_WERROR)
94
+ xcheck_add_c_compiler_flag(-Werror)
95
+ endif()
96
+ xcheck_add_c_compiler_flag(-Wextra)
97
+ endif()
98
+ xcheck_add_c_compiler_flag(-Wformat=2)
99
+ xcheck_add_c_compiler_flag(-Wno-implicit-fallthrough)
100
+ xcheck_add_c_compiler_flag(-Wno-sign-compare)
101
+ xcheck_add_c_compiler_flag(-Wno-missing-field-initializers)
102
+ xcheck_add_c_compiler_flag(-Wno-unused-parameter)
103
+ xcheck_add_c_compiler_flag(-Wno-unused-but-set-variable)
104
+ xcheck_add_c_compiler_flag(-Wno-unused-result)
105
+ xcheck_add_c_compiler_flag(-Wno-stringop-truncation)
106
+ xcheck_add_c_compiler_flag(-Wno-array-bounds)
107
+ if(NOT SUNOS)
108
+ xcheck_add_c_compiler_flag(-funsigned-char)
109
+ endif()
110
+
111
+ # ClangCL is command line compatible with MSVC, so 'MSVC' is set.
112
+ if(MSVC)
113
+ xcheck_add_c_compiler_flag(-Wno-unsafe-buffer-usage)
114
+ xcheck_add_c_compiler_flag(-Wno-sign-conversion)
115
+ xcheck_add_c_compiler_flag(-Wno-nonportable-system-include-path)
116
+ xcheck_add_c_compiler_flag(-Wno-implicit-int-conversion)
117
+ xcheck_add_c_compiler_flag(-Wno-shorten-64-to-32)
118
+ xcheck_add_c_compiler_flag(-Wno-reserved-macro-identifier)
119
+ xcheck_add_c_compiler_flag(-Wno-reserved-identifier)
120
+ xcheck_add_c_compiler_flag(-Wdeprecated-declarations)
121
+ xcheck_add_c_compiler_flag(/experimental:c11atomics)
122
+ xcheck_add_c_compiler_flag(/wd4018) # -Wno-sign-conversion
123
+ xcheck_add_c_compiler_flag(/wd4061) # -Wno-implicit-fallthrough
124
+ xcheck_add_c_compiler_flag(/wd4100) # -Wno-unused-parameter
125
+ xcheck_add_c_compiler_flag(/wd4200) # -Wno-zero-length-array
126
+ xcheck_add_c_compiler_flag(/wd4242) # -Wno-shorten-64-to-32
127
+ xcheck_add_c_compiler_flag(/wd4244) # -Wno-shorten-64-to-32
128
+ xcheck_add_c_compiler_flag(/wd4245) # -Wno-sign-compare
129
+ xcheck_add_c_compiler_flag(/wd4267) # -Wno-shorten-64-to-32
130
+ xcheck_add_c_compiler_flag(/wd4388) # -Wno-sign-compare
131
+ xcheck_add_c_compiler_flag(/wd4389) # -Wno-sign-compare
132
+ xcheck_add_c_compiler_flag(/wd4456) # Hides previous local declaration
133
+ xcheck_add_c_compiler_flag(/wd4457) # Hides function parameter
134
+ xcheck_add_c_compiler_flag(/wd4710) # Function not inlined
135
+ xcheck_add_c_compiler_flag(/wd4711) # Function was inlined
136
+ xcheck_add_c_compiler_flag(/wd4820) # Padding added after construct
137
+ xcheck_add_c_compiler_flag(/wd4996) # -Wdeprecated-declarations
138
+ xcheck_add_c_compiler_flag(/wd5045) # Compiler will insert Spectre mitigation for memory load if /Qspectre switch specified
139
+ endif()
140
+
141
+ # Set a 8MB default stack size on Windows.
142
+ # It defaults to 1MB on MSVC, which is the same as our current JS stack size,
143
+ # so it will overflow and crash otherwise.
144
+ # On MinGW it defaults to 2MB.
145
+ if(WIN32)
146
+ if(MSVC)
147
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:8388608")
148
+ else()
149
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--stack,8388608")
150
+ endif()
151
+ endif()
152
+
153
+ # MacOS and GCC 11 or later need -Wno-maybe-uninitialized
154
+ # https://github.com/quickjs-ng/quickjs/issues/453
155
+ if(APPLE AND CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 11)
156
+ xcheck_add_c_compiler_flag(-Wno-maybe-uninitialized)
157
+ endif()
158
+
159
+ if(CMAKE_SYSTEM_NAME STREQUAL "WASI")
160
+ add_compile_definitions(
161
+ _WASI_EMULATED_PROCESS_CLOCKS
162
+ _WASI_EMULATED_SIGNAL
163
+ )
164
+ add_link_options(
165
+ -lwasi-emulated-process-clocks
166
+ -lwasi-emulated-signal
167
+ )
168
+ endif()
169
+
170
+ if(CMAKE_BUILD_TYPE MATCHES "Debug")
171
+ xcheck_add_c_compiler_flag(/Od)
172
+ xcheck_add_c_compiler_flag(-O0)
173
+ xcheck_add_c_compiler_flag(-ggdb)
174
+ xcheck_add_c_compiler_flag(-fno-omit-frame-pointer)
175
+ endif()
176
+
177
+ if(BUILD_SHARED_LIBS)
178
+ message(STATUS "Building a shared library")
179
+ endif()
180
+
181
+ if(QJS_ENABLE_ASAN)
182
+ message(STATUS "Building with ASan")
183
+ add_compile_options(
184
+ -fsanitize=address
185
+ -fno-sanitize-recover=all
186
+ -fno-omit-frame-pointer
187
+ )
188
+ add_link_options(
189
+ -fsanitize=address
190
+ -fno-sanitize-recover=all
191
+ -fno-omit-frame-pointer
192
+ )
193
+ endif()
194
+
195
+ if(QJS_ENABLE_MSAN)
196
+ message(STATUS "Building with MSan")
197
+ add_compile_options(
198
+ -fsanitize=memory
199
+ -fno-sanitize-recover=all
200
+ -fno-omit-frame-pointer
201
+ )
202
+ add_link_options(
203
+ -fsanitize=memory
204
+ -fno-sanitize-recover=all
205
+ -fno-omit-frame-pointer
206
+ )
207
+ endif()
208
+
209
+ if(QJS_ENABLE_TSAN)
210
+ message(STATUS "Building with TSan")
211
+ add_compile_options(
212
+ -fsanitize=thread
213
+ -fno-sanitize-recover=all
214
+ -fno-omit-frame-pointer
215
+ )
216
+ add_link_options(
217
+ -fsanitize=thread
218
+ -fno-sanitize-recover=all
219
+ -fno-omit-frame-pointer
220
+ )
221
+ endif()
222
+
223
+ if(QJS_ENABLE_UBSAN)
224
+ message(STATUS "Building with UBSan")
225
+ add_compile_options(
226
+ -fsanitize=undefined
227
+ -fno-sanitize-recover=all
228
+ -fno-omit-frame-pointer
229
+ )
230
+ add_link_options(
231
+ -fsanitize=undefined
232
+ -fno-sanitize-recover=all
233
+ -fno-omit-frame-pointer
234
+ )
235
+ endif()
236
+
237
+
238
+ # QuickJS library
239
+ #
240
+
241
+ xoption(QJS_BUILD_LIBC "Build standard library modules as part of the library" OFF)
242
+ macro(add_qjs_libc_if_needed target)
243
+ if(NOT QJS_BUILD_LIBC)
244
+ target_link_libraries(${target} PRIVATE qjs-libc)
245
+ endif()
246
+ endmacro()
247
+ macro(add_static_if_needed target)
248
+ if(QJS_BUILD_CLI_STATIC OR MINGW)
249
+ target_link_options(${target} PRIVATE -static)
250
+ if(MINGW)
251
+ target_link_options(${target} PRIVATE -static-libgcc)
252
+ endif()
253
+ endif()
254
+ endmacro()
255
+
256
+ set(qjs_sources
257
+ dtoa.c
258
+ libregexp.c
259
+ libunicode.c
260
+ quickjs.c
261
+ )
262
+
263
+ if(QJS_BUILD_LIBC)
264
+ list(APPEND qjs_sources quickjs-libc.c)
265
+ # The definition must be added to the entire project.
266
+ add_compile_definitions(QJS_BUILD_LIBC)
267
+ endif()
268
+ list(APPEND qjs_defines _GNU_SOURCE)
269
+ if(WIN32)
270
+ # NB: Windows 7 is EOL and we are only supporting in so far as it doesn't interfere with progress.
271
+ list(APPEND qjs_defines WIN32_LEAN_AND_MEAN _WIN32_WINNT=0x0601)
272
+ endif()
273
+ if(TVOS)
274
+ list(APPEND qjs_defines _TVOS)
275
+ endif()
276
+ if(WATCHOS)
277
+ list(APPEND qjs_defines _WATCHOS)
278
+ endif()
279
+ list(APPEND qjs_libs ${CMAKE_DL_LIBS})
280
+ find_package(Threads)
281
+ if(NOT CMAKE_SYSTEM_NAME STREQUAL "WASI")
282
+ list(APPEND qjs_libs ${CMAKE_THREAD_LIBS_INIT})
283
+ endif()
284
+
285
+ # try to find libm
286
+ find_library(M_LIBRARIES m)
287
+ if(M_LIBRARIES OR CMAKE_C_COMPILER_ID STREQUAL "TinyCC")
288
+ list(APPEND qjs_libs m)
289
+ endif()
290
+
291
+ add_library(qjs ${qjs_sources})
292
+ target_compile_definitions(qjs PRIVATE ${qjs_defines})
293
+ target_include_directories(qjs PUBLIC
294
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
295
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
296
+ )
297
+ target_link_libraries(qjs PUBLIC ${qjs_libs})
298
+
299
+ # Pass a compiler definition so that Windows gets its declspec's right.
300
+ get_target_property(QJS_LIB_TYPE qjs TYPE)
301
+ if(QJS_LIB_TYPE STREQUAL "SHARED_LIBRARY")
302
+ target_compile_definitions(qjs
303
+ PRIVATE BUILDING_QJS_SHARED
304
+ PUBLIC USING_QJS_SHARED
305
+ )
306
+ endif()
307
+
308
+ # An interface library for modules.
309
+ add_library(qjs_module_lib INTERFACE)
310
+ target_include_directories(qjs_module_lib INTERFACE
311
+ $<TARGET_PROPERTY:qjs,INTERFACE_INCLUDE_DIRECTORIES>
312
+ )
313
+ target_compile_definitions(qjs_module_lib INTERFACE
314
+ QUICKJS_NG_MODULE_BUILD
315
+ $<TARGET_PROPERTY:qjs,INTERFACE_COMPILE_DEFINITIONS>
316
+ )
317
+ if(WIN32)
318
+ # Since Windows cannot resolve symbols at load time, we need to
319
+ # explicitly link it to qjs.
320
+ target_link_libraries(qjs_module_lib INTERFACE
321
+ qjs
322
+ )
323
+ endif()
324
+
325
+ if(NOT QJS_BUILD_LIBC)
326
+ add_library(qjs-libc STATIC quickjs-libc.c)
327
+ target_compile_definitions(qjs-libc PRIVATE ${qjs_defines})
328
+ target_link_libraries(qjs-libc PRIVATE ${qjs_libs} qjs)
329
+ endif()
330
+
331
+ if(EMSCRIPTEN)
332
+ add_executable(qjs_wasm ${qjs_sources})
333
+ target_link_options(qjs_wasm PRIVATE
334
+ # in emscripten 3.x, this will be set to 16k which is too small for quickjs. #write sth. to force github rebuild
335
+ -sSTACK_SIZE=2097152 # let it be 2m = 2 * 1024 * 1024 = 2097152, otherwise, stack overflow may be occured at bootstrap
336
+ -sNO_INVOKE_RUN
337
+ -sNO_EXIT_RUNTIME
338
+ -sMODULARIZE # do not mess the global
339
+ -sEXPORT_ES6 # export js file to morden es module
340
+ -sEXPORT_NAME=getQuickJs # give a name
341
+ -sTEXTDECODER=1 # it will be 2 if we use -Oz, and that will cause js -> c string convertion fail
342
+ -sNO_DEFAULT_TO_CXX # this project is pure c project, no need for c plus plus handle
343
+ -sEXPORTED_RUNTIME_METHODS=ccall,cwrap
344
+ )
345
+ target_compile_definitions(qjs_wasm PRIVATE ${qjs_defines})
346
+ target_link_libraries(qjs_wasm PRIVATE m)
347
+ endif()
348
+
349
+
350
+ # QuickJS bytecode compiler
351
+ #
352
+
353
+ add_executable(qjsc
354
+ qjsc.c
355
+ )
356
+ add_qjs_libc_if_needed(qjsc)
357
+ add_static_if_needed(qjsc)
358
+ target_compile_definitions(qjsc PRIVATE ${qjs_defines})
359
+ target_link_libraries(qjsc PRIVATE qjs)
360
+
361
+
362
+ # QuickJS CLI
363
+ #
364
+
365
+ add_executable(qjs_exe
366
+ gen/repl.c
367
+ gen/standalone.c
368
+ qjs.c
369
+ )
370
+ add_qjs_libc_if_needed(qjs_exe)
371
+ add_static_if_needed(qjs_exe)
372
+ set_target_properties(qjs_exe PROPERTIES
373
+ OUTPUT_NAME "qjs"
374
+ )
375
+ target_compile_definitions(qjs_exe PRIVATE ${qjs_defines})
376
+ target_link_libraries(qjs_exe PRIVATE qjs)
377
+ if (NOT WIN32)
378
+ set_target_properties(qjs_exe PROPERTIES ENABLE_EXPORTS TRUE)
379
+ endif()
380
+
381
+ # WASI Reactor
382
+ #
383
+
384
+ if(CMAKE_SYSTEM_NAME STREQUAL "WASI")
385
+ option(QJS_WASI_REACTOR "Build WASI reactor (exports library functions, no _start)" OFF)
386
+ if(QJS_WASI_REACTOR)
387
+ add_executable(qjs_wasi
388
+ quickjs-libc.c
389
+ qjs-wasi-reactor.c
390
+ )
391
+ set_target_properties(qjs_wasi PROPERTIES
392
+ OUTPUT_NAME "qjs"
393
+ SUFFIX ".wasm"
394
+ )
395
+ target_compile_definitions(qjs_wasi PRIVATE ${qjs_defines})
396
+ target_link_libraries(qjs_wasi qjs)
397
+ target_link_options(qjs_wasi PRIVATE
398
+ -mexec-model=reactor
399
+ # Export all symbols with default visibility (JS_EXTERN functions)
400
+ -Wl,--export-dynamic
401
+ # Memory management (libc symbols need explicit export)
402
+ -Wl,--export=malloc
403
+ -Wl,--export=free
404
+ -Wl,--export=realloc
405
+ -Wl,--export=calloc
406
+ )
407
+ endif()
408
+ endif()
409
+
410
+ if(QJS_BUILD_CLI_WITH_MIMALLOC OR QJS_BUILD_CLI_WITH_STATIC_MIMALLOC)
411
+ find_package(mimalloc REQUIRED)
412
+ # Upstream mimalloc doesn't provide a way to know if both libraries are supported.
413
+ if(QJS_BUILD_CLI_WITH_STATIC_MIMALLOC)
414
+ target_link_libraries(qjs_exe PRIVATE mimalloc-static)
415
+ else()
416
+ target_link_libraries(qjs_exe PRIVATE mimalloc)
417
+ endif()
418
+ endif()
419
+
420
+ # Test262 runner
421
+ #
422
+
423
+ if(NOT EMSCRIPTEN)
424
+ add_executable(run-test262
425
+ run-test262.c
426
+ )
427
+ add_qjs_libc_if_needed(run-test262)
428
+ target_compile_definitions(run-test262 PRIVATE ${qjs_defines})
429
+ target_link_libraries(run-test262 PRIVATE qjs)
430
+ endif()
431
+
432
+ # Interrupt test
433
+ #
434
+
435
+ add_executable(api-test
436
+ api-test.c
437
+ )
438
+ target_compile_definitions(api-test PRIVATE ${qjs_defines})
439
+ target_link_libraries(api-test PRIVATE qjs)
440
+
441
+ add_executable(lre-test
442
+ lre-test.c
443
+ libregexp.c
444
+ libunicode.c
445
+ )
446
+ target_compile_definitions(lre-test PRIVATE ${qjs_defines})
447
+
448
+ # Unicode generator
449
+ #
450
+
451
+ add_executable(unicode_gen EXCLUDE_FROM_ALL
452
+ libunicode.c
453
+ unicode_gen.c
454
+ )
455
+ target_compile_definitions(unicode_gen PRIVATE ${qjs_defines})
456
+
457
+ add_executable(function_source
458
+ gen/function_source.c
459
+ )
460
+ add_qjs_libc_if_needed(function_source)
461
+ target_include_directories(function_source PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
462
+ target_compile_definitions(function_source PRIVATE ${qjs_defines})
463
+ target_link_libraries(function_source PRIVATE qjs)
464
+
465
+ # Examples
466
+ #
467
+
468
+ if(QJS_BUILD_EXAMPLES)
469
+ if(WIN32 AND NOT (QJS_LIB_TYPE STREQUAL "SHARED_LIBRARY"))
470
+ message(AUTHOR_WARNING
471
+ "Binary modules used with static qjs on Windows. There might be\n"
472
+ "runtime errors when the module is used due to two copies of qjs\n"
473
+ "in memory.\n"
474
+ "Please use \"-DBUILD_SHARED_LIBS=true\" if possible."
475
+ )
476
+ endif()
477
+
478
+ add_executable(hello
479
+ gen/hello.c
480
+ )
481
+ add_qjs_libc_if_needed(hello)
482
+ target_include_directories(hello PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
483
+ target_compile_definitions(hello PRIVATE ${qjs_defines})
484
+ target_link_libraries(hello PRIVATE qjs)
485
+
486
+ add_executable(hello_module
487
+ gen/hello_module.c
488
+ )
489
+ add_qjs_libc_if_needed(hello_module)
490
+ target_include_directories(hello_module PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
491
+ target_compile_definitions(hello_module PRIVATE ${qjs_defines})
492
+ target_link_libraries(hello_module PRIVATE qjs)
493
+
494
+ add_library(fib MODULE examples/fib.c)
495
+ set_target_properties(fib PROPERTIES
496
+ PREFIX ""
497
+ )
498
+ target_link_libraries(fib PRIVATE qjs_module_lib)
499
+ if(APPLE)
500
+ target_link_options(fib PRIVATE -undefined dynamic_lookup)
501
+ endif()
502
+
503
+ add_library(point MODULE examples/point.c)
504
+ set_target_properties(point PROPERTIES
505
+ PREFIX ""
506
+ )
507
+ target_link_libraries(point PRIVATE qjs_module_lib)
508
+ if(APPLE)
509
+ target_link_options(point PRIVATE -undefined dynamic_lookup)
510
+ endif()
511
+
512
+ add_executable(test_fib
513
+ gen/test_fib.c
514
+ )
515
+ add_qjs_libc_if_needed(test_fib)
516
+ target_include_directories(test_fib PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
517
+ target_compile_definitions(test_fib PRIVATE ${qjs_defines})
518
+ target_link_libraries(test_fib PRIVATE qjs)
519
+ # Loads fib.so which depends on symbols from libqjs.
520
+ set_target_properties(test_fib PROPERTIES ENABLE_EXPORTS TRUE)
521
+ endif()
522
+
523
+ # Install target
524
+ #
525
+
526
+ if (QJS_ENABLE_INSTALL)
527
+ file(STRINGS quickjs.h quickjs_h REGEX QJS_VERSION)
528
+ string(REGEX MATCH "QJS_VERSION_MAJOR ([0-9]*)" _ "${quickjs_h}")
529
+ set(QJS_VERSION_MAJOR ${CMAKE_MATCH_1})
530
+ string(REGEX MATCH "QJS_VERSION_MINOR ([0-9]*)" _ "${quickjs_h}")
531
+ set(QJS_VERSION_MINOR ${CMAKE_MATCH_1})
532
+ string(REGEX MATCH "QJS_VERSION_PATCH ([0-9]*)" _ "${quickjs_h}")
533
+ set(QJS_VERSION_PATCH ${CMAKE_MATCH_1})
534
+ set_target_properties(qjs PROPERTIES
535
+ VERSION ${QJS_VERSION_MAJOR}.${QJS_VERSION_MINOR}.${QJS_VERSION_PATCH}
536
+ SOVERSION ${QJS_VERSION_MAJOR}
537
+ )
538
+ install(FILES quickjs.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
539
+ if(QJS_BUILD_LIBC)
540
+ install(FILES quickjs-libc.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
541
+ endif()
542
+ if(NOT IOS AND NOT TVOS AND NOT WATCHOS)
543
+ install(TARGETS qjs_exe RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
544
+ install(TARGETS qjsc RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
545
+ endif()
546
+ install(TARGETS qjs EXPORT qjsConfig
547
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
548
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
549
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
550
+ install(EXPORT qjsConfig DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/quickjs)
551
+ install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR})
552
+ install(DIRECTORY examples DESTINATION ${CMAKE_INSTALL_DOCDIR})
553
+ endif()
@@ -0,0 +1,24 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2017-2026 Fabrice Bellard
4
+ Copyright (c) 2017-2024 Charlie Gordon
5
+ Copyright (c) 2023-2026 Ben Noordhuis
6
+ Copyright (c) 2023-2026 Saúl Ibarra Corretgé
7
+
8
+ Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ of this software and associated documentation files (the "Software"), to deal
10
+ in the Software without restriction, including without limitation the rights
11
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
+ copies of the Software, and to permit persons to whom the Software is
13
+ furnished to do so, subject to the following conditions:
14
+
15
+ The above copyright notice and this permission notice shall be included in
16
+ all copies or substantial portions of the Software.
17
+
18
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
+ THE SOFTWARE.