Skip to content

Instantly share code, notes, and snippets.

@izzyreal
Created April 5, 2025 17:23
Show Gist options
  • Select an option

  • Save izzyreal/97c46e9324c2d0d5981c419ab24bdbd1 to your computer and use it in GitHub Desktop.

Select an option

Save izzyreal/97c46e9324c2d0d5981c419ab24bdbd1 to your computer and use it in GitHub Desktop.
CMakeLists.txt for Emscripten + asm-dom frontend
cmake_minimum_required (VERSION 3.13)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
project(asm-dom-cmake
LANGUAGES CXX
VERSION 0.1.0
)
if(DEFINED EMSCRIPTEN_ROOT_PATH)
set(CMAKE_SYSROOT "${EMSCRIPTEN_ROOT_PATH}/cache/sysroot")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isystem ${CMAKE_SYSROOT}/include/compat")
endif()
include(cmake/release-mode.cmake)
include(cmake/asm-dom.cmake)
add_executable(main src/main.cpp src/Overview.cpp src/App.cpp src/Header.cpp)
set_property(TARGET main PROPERTY CXX_STANDARD 11)
target_link_libraries(main PRIVATE asm-dom fetch)
target_link_options(main PRIVATE "-s FETCH" "-sINITIAL_MEMORY=32MB" "-sMAXIMUM_MEMORY=128MB" "-sALLOW_MEMORY_GROWTH=1")
execute_process(COMMAND em++ --cflags OUTPUT_VARIABLE EM_CFLAGS)
set_target_properties(main PROPERTIES COMPILE_FLAGS "${EM_CFLAGS}")
add_custom_target(copy_index ALL
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/src/index.html
${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/product/index.html
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/index.html
)
add_custom_target(copy_style ALL
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/src/style.css
${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/product/style.css
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/style.css
)
add_dependencies(main copy_style copy_index)
add_custom_command(
TARGET main
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/main.js
${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/product/main.js
)
add_custom_command(
TARGET main
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/main.wasm
${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/product/main.wasm
)
if (PROJECT_IS_TOP_LEVEL)
execute_process(
COMMAND ${CMAKE_COMMAND} -E create_symlink
${CMAKE_BINARY_DIR}/compile_commands.json
${CMAKE_CURRENT_SOURCE_DIR}/compile_commands.json
)
endif()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment