| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- include(RunCMake)
- # Locate Emscripten toolchain
- if(RunCMake_GENERATOR MATCHES "Makefile|Ninja")
- file(GLOB _emscripten_toolchains
- "${CMake_TEST_Emscripten_TOOLCHAINS}/emcc" )
- if(_emscripten_toolchains STREQUAL "")
- message(FATAL_ERROR "Could not find any Emscripten toolchains at: ${CMake_TEST_Emscripten_TOOLCHAINS}.")
- endif()
- endif()
- function(run_toolchain case)
- set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${case}-build)
- run_cmake_with_options(${case} ${ARGN})
- set(RunCMake_TEST_NO_CLEAN 1)
- set(RunCMake_TEST_OUTPUT_MERGE 1)
- run_cmake_command(${case}-build ${CMAKE_COMMAND} --build .)
- endfunction()
- macro(run_cmake_target test subtest target)
- set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-build)
- set(RunCMake_TEST_NO_CLEAN 1)
- set(RunCMake_TEST_OUTPUT_MERGE 1)
- run_cmake_command(${test}-${subtest}-build ${CMAKE_COMMAND} --build . --target ${target} --config Release --verbose ${ARGN})
- unset(RunCMake_TEST_BINARY_DIR)
- unset(RunCMake_TEST_NO_CLEAN)
- endmacro()
- foreach(_emscripten_toolchain IN LISTS _emscripten_toolchains)
- message(STATUS "Found Emscripten toolchain: ${_emscripten_toolchain}")
- cmake_path(GET _emscripten_toolchain PARENT_PATH BIN_DIR)
- if (WIN32)
- set(EMCC_SUFFIX ".bat")
- else()
- set(EMCC_SUFFIX "")
- endif()
- set(c_comp ${BIN_DIR}/emcc${EMCC_SUFFIX})
- set(cxx_comp ${BIN_DIR}/em++${EMCC_SUFFIX})
- set(comp_ar ${BIN_DIR}/emar${EMCC_SUFFIX})
- # Compiler inspection.
- run_cmake_with_options(C-enable
- -DCMAKE_SYSTEM_NAME=Emscripten
- -DCMAKE_C_COMPILER=${c_comp}
- )
- # Create an executable from .c sources only.
- run_toolchain(C-exe
- -DCMAKE_SYSTEM_NAME=Emscripten
- -DCMAKE_C_COMPILER=${c_comp}
- )
- # Create an executable from .c and .cxx sources.
- run_toolchain(CXX-exe
- -DCMAKE_SYSTEM_NAME=Emscripten
- -DCMAKE_C_COMPILER=${c_comp}
- -DCMAKE_CXX_COMPILER=${cxx_comp}
- )
- # Create a static library and executable from .c sources.
- run_toolchain(C-lib-static
- -DCMAKE_SYSTEM_NAME=Emscripten
- -DCMAKE_C_COMPILER=${c_comp}
- )
- # Create a shared library and executable from .c sources.
- run_toolchain(C-lib-shared
- -DCMAKE_SYSTEM_NAME=Emscripten
- -DCMAKE_C_COMPILER=${c_comp}
- )
- run_toolchain(C-lib-circular
- -DCMAKE_SYSTEM_NAME=Emscripten
- -DCMAKE_C_COMPILER=${c_comp}
- )
- run_cmake_with_options(C-WHOLE_ARCHIVE
- -DCMAKE_SYSTEM_NAME=Emscripten
- -DCMAKE_C_COMPILER=${c_comp}
- )
- run_cmake_target(C-WHOLE_ARCHIVE link-exe main)
- run_cmake_target(C-WHOLE_ARCHIVE circular-exe main_circular)
- run_cmake_with_options(C-CheckTypeSize
- -DCMAKE_SYSTEM_NAME=Emscripten
- -DCMAKE_C_COMPILER=${c_comp}
- )
- if(CMake_TEST_Emscripten_NODE)
- run_cmake_with_options(C-try_run
- -DCMAKE_SYSTEM_NAME=Emscripten
- -DCMAKE_CROSSCOMPILING_EMULATOR=${CMake_TEST_Emscripten_NODE}
- -DCMAKE_C_COMPILER=${c_comp}
- )
- endif()
- endforeach()
|