mirror of
https://github.com/ApfelTeeSaft/WebMetal.git
synced 2026-08-26 19:43:24 +00:00
60 lines
2.0 KiB
CMake
60 lines
2.0 KiB
CMake
cmake_minimum_required(VERSION 3.24)
|
|
project(webmetal-engine LANGUAGES CXX)
|
|
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE Release)
|
|
endif()
|
|
|
|
option(WEBMETAL_BUILD_NODE_TEST
|
|
"Also build a Node-targeted wasm module for the conformance runner"
|
|
OFF)
|
|
|
|
add_library(engine_core STATIC src/engine.cpp src/ir.cpp)
|
|
target_include_directories(engine_core PUBLIC include third_party)
|
|
target_compile_options(engine_core PRIVATE -Wall -Wextra)
|
|
|
|
set(WEBMETAL_EMCC_OPTIONS
|
|
-lembind
|
|
-sMODULARIZE=1
|
|
-sEXPORT_ES6=1
|
|
-sEXPORT_NAME=createWebMetalModule
|
|
-sALLOW_MEMORY_GROWTH=1
|
|
-sEXPORTED_RUNTIME_METHODS=HEAPU8,HEAPU32)
|
|
|
|
if(EMSCRIPTEN)
|
|
add_executable(webmetal-engine src/bindings.cpp)
|
|
target_link_libraries(webmetal-engine PRIVATE engine_core)
|
|
set_target_properties(webmetal-engine PROPERTIES SUFFIX ".mjs")
|
|
target_link_options(webmetal-engine PRIVATE
|
|
${WEBMETAL_EMCC_OPTIONS}
|
|
-sENVIRONMENT=web,worker)
|
|
|
|
if(WEBMETAL_BUILD_NODE_TEST)
|
|
add_executable(webmetal-engine-node src/bindings.cpp)
|
|
target_link_libraries(webmetal-engine-node PRIVATE engine_core)
|
|
set_target_properties(webmetal-engine-node PROPERTIES SUFFIX ".mjs")
|
|
target_link_options(webmetal-engine-node PRIVATE
|
|
${WEBMETAL_EMCC_OPTIONS}
|
|
-sENVIRONMENT=node)
|
|
endif()
|
|
else()
|
|
enable_testing()
|
|
|
|
add_executable(engine_tests tests/engine_test.cpp)
|
|
target_link_libraries(engine_tests PRIVATE engine_core)
|
|
target_include_directories(engine_tests PRIVATE tests)
|
|
target_compile_options(engine_tests PRIVATE -Wall -Wextra)
|
|
add_test(NAME engine_tests COMMAND engine_tests)
|
|
|
|
add_executable(conformance_tests tests/conformance_test.cpp)
|
|
target_link_libraries(conformance_tests PRIVATE engine_core)
|
|
target_include_directories(conformance_tests PRIVATE tests)
|
|
target_compile_definitions(conformance_tests PRIVATE
|
|
WEBMETAL_CONFORMANCE_PATH="${CMAKE_CURRENT_SOURCE_DIR}/../conformance/microop-vectors.json")
|
|
add_test(NAME conformance_tests COMMAND conformance_tests)
|
|
endif()
|