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,92 @@ 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)
44+ if (DEFINED SM_LIB_DIR)
45+ set (SM_INCLUDE_DIR ${SM_LIB_DIR} /include)
46+
47+ file (WRITE ${CMAKE_CURRENT_BINARY_DIR} /null.cpp "" )
48+ file (GLOB SM_OBJS ${SM_LIB_DIR} /lib/*.o )
3549
36- file (WRITE ${CMAKE_CURRENT_BINARY_DIR} /null.cpp "" )
37- file (GLOB SM_OBJS ${SM_SOURCE_DIR} /lib/*.o )
50+ add_library (spidermonkey STATIC )
51+ target_sources (spidermonkey PRIVATE ${SM_OBJS} ${CMAKE_CURRENT_BINARY_DIR} /null.cpp )
52+ target_include_directories (spidermonkey PUBLIC ${SM_INCLUDE_DIR} )
53+ target_link_libraries (spidermonkey PUBLIC ${SM_LIB_DIR} /lib/libjs_static.a )
54+ else ()
55+ CPMAddPackage (NAME gecko-source
56+ GIT_REPOSITORY "https://github.com/bytecodealliance/firefox.git"
57+ GIT_TAG "${SM_TAG} "
58+ DOWNLOAD_ONLY YES
59+ )
60+ set (SM_SOURCE_DIR ${CPM_PACKAGE_gecko-source_SOURCE_DIR })
61+ set (SM_OBJ_DIR ${CMAKE_CURRENT_BINARY_DIR} /sm-obj-${SM_BUILD_TYPE} )
62+ set (SM_INCLUDE_DIR "${SM_OBJ_DIR} /dist/include" )
3863
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 )
64+ # Additional obj files needed, but not part of libjs_static.a
65+ set (SM_OBJ_FILES
66+ memory/build/Unified_cpp_memory_build0.o
67+ memory/mozalloc/Unified_cpp_memory_mozalloc0.o
68+ mfbt/Unified_cpp_mfbt0.o
69+ mfbt/Unified_cpp_mfbt1.o
70+ mozglue/misc/AutoProfilerLabel.o
71+ mozglue/misc/ConditionVariable_noop.o
72+ mozglue/misc/Debug.o
73+ mozglue/misc/Decimal.o
74+ mozglue/misc/MmapFaultHandler.o
75+ mozglue/misc/Mutex_noop.o
76+ mozglue/misc/Now.o
77+ mozglue/misc/Printf.o
78+ mozglue/misc/SIMD.o
79+ mozglue/misc/StackWalk.o
80+ mozglue/misc/TimeStamp.o
81+ mozglue/misc/TimeStamp_posix.o
82+ mozglue/misc/Uptime.o
83+ mozglue/static/lz4.o
84+ mozglue/static/lz4frame.o
85+ mozglue/static/lz4hc.o
86+ mozglue/static/xxhash.o
87+ third_party/fmt/Unified_cpp_third_party_fmt0.o
88+ )
89+ set (SM_OBJS)
90+ foreach (obj_file ${SM_OBJ_FILES} )
91+ list (APPEND SM_OBJS ${SM_OBJ_DIR} /${obj_file} )
92+ endforeach ()
93+
94+ add_custom_command (
95+ OUTPUT ${SM_OBJS} ${SM_OBJ_DIR} /js/src/build/libjs_static.a
96+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
97+ COMMAND ${CMAKE_COMMAND} -E env WASI_SDK_PATH=${WASI_SDK_PREFIX} SM_SOURCE_DIR =${SM_SOURCE_DIR}
98+ SM_OBJ_DIR=${SM_OBJ_DIR} ${CMAKE_CURRENT_SOURCE_DIR} /scripts/build-spidermonkey.sh ${SM_BUILD_TYPE}
99+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /scripts/build-spidermonkey.sh
100+ VERBATIM
101+ )
102+ add_library (js_static_additional STATIC )
103+ target_sources (js_static_additional PRIVATE ${SM_OBJS} ${CMAKE_CURRENT_BINARY_DIR} /null.cpp )
104+ add_library (spidermonkey INTERFACE )
105+ target_include_directories (spidermonkey INTERFACE ${SM_INCLUDE_DIR} )
106+ target_link_libraries (spidermonkey INTERFACE js_static_additional ${SM_OBJ_DIR} /js/src/build/libjs_static.a )
107+ endif ()
43108
44109# SpiderMonkey's builds include a header that defines some configuration options that need to be set
45110# to ensure e.g. object layout is identical to the one used in the build.
0 commit comments