From 5e762ea3713eb1223b206e6fb155dfabc93ea649 Mon Sep 17 00:00:00 2001 From: Hristo Stamenov Date: Wed, 9 Dec 2020 17:48:58 +0200 Subject: [PATCH] Added more improvements to cmakelists Added the option to use the system provided Emscripten toolchain to be more uniform with other libraries. Fixed and issue which prevented example being built from cmake and also building with html extensions properly. --- CMakeLists.txt | 7 +++++++ examples/CMakeLists.txt | 9 ++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c5f2fbd04..16b3baa5f 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,13 @@ option(ENABLE_ASAN "Enable AddressSanitizer (ASAN) for debugging (degrades perf option(ENABLE_UBSAN "Enable UndefinedBehaviorSanitizer (UBSan) for debugging" OFF) option(ENABLE_MSAN "Enable MemorySanitizer (MSan) for debugging (not recommended to run with ASAN)" OFF) +# This helps support the case where emsdk toolchain file is used +# either by setting it with -DCMAKE_TOOLCHAIN_FILE=/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake +# or by using "emcmake cmake -B build -S ." as described in https://emscripten.org/docs/compiling/Building-Projects.html +if(EMSCRIPTEN) + SET(PLATFORM Web CACHE ENUM "Forcing PLATFORM_WEB because EMSCRIPTEN was detected") +endif() + if(CMAKE_VERSION VERSION_LESS "3.1") if(CMAKE_C_COMPILER_ID STREQUAL "GNU") set(CMAKE_C_FLAGS "-std=gnu99 ${CMAKE_C_FLAGS}") diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 08b97ea91..57ba74d47 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -28,7 +28,6 @@ if (APPLE AND NOT CMAKE_SYSTEM STRLESS "Darwin-18.0.0") add_definitions(-DGL_SILENCE_DEPRECATION) MESSAGE(AUTHOR_WARNING "OpenGL is deprecated starting with macOS 10.14 (Mojave)!") endif() -set(OUTPUT_EXT) list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/rlgl_standalone.c) include(CheckIncludeFile) @@ -85,12 +84,12 @@ elseif(${PLATFORM} MATCHES "Web") # Since WASM is used, ALLOW_MEMORY_GROWTH has no extra overheads set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s ALLOW_MEMORY_GROWTH=1 --no-heap-copy") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --shell-file ${CMAKE_SOURCE_DIR}/src/shell.html") - set(OUTPUT_EXT ".html") + set(CMAKE_EXECUTABLE_SUFFIX ".html") # Remove the -rdynamic flag because otherwise emscripten # does not generate HTML+JS+WASM files, only a non-working # and fat HTML - string(REPLACE "-rdynamic" "" CMAKE_SHARED_LIBRARY_LINK_C_FLAGS ${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS}) + string(REPLACE "-rdynamic" "" CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS}") endif() include_directories(BEFORE SYSTEM others/external/include) @@ -103,7 +102,7 @@ endif() foreach(example_source ${example_sources}) # Create the basename for the example get_filename_component(example_name ${example_source} NAME) - string(REPLACE ".c" "${OUTPUT_EXT}" example_name ${example_name}) + string(REPLACE ".c" "" example_name ${example_name}) # Setup the example add_executable(${example_name} ${example_source}) @@ -125,7 +124,7 @@ if (${PLATFORM} MATCHES "Desktop") foreach (example_source "others/rlgl_standalone.c") # Create the basename for the example get_filename_component(example_name ${example_source} NAME) - string(REPLACE ".c" "${OUTPUT_EXT}" example_name ${example_name}) + string(REPLACE ".c" "" example_name ${example_name}) add_executable(${example_name} ${example_source}) add_dependencies(${example_name} raylib) target_link_libraries(${example_name} ${raylib_LDFLAGS})