@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,684 @@
1
+ project(
2
+ 'quickjs-ng',
3
+ 'c',
4
+ version: '0.12.1',
5
+ default_options: [
6
+ 'c_std=gnu11,c11',
7
+ 'warning_level=3',
8
+ ],
9
+ license: 'MIT',
10
+ license_files: 'LICENSE',
11
+ meson_version: '>=1.3.0',
12
+ )
13
+
14
+ host_system = host_machine.system()
15
+ cc = meson.get_compiler('c')
16
+
17
+ add_project_arguments('-DQUICKJS_NG_BUILD', language: 'c')
18
+
19
+ qjs_gcc_warning_args = [
20
+ '-Wno-unsafe-buffer-usage',
21
+ '-Wno-sign-conversion',
22
+ '-Wno-nonportable-system-include-path',
23
+ '-Wno-implicit-int-conversion',
24
+ '-Wno-shorten-64-to-32',
25
+ '-Wno-reserved-macro-identifier',
26
+ '-Wno-reserved-identifier',
27
+ '-Wdeprecated-declarations',
28
+
29
+ '-Wno-implicit-fallthrough',
30
+ '-Wno-sign-compare',
31
+ '-Wno-missing-field-initializers',
32
+ '-Wno-unused-parameter',
33
+ '-Wno-unused-but-set-variable',
34
+ '-Wno-array-bounds',
35
+ '-Wno-format-truncation',
36
+ ]
37
+ qjs_gcc_args = []
38
+
39
+ if host_system != 'sunos'
40
+ qjs_gcc_args += '-funsigned-char'
41
+ endif
42
+
43
+ if host_system == 'darwin'
44
+ # https://github.com/quickjs-ng/quickjs/issues/453
45
+ qjs_gcc_warning_args += '-Wno-maybe-uninitialized'
46
+ endif
47
+
48
+ # https://github.com/microsoft/cpp-docs/tree/main/docs/error-messages/compiler-warnings
49
+ qjs_msvc_warning_args = [
50
+ '/wd4018', # -Wno-sign-conversion
51
+ '/wd4061', # -Wno-implicit-fallthrough
52
+ '/wd4100', # -Wno-unused-parameter
53
+ '/wd4200', # -Wno-zero-length-array
54
+ '/wd4242', # -Wno-shorten-64-to-32
55
+ '/wd4244', # -Wno-shorten-64-to-32
56
+ '/wd4245', # -Wno-sign-compare
57
+ '/wd4267', # -Wno-shorten-64-to-32
58
+ '/wd4388', # -Wno-sign-compare
59
+ '/wd4389', # -Wno-sign-compare
60
+ '/wd4710', # Function not inlined
61
+ '/wd4711', # Function was inlined
62
+ '/wd4820', # Padding added after construct
63
+ '/wd4996', # -Wdeprecated-declarations
64
+ '/wd5045', # Compiler will insert Spectre mitigation for memory load if /Qspectre switch specified
65
+ ]
66
+ qjs_msvc_args = [
67
+ '/experimental:c11atomics',
68
+ '/J', # -funsigned-char
69
+ ]
70
+
71
+ if cc.get_argument_syntax() == 'msvc'
72
+ add_project_arguments(
73
+ cc.get_supported_arguments(qjs_msvc_warning_args),
74
+ cc.get_id().contains('clang') ? cc.get_supported_arguments(qjs_gcc_warning_args) : [],
75
+ qjs_msvc_args,
76
+ language: 'c',
77
+ )
78
+ else
79
+ add_project_arguments(
80
+ cc.get_supported_arguments(qjs_gcc_warning_args),
81
+ qjs_gcc_args,
82
+ language: 'c',
83
+ )
84
+ endif
85
+
86
+ if host_system == 'windows'
87
+ # Set a 8MB default stack size on Windows.
88
+ # It defaults to 1MB on MSVC, which is the same as our current JS stack size,
89
+ # so it will overflow and crash otherwise.
90
+ # On MinGW it defaults to 2MB.
91
+ stack_size = 8 * 1024 * 1024
92
+ if cc.get_argument_syntax() == 'msvc'
93
+ add_project_link_arguments(f'/STACK:@stack_size@', language: 'c')
94
+ else
95
+ add_project_link_arguments(f'-Wl,--stack,@stack_size@', language: 'c')
96
+ endif
97
+ endif
98
+
99
+ if meson.is_cross_build()
100
+ native_cc = meson.get_compiler('c', native: true)
101
+
102
+ if native_cc.get_argument_syntax() == 'msvc'
103
+ # https://github.com/microsoft/cpp-docs/tree/main/docs/error-messages/compiler-warnings
104
+ add_project_arguments(
105
+ native_cc.get_supported_arguments(qjs_msvc_warning_args),
106
+ native_cc.get_id().contains('clang') ? native_cc.get_supported_arguments(qjs_gcc_warning_args) : [],
107
+ qjs_msvc_args,
108
+
109
+ language: 'c',
110
+ native: true,
111
+ )
112
+ else
113
+ add_project_arguments(
114
+ native_cc.get_supported_arguments(qjs_gcc_warning_args),
115
+ qjs_gcc_args,
116
+
117
+ language: 'c',
118
+ native: true,
119
+ )
120
+ endif
121
+ endif
122
+ if get_option('debug')
123
+ add_project_arguments(
124
+ cc.get_supported_arguments('-fno-omit-frame-pointer'),
125
+ language: 'c',
126
+ )
127
+ endif
128
+
129
+ qjs_sys_deps = []
130
+
131
+ m_dep = cc.find_library('m', required: false)
132
+ qjs_sys_deps += m_dep
133
+ qjs_sys_deps += dependency('threads', required: false)
134
+ qjs_sys_deps += dependency('dl', required: false)
135
+
136
+ qjs_srcs = files(
137
+ 'dtoa.c',
138
+ 'libregexp.c',
139
+ 'libunicode.c',
140
+ 'quickjs.c',
141
+ )
142
+ qjs_hdrs = files(
143
+ 'quickjs.h',
144
+ )
145
+
146
+ qjs_libc = get_option('libc')
147
+ qjs_libc_srcs = files('quickjs-libc.c')
148
+ qjs_libc_hdrs = files('quickjs-libc.h')
149
+
150
+ if qjs_libc
151
+ qjs_hdrs += qjs_libc_hdrs
152
+ add_project_arguments(
153
+ '-DQJS_BUILD_LIBC',
154
+ language: 'c'
155
+ )
156
+ endif
157
+
158
+ qjs_parser = get_option('parser')
159
+
160
+ qjs_c_args = ['-D_GNU_SOURCE']
161
+
162
+ if host_system == 'windows'
163
+ qjs_c_args += ['-DWIN32_LEAN_AND_MEAN', '-D_WIN32_WINNT=0x0601']
164
+ endif
165
+
166
+ if not qjs_parser
167
+ qjs_c_args += ['-DQJS_DISABLE_PARSER']
168
+ endif
169
+
170
+ qjs_lib = library(
171
+ 'qjs',
172
+ qjs_srcs,
173
+ qjs_libc ? qjs_libc_srcs : [],
174
+
175
+ dependencies: qjs_sys_deps,
176
+ c_args: qjs_c_args,
177
+ c_shared_args: ['-DBUILDING_QJS_SHARED'],
178
+ gnu_symbol_visibility: 'hidden',
179
+
180
+ install: true,
181
+ version: meson.project_version(),
182
+ )
183
+
184
+ qjs_export_variables = [
185
+ f'have_parser=@qjs_parser@'
186
+ ]
187
+
188
+ # This note is only of interest on Windows.
189
+ # Be conservative here: only pass -DUSING_QJS_SHARED iff default_library ==
190
+ # 'shared', thus qjs is guaranteed to be a DLL. Not passing -DUSING_QJS_SHARED if
191
+ # qjs is a DLL is not harmful, but passing the definition for DLL qjs is desired.
192
+ # Conversely, if -DUSING_QJS_SHARED is passed for static qjs, the consumers
193
+ # will not compile.
194
+ qjs_dep_args = get_option('default_library') == 'shared' ? ['-DUSING_QJS_SHARED'] : []
195
+
196
+ qjs_dep = declare_dependency(
197
+ compile_args: qjs_dep_args,
198
+ link_with: qjs_lib,
199
+ dependencies: qjs_sys_deps,
200
+ include_directories: include_directories('.'),
201
+ variables: qjs_export_variables,
202
+ )
203
+
204
+ if host_system != 'windows'
205
+ qjs_module_dep = declare_dependency(
206
+ compile_args: [qjs_dep_args, '-DQUICKJS_NG_MODULE_BUILD'],
207
+ include_directories: include_directories('.'),
208
+ )
209
+ else
210
+ qjs_module_dep = declare_dependency(
211
+ compile_args: [qjs_dep_args, '-DQUICKJS_NG_MODULE_BUILD'],
212
+ include_directories: include_directories('.'),
213
+ # Windows can't resolve symbols at runtime thus we explicitly link to qjs.
214
+ dependencies: qjs_dep,
215
+ )
216
+ endif
217
+
218
+ if qjs_libc
219
+ qjs_libc_dep = declare_dependency(
220
+ include_directories: include_directories('.'),
221
+ dependencies: qjs_dep,
222
+ )
223
+ else
224
+ qjs_libc_lib = static_library(
225
+ 'quickjs-libc',
226
+ qjs_libc_srcs,
227
+
228
+ c_args: qjs_c_args,
229
+ dependencies: [qjs_sys_deps, qjs_dep],
230
+ gnu_symbol_visibility: 'hidden',
231
+ )
232
+ qjs_libc_dep = declare_dependency(
233
+ link_with: qjs_libc_lib,
234
+ # Pick up quickjs-libc.h.
235
+ include_directories: include_directories('.'),
236
+ )
237
+ endif
238
+
239
+ if host_system == 'emscripten'
240
+ qjs_wasm_export_name = 'getQuickJs'
241
+ executable(
242
+ 'qjs_wasm',
243
+ qjs_srcs,
244
+ link_args: cc.get_supported_link_arguments(
245
+ # in emscripten 3.x, this will be set to 16k which is too small for quickjs.
246
+ '-sSTACK_SIZE=@0@'.format(2 * 1024 * 1024), # let it be 2m = 2 * 1024 * 1024, otherwise, stack overflow may be occured at bootstrap
247
+ '-sNO_INVOKE_RUN',
248
+ '-sNO_EXIT_RUNTIME',
249
+ '-sMODULARIZE', # do not mess the global
250
+ '-sEXPORT_ES6', # export js file to morden es module
251
+ '-sEXPORT_NAME=@0@'.format(qjs_wasm_export_name), # give a name
252
+ '-sTEXTDECODER=1', # it will be 2 if we use -Oz, and that will cause js -> c string convertion fail
253
+ '-sNO_DEFAULT_TO_CXX', # this project is pure c project, no need for c plus plus handle
254
+ '-sEXPORTED_RUNTIME_METHODS=ccall,cwrap',
255
+ ),
256
+ dependencies: m_dep,
257
+ c_args: qjs_c_args,
258
+ )
259
+ endif
260
+
261
+ install_headers(qjs_hdrs, subdir: 'quickjs-ng')
262
+
263
+ if not meson.is_subproject()
264
+ docdir = get_option('docdir')
265
+ datadir = get_option('datadir')
266
+
267
+ if docdir == ''
268
+ docdir = datadir / 'doc' / meson.project_name()
269
+ endif
270
+ install_data(
271
+ 'LICENSE',
272
+ install_dir: docdir,
273
+
274
+ install_tag: 'doc',
275
+ )
276
+ install_subdir(
277
+ 'examples',
278
+ install_dir: docdir,
279
+
280
+ strip_directory: false,
281
+ install_tag: 'doc',
282
+ )
283
+ endif
284
+
285
+ meson.override_dependency('quickjs-ng', qjs_dep)
286
+
287
+ import('pkgconfig').generate(
288
+ qjs_lib,
289
+ subdirs: 'quickjs-ng',
290
+ name: 'quickjs-ng',
291
+ description: 'QuickJS, the Next Generation: a mighty JavaScript engine',
292
+ url: 'https://github.com/quickjs-ng/quickjs',
293
+ version: meson.project_version(),
294
+ variables: qjs_export_variables,
295
+ # Export -DUSING_QJS_SHARED, if needed, in the pkgconfig file.
296
+ extra_cflags: qjs_dep_args,
297
+ )
298
+
299
+ if not qjs_parser
300
+ subdir_done()
301
+ endif
302
+
303
+ # QuickJS bytecode compiler
304
+ qjsc_srcs = files(
305
+ 'qjsc.c',
306
+ )
307
+ qjsc_exe = executable(
308
+ 'qjsc',
309
+ qjsc_srcs,
310
+
311
+ c_args: qjs_c_args,
312
+ dependencies: [qjs_dep, qjs_libc_dep],
313
+ install: true,
314
+ )
315
+
316
+ mimalloc_dep = []
317
+ mimalloc_sys_dep = dependency('mimalloc', required: get_option('cli_mimalloc'))
318
+ if mimalloc_sys_dep.found()
319
+ mimalloc_dep = declare_dependency(
320
+ dependencies: mimalloc_sys_dep,
321
+ compile_args: '-DQJS_USE_MIMALLOC',
322
+ )
323
+ endif
324
+
325
+ # QuickJS CLI
326
+ qjs_exe_srcs = files(
327
+ 'gen/repl.c',
328
+ 'gen/standalone.c',
329
+ 'qjs.c',
330
+ )
331
+ qjs_exe = executable(
332
+ 'qjs',
333
+ qjs_exe_srcs,
334
+
335
+ c_args: qjs_c_args,
336
+ dependencies: [qjs_dep, qjs_libc_dep, mimalloc_dep],
337
+ export_dynamic: true,
338
+
339
+ install: true,
340
+ )
341
+
342
+ if meson.is_cross_build()
343
+ mimalloc_native_dep = []
344
+ mimalloc_sys_native_dep = dependency('mimalloc', required: get_option('cli_mimalloc'), native: true)
345
+ if mimalloc_sys_dep.found()
346
+ mimalloc_native_dep = declare_dependency(
347
+ dependencies: mimalloc_sys_native_dep,
348
+ compile_args: '-DQJS_USE_MIMALLOC',
349
+ )
350
+ endif
351
+
352
+ qjs_sys_native_deps = [
353
+ native_cc.find_library('m', required: false),
354
+ dependency('threads', required: false, native: true),
355
+ dependency('dl', required: false, native: true),
356
+ ]
357
+ qjs_native_lib = static_library(
358
+ 'qjs_native',
359
+ qjs_srcs,
360
+ qjs_libc_srcs,
361
+
362
+ dependencies: qjs_sys_native_deps,
363
+ c_args: qjs_c_args,
364
+ gnu_symbol_visibility: 'hidden',
365
+
366
+ build_by_default: false,
367
+ native: true,
368
+ install: false,
369
+ )
370
+
371
+ meson.override_find_program(
372
+ 'qjsc',
373
+ executable(
374
+ 'qjsc_native',
375
+ qjsc_srcs,
376
+
377
+ c_args: qjs_c_args,
378
+ link_with: qjs_native_lib,
379
+ dependencies: qjs_sys_native_deps,
380
+
381
+ build_by_default: false,
382
+ native: true,
383
+ install: false,
384
+ ),
385
+ )
386
+ meson.override_find_program(
387
+ 'qjs',
388
+ executable(
389
+ 'qjs_native',
390
+ qjs_exe_srcs,
391
+
392
+ c_args: qjs_c_args,
393
+ link_with: qjs_native_lib,
394
+ dependencies: [qjs_sys_native_deps, mimalloc_native_dep],
395
+ export_dynamic: true,
396
+
397
+ build_by_default: false,
398
+ native: true,
399
+ install: false,
400
+ ),
401
+ )
402
+ else
403
+ meson.override_find_program('qjsc', qjsc_exe)
404
+ meson.override_find_program('qjs', qjs_exe)
405
+ endif
406
+
407
+ tests = get_option('tests').disable_auto_if(meson.is_subproject())
408
+ examples = get_option('examples').disable_auto_if(meson.is_subproject())
409
+
410
+ if tests.allowed()
411
+ if host_system != 'emscripten'
412
+ # Test262 runner
413
+ run262_exe = executable(
414
+ 'run-test262',
415
+ 'run-test262.c',
416
+
417
+ c_args: qjs_c_args,
418
+ dependencies: [qjs_dep, qjs_libc_dep]
419
+ )
420
+
421
+ test(
422
+ 'test',
423
+ run262_exe,
424
+ args: ['-c', files('tests.conf')],
425
+ workdir: meson.current_source_dir(),
426
+ )
427
+
428
+ foreach bench : [
429
+ 'empty_loop',
430
+
431
+ 'date_now',
432
+
433
+ 'prop_read',
434
+ 'prop_write',
435
+ 'prop_create',
436
+ 'prop_delete',
437
+
438
+ 'array_read',
439
+ 'array_write',
440
+ 'array_prop_create',
441
+ 'array_length_decr',
442
+ 'array_hole_length_decr',
443
+ 'array_push',
444
+ 'array_pop',
445
+
446
+ 'typed_array_read',
447
+ 'typed_array_write',
448
+
449
+ 'global_read',
450
+ 'global_write',
451
+ 'global_write_strict',
452
+
453
+ 'local_destruct',
454
+ 'global_destruct',
455
+ 'global_destruct_strict',
456
+
457
+ 'func_call',
458
+ 'closure_var',
459
+
460
+ 'int_arith',
461
+ 'float_arith',
462
+
463
+ 'map_set',
464
+ 'map_delete',
465
+ 'weak_map_set',
466
+ 'weak_map_delete',
467
+
468
+ 'array_for',
469
+ 'array_for_in',
470
+ 'array_for_of',
471
+
472
+ 'math_min',
473
+
474
+ 'object_null',
475
+
476
+ 'regexp_ascii',
477
+ 'regexp_utf16',
478
+
479
+ 'string_build1',
480
+ 'string_build2',
481
+
482
+ 'string_slice1',
483
+ 'string_slice2',
484
+ 'string_slice3',
485
+
486
+ 'sort_bench',
487
+
488
+ 'int_to_string',
489
+ 'int_toString',
490
+
491
+ 'float_to_string',
492
+ 'float_toString',
493
+ 'float_toFixed',
494
+ 'float_toPrecision',
495
+ 'float_toExponential',
496
+
497
+ 'string_to_int',
498
+ 'string_to_float',
499
+
500
+ 'bigint64_arith',
501
+ 'bigint256_arith',
502
+ ]
503
+ benchmark(
504
+ bench,
505
+ qjs_exe,
506
+ args: [files('tests/microbench.js'), bench],
507
+ )
508
+ endforeach
509
+ endif
510
+
511
+ # API test
512
+ test(
513
+ 'api',
514
+ executable(
515
+ 'api-test',
516
+ 'api-test.c',
517
+
518
+ c_args: qjs_c_args,
519
+ dependencies: qjs_dep,
520
+ build_by_default: false,
521
+ ),
522
+ )
523
+
524
+ # LRE test
525
+ test(
526
+ 'lre',
527
+ executable(
528
+ 'lre-test',
529
+ 'lre-test.c',
530
+ 'libregexp.c',
531
+ 'libunicode.c',
532
+
533
+ c_args: qjs_c_args,
534
+ build_by_default: false,
535
+ ),
536
+ )
537
+
538
+ # Function.toString() test
539
+ test(
540
+ 'function_source',
541
+ executable(
542
+ 'function_source',
543
+ 'gen/function_source.c',
544
+
545
+ c_args: qjs_c_args,
546
+ dependencies: [qjs_dep, qjs_libc_dep],
547
+ build_by_default: false,
548
+ ),
549
+ )
550
+ endif
551
+
552
+ # Unicode generator
553
+ unicode_gen = executable(
554
+ 'unicode_gen',
555
+ 'unicode_gen.c',
556
+
557
+ c_args: qjs_c_args,
558
+ build_by_default: false,
559
+ )
560
+
561
+ run_target(
562
+ 'libunicode-table.h',
563
+ command: [
564
+ unicode_gen,
565
+ meson.current_source_dir() / 'unicode',
566
+ files('libunicode-table.h'),
567
+ ],
568
+ )
569
+
570
+ # bytecode to c source code for builtin and examples
571
+ alias_target('codegen',
572
+ run_target(
573
+ 'codegen_repl.c',
574
+ command: [
575
+ qjsc_exe,
576
+ '-ss',
577
+ '-o', files('gen/repl.c'),
578
+ '-m',
579
+ '-n', 'repl.js',
580
+ files('repl.js'),
581
+ ],
582
+ ),
583
+ run_target(
584
+ 'codegen_standalone.c',
585
+ command: [
586
+ qjsc_exe,
587
+ '-ss',
588
+ '-o', files('gen/standalone.c'),
589
+ '-m',
590
+ '-n', 'standalone.js',
591
+ files('standalone.js'),
592
+ ],
593
+ ),
594
+ run_target(
595
+ 'codegen_function_source.c',
596
+ command: [
597
+ qjsc_exe,
598
+ '-e',
599
+ '-o', files('gen/function_source.c'),
600
+ '-n', 'tests/function_source.js',
601
+ files('tests/function_source.js'),
602
+ ],
603
+ ),
604
+ run_target(
605
+ 'codegen_hello.c',
606
+ command: [
607
+ qjsc_exe,
608
+ '-e',
609
+ '-o', files('gen/hello.c'),
610
+ '-n', 'examples/hello.js',
611
+ files('examples/hello.js'),
612
+ ],
613
+ ),
614
+ run_target(
615
+ 'codegen_hello_module.c',
616
+ command: [
617
+ qjsc_exe,
618
+ '-e',
619
+ '-o', files('gen/hello_module.c'),
620
+ '-m',
621
+ '-n', 'examples/hello_module.js',
622
+ files('examples/hello_module.js'),
623
+ ],
624
+ ),
625
+ run_target(
626
+ 'codegen_test_fib.c',
627
+ command: [
628
+ qjsc_exe,
629
+ '-e',
630
+ '-o', files('gen/test_fib.c'),
631
+ '-m',
632
+ '-n', 'examples/test_fib.js',
633
+ files('examples/test_fib.js'),
634
+ ],
635
+ ),
636
+ run_target(
637
+ 'codegen_builtin-array-fromasync.h',
638
+ command: [
639
+ qjsc_exe,
640
+ '-C',
641
+ '-ss',
642
+ '-o', files('builtin-array-fromasync.h'),
643
+ '-n', 'builtin-array-fromasync.js',
644
+ files('builtin-array-fromasync.js'),
645
+ ],
646
+ ),
647
+ )
648
+
649
+ if examples.allowed()
650
+ if host_system == 'windows' and get_option('default_library') != 'shared'
651
+ warning('Binary modules used with static qjs on Windows.')
652
+ warning(
653
+ 'There might be runtime errors when the modules are used due to',
654
+ 'two copies of qjs in memory.'
655
+ )
656
+ warning('Please use "-Ddefault_library=shared" if possible.')
657
+ endif
658
+ executable(
659
+ 'hello',
660
+ 'gen/hello.c',
661
+
662
+ c_args: qjs_c_args,
663
+ dependencies: [qjs_dep, qjs_libc_dep]
664
+ )
665
+
666
+ executable(
667
+ 'hello_module',
668
+ 'gen/hello_module.c',
669
+
670
+ c_args: qjs_c_args,
671
+ dependencies: [qjs_dep, qjs_libc_dep]
672
+ )
673
+
674
+ subdir('examples')
675
+
676
+ executable(
677
+ 'test_fib',
678
+ 'gen/test_fib.c',
679
+
680
+ c_args: qjs_c_args,
681
+ dependencies: [qjs_dep, qjs_libc_dep],
682
+ export_dynamic: true,
683
+ )
684
+ endif
@@ -0,0 +1,6 @@
1
+ option('tests', type: 'feature', description: 'build tests')
2
+ option('examples', type: 'feature', description: 'build examples')
3
+ option('libc', type: 'boolean', value: false, description: 'build qjs standard library modules as part of the library')
4
+ option('cli_mimalloc', type: 'feature', value: 'disabled', description: 'build qjs cli with mimalloc')
5
+ option('docdir', type: 'string', description: 'documentation directory')
6
+ option('parser', type: 'boolean', value: true, description: 'Enable JS source code parser')