1- set (SM_REV b02d76023a15a3fa8c8f54bff5dac91099669003 )
1+ set (SM_TAG FIREFOX_140_0_4_RELEASE_STARLING )
22
33if (CMAKE_BUILD_TYPE STREQUAL "Debug" )
44 set (SM_BUILD_TYPE debug)
55else ()
66 set (SM_BUILD_TYPE release)
77endif ()
8- set (SM_BUILD_TYPE_DASH ${SM_BUILD_TYPE} )
98
109option (WEVAL "Build with a SpiderMonkey variant that supports weval-based AOT compilation" OFF )
1110
1211if (WEVAL)
13- set (SM_BUILD_TYPE_DASH "${SM_BUILD_TYPE} -weval" )
1412 set (SM_BUILD_TYPE "${SM_BUILD_TYPE} _weval" )
1513endif ()
1614
@@ -21,25 +19,93 @@ endif()
2119# This can be set, for example, to the output directly (`release/` or `debug/`)
2220# under a local clone of the `spidermonkey-wasi-embedding` repo.
2321if (DEFINED ENV{SPIDERMONKEY_BINARIES})
24- set (SM_SOURCE_DIR $ENV{SPIDERMONKEY_BINARIES} )
22+ set (SM_LIB_DIR $ENV{SPIDERMONKEY_BINARIES} )
23+ message (STATUS "Using pre-built SpiderMonkey artifacts from local directory ${SM_LIB_DIR} " )
2524else ()
26- CPMAddPackage (NAME spidermonkey-${SM_BUILD_TYPE}
27- URL https://github.com/bytecodealliance/spidermonkey-wasi-embedding/releases/download/rev_${SM_REV}/spidermonkey-wasm-static-lib_${SM_BUILD_TYPE}.tar.gz
28- DOWNLOAD_ONLY YES
25+ set (SM_URL https://github.com/bytecodealliance/starlingmonkey/releases/download/libspidermonkey_${SM_TAG} /spidermonkey-static-${SM_BUILD_TYPE} .tar.gz)
26+ execute_process (
27+ COMMAND curl -s -o /dev/null -w "%{http_code}" ${SM_URL}
28+ RESULT_VARIABLE CURL_RESULT
29+ OUTPUT_VARIABLE HTTP_STATUS
2930 )
3031
31- set (SM_SOURCE_DIR ${CPM_PACKAGE_spidermonkey-${SM_BUILD_TYPE} _SOURCE_DIR} CACHE STRING "Path to spidermonkey ${SM_BUILD_TYPE} build" FORCE )
32+ if (CURL_RESULT EQUAL 0 AND HTTP_STATUS STREQUAL "200" )
33+ message (STATUS "Using pre-built SpiderMonkey artifacts from ${SM_URL} " )
34+ CPMAddPackage (NAME spidermonkey-${SM_BUILD_TYPE}
35+ URL ${SM_URL}
36+ DOWNLOAD_ONLY YES
37+ )
38+ set (SM_LIB_DIR ${CPM_PACKAGE_spidermonkey-${SM_BUILD_TYPE} _SOURCE_DIR} CACHE STRING "Path to spidermonkey ${SM_BUILD_TYPE} build" FORCE )
39+ else ()
40+ message (STATUS "No pre-built ${SM_BUILD_TYPE} SpiderMonkey artifacts available for tag ${SM_TAG} . Building from source." )
41+ endif ()
3242endif ()
3343
34- set (SM_INCLUDE_DIR ${SM_SOURCE_DIR} /include)
35-
3644file (WRITE ${CMAKE_CURRENT_BINARY_DIR} /null.cpp "" )
37- file (GLOB SM_OBJS ${SM_SOURCE_DIR} /lib/*.o )
3845
39- add_library (spidermonkey STATIC )
40- target_sources (spidermonkey PRIVATE ${SM_OBJS} ${CMAKE_CURRENT_BINARY_DIR} /null.cpp )
41- target_include_directories (spidermonkey PUBLIC ${SM_INCLUDE_DIR} )
42- target_link_libraries (spidermonkey PUBLIC ${SM_SOURCE_DIR} /lib/libjs_static.a )
46+ if (DEFINED SM_LIB_DIR)
47+ set (SM_INCLUDE_DIR ${SM_LIB_DIR} /include)
48+
49+ file (GLOB SM_OBJS ${SM_LIB_DIR} /lib/*.o )
50+
51+ add_library (spidermonkey STATIC )
52+ target_sources (spidermonkey PRIVATE ${SM_OBJS} ${CMAKE_CURRENT_BINARY_DIR} /null.cpp )
53+ target_include_directories (spidermonkey PUBLIC ${SM_INCLUDE_DIR} )
54+ target_link_libraries (spidermonkey PUBLIC ${SM_LIB_DIR} /lib/libjs_static.a )
55+ else ()
56+ CPMAddPackage (NAME gecko-source
57+ GIT_REPOSITORY "https://github.com/bytecodealliance/firefox.git"
58+ GIT_TAG "${SM_TAG} "
59+ DOWNLOAD_ONLY YES
60+ )
61+ set (SM_SOURCE_DIR ${CPM_PACKAGE_gecko-source_SOURCE_DIR })
62+ set (SM_OBJ_DIR ${CMAKE_CURRENT_BINARY_DIR} /sm-obj-${SM_BUILD_TYPE} )
63+ set (SM_INCLUDE_DIR "${SM_OBJ_DIR} /dist/include" )
64+
65+ # Additional obj files needed, but not part of libjs_static.a
66+ set (SM_OBJ_FILES
67+ memory/build/Unified_cpp_memory_build0.o
68+ memory/mozalloc/Unified_cpp_memory_mozalloc0.o
69+ mfbt/Unified_cpp_mfbt0.o
70+ mfbt/Unified_cpp_mfbt1.o
71+ mozglue/misc/AutoProfilerLabel.o
72+ mozglue/misc/ConditionVariable_noop.o
73+ mozglue/misc/Debug.o
74+ mozglue/misc/Decimal.o
75+ mozglue/misc/MmapFaultHandler.o
76+ mozglue/misc/Mutex_noop.o
77+ mozglue/misc/Now.o
78+ mozglue/misc/Printf.o
79+ mozglue/misc/SIMD.o
80+ mozglue/misc/StackWalk.o
81+ mozglue/misc/TimeStamp.o
82+ mozglue/misc/TimeStamp_posix.o
83+ mozglue/misc/Uptime.o
84+ mozglue/static/lz4.o
85+ mozglue/static/lz4frame.o
86+ mozglue/static/lz4hc.o
87+ mozglue/static/xxhash.o
88+ third_party/fmt/Unified_cpp_third_party_fmt0.o
89+ )
90+ set (SM_OBJS)
91+ foreach (obj_file ${SM_OBJ_FILES} )
92+ list (APPEND SM_OBJS ${SM_OBJ_DIR} /${obj_file} )
93+ endforeach ()
94+
95+ add_custom_command (
96+ OUTPUT ${SM_OBJS} ${SM_OBJ_DIR} /js/src/build/libjs_static.a
97+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
98+ COMMAND ${CMAKE_COMMAND} -E env WASI_SDK_PATH=${WASI_SDK_PREFIX} SM_SOURCE_DIR =${SM_SOURCE_DIR}
99+ SM_OBJ_DIR=${SM_OBJ_DIR} ${CMAKE_CURRENT_SOURCE_DIR} /scripts/build-spidermonkey.sh ${SM_BUILD_TYPE}
100+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /scripts/build-spidermonkey.sh
101+ VERBATIM
102+ )
103+ add_library (js_static_additional STATIC )
104+ target_sources (js_static_additional PRIVATE ${SM_OBJS} ${CMAKE_CURRENT_BINARY_DIR} /null.cpp )
105+ add_library (spidermonkey INTERFACE )
106+ target_include_directories (spidermonkey INTERFACE ${SM_INCLUDE_DIR} )
107+ target_link_libraries (spidermonkey INTERFACE js_static_additional ${SM_OBJ_DIR} /js/src/build/libjs_static.a )
108+ endif ()
43109
44110# SpiderMonkey's builds include a header that defines some configuration options that need to be set
45111# to ensure e.g. object layout is identical to the one used in the build.
0 commit comments