RunCMakeTest.cmake 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. include(RunCMake)
  2. # Locate Emscripten toolchain
  3. if(RunCMake_GENERATOR MATCHES "Makefile|Ninja")
  4. file(GLOB _emscripten_toolchains
  5. "${CMake_TEST_Emscripten_TOOLCHAINS}/emcc" )
  6. if(_emscripten_toolchains STREQUAL "")
  7. message(FATAL_ERROR "Could not find any Emscripten toolchains at: ${CMake_TEST_Emscripten_TOOLCHAINS}.")
  8. endif()
  9. endif()
  10. function(run_toolchain case)
  11. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${case}-build)
  12. run_cmake_with_options(${case} ${ARGN})
  13. set(RunCMake_TEST_NO_CLEAN 1)
  14. set(RunCMake_TEST_OUTPUT_MERGE 1)
  15. run_cmake_command(${case}-build ${CMAKE_COMMAND} --build .)
  16. endfunction()
  17. macro(run_cmake_target test subtest target)
  18. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-build)
  19. set(RunCMake_TEST_NO_CLEAN 1)
  20. set(RunCMake_TEST_OUTPUT_MERGE 1)
  21. run_cmake_command(${test}-${subtest}-build ${CMAKE_COMMAND} --build . --target ${target} --config Release --verbose ${ARGN})
  22. unset(RunCMake_TEST_BINARY_DIR)
  23. unset(RunCMake_TEST_NO_CLEAN)
  24. endmacro()
  25. foreach(_emscripten_toolchain IN LISTS _emscripten_toolchains)
  26. message(STATUS "Found Emscripten toolchain: ${_emscripten_toolchain}")
  27. cmake_path(GET _emscripten_toolchain PARENT_PATH BIN_DIR)
  28. if (WIN32)
  29. set(EMCC_SUFFIX ".bat")
  30. else()
  31. set(EMCC_SUFFIX "")
  32. endif()
  33. set(c_comp ${BIN_DIR}/emcc${EMCC_SUFFIX})
  34. set(cxx_comp ${BIN_DIR}/em++${EMCC_SUFFIX})
  35. set(comp_ar ${BIN_DIR}/emar${EMCC_SUFFIX})
  36. # Compiler inspection.
  37. run_cmake_with_options(C-enable
  38. -DCMAKE_SYSTEM_NAME=Emscripten
  39. -DCMAKE_C_COMPILER=${c_comp}
  40. )
  41. # Create an executable from .c sources only.
  42. run_toolchain(C-exe
  43. -DCMAKE_SYSTEM_NAME=Emscripten
  44. -DCMAKE_C_COMPILER=${c_comp}
  45. )
  46. # Create an executable from .c and .cxx sources.
  47. run_toolchain(CXX-exe
  48. -DCMAKE_SYSTEM_NAME=Emscripten
  49. -DCMAKE_C_COMPILER=${c_comp}
  50. -DCMAKE_CXX_COMPILER=${cxx_comp}
  51. )
  52. # Create a static library and executable from .c sources.
  53. run_toolchain(C-lib-static
  54. -DCMAKE_SYSTEM_NAME=Emscripten
  55. -DCMAKE_C_COMPILER=${c_comp}
  56. )
  57. # Create a shared library and executable from .c sources.
  58. run_toolchain(C-lib-shared
  59. -DCMAKE_SYSTEM_NAME=Emscripten
  60. -DCMAKE_C_COMPILER=${c_comp}
  61. )
  62. run_toolchain(C-lib-circular
  63. -DCMAKE_SYSTEM_NAME=Emscripten
  64. -DCMAKE_C_COMPILER=${c_comp}
  65. )
  66. run_cmake_with_options(C-WHOLE_ARCHIVE
  67. -DCMAKE_SYSTEM_NAME=Emscripten
  68. -DCMAKE_C_COMPILER=${c_comp}
  69. )
  70. run_cmake_target(C-WHOLE_ARCHIVE link-exe main)
  71. run_cmake_target(C-WHOLE_ARCHIVE circular-exe main_circular)
  72. run_cmake_with_options(C-CheckTypeSize
  73. -DCMAKE_SYSTEM_NAME=Emscripten
  74. -DCMAKE_C_COMPILER=${c_comp}
  75. )
  76. if(CMake_TEST_Emscripten_NODE)
  77. run_cmake_with_options(C-try_run
  78. -DCMAKE_SYSTEM_NAME=Emscripten
  79. -DCMAKE_CROSSCOMPILING_EMULATOR=${CMake_TEST_Emscripten_NODE}
  80. -DCMAKE_C_COMPILER=${c_comp}
  81. )
  82. endif()
  83. endforeach()