diff --git a/CMakeLists.txt b/CMakeLists.txt index c5f2fbd0..6b163526 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 STRING "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/cmake/emscripten.cmake b/cmake/emscripten.cmake index 621ae787..1780dee9 100644 --- a/cmake/emscripten.cmake +++ b/cmake/emscripten.cmake @@ -1,12 +1,20 @@ SET(CMAKE_SYSTEM_NAME Linux) +SET(CMAKE_SYSTEM_PROCESSOR x86) + +if (CMAKE_HOST_WIN32) + SET(EMSCRIPTEN_EXTENSION ".bat") +else () + SET(EMSCRIPTEN_EXTENSION "") +endif() + +SET(CMAKE_C_COMPILER emcc${EMSCRIPTEN_EXTENSION}) +SET(CMAKE_CXX_COMPILER em++${EMSCRIPTEN_EXTENSION}) -SET(CMAKE_C_COMPILER emcc) -SET(CMAKE_CXX_COMPILER em++) if(NOT DEFINED CMAKE_AR) - find_program(CMAKE_AR NAMES emar) + find_program(CMAKE_AR NAMES emar${EMSCRIPTEN_EXTENSION}) endif() if(NOT DEFINED CMAKE_RANLIB) - find_program(CMAKE_RANLIB NAMES emranlib) + find_program(CMAKE_RANLIB NAMES emranlib${EMSCRIPTEN_EXTENSION}) endif() set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 08b97ea9..57ba74d4 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}) diff --git a/src/core.c b/src/core.c index 12f76609..5ee78779 100644 --- a/src/core.c +++ b/src/core.c @@ -1133,15 +1133,19 @@ void SetWindowState(unsigned int flags) // State change: FLAG_WINDOW_RESIZABLE if (((CORE.Window.flags & FLAG_WINDOW_RESIZABLE) != (flags & FLAG_WINDOW_RESIZABLE)) && ((flags & FLAG_WINDOW_RESIZABLE) > 0)) { +#if defined(PLATFORM_DESKTOP) glfwSetWindowAttrib(CORE.Window.handle, GLFW_RESIZABLE, GLFW_TRUE); CORE.Window.flags |= FLAG_WINDOW_RESIZABLE; +#endif } // State change: FLAG_WINDOW_UNDECORATED if (((CORE.Window.flags & FLAG_WINDOW_UNDECORATED) != (flags & FLAG_WINDOW_UNDECORATED)) && (flags & FLAG_WINDOW_UNDECORATED)) { +#if defined(PLATFORM_DESKTOP) glfwSetWindowAttrib(CORE.Window.handle, GLFW_DECORATED, GLFW_FALSE); CORE.Window.flags |= FLAG_WINDOW_UNDECORATED; +#endif } // State change: FLAG_WINDOW_HIDDEN @@ -1168,15 +1172,19 @@ void SetWindowState(unsigned int flags) // State change: FLAG_WINDOW_UNFOCUSED if (((CORE.Window.flags & FLAG_WINDOW_UNFOCUSED) != (flags & FLAG_WINDOW_UNFOCUSED)) && ((flags & FLAG_WINDOW_UNFOCUSED) > 0)) { +#if defined(PLATFORM_DESKTOP) glfwSetWindowAttrib(CORE.Window.handle, GLFW_FOCUS_ON_SHOW, GLFW_FALSE); CORE.Window.flags |= FLAG_WINDOW_UNFOCUSED; +#endif } // State change: FLAG_WINDOW_TOPMOST if (((CORE.Window.flags & FLAG_WINDOW_TOPMOST) != (flags & FLAG_WINDOW_TOPMOST)) && ((flags & FLAG_WINDOW_TOPMOST) > 0)) { +#if defined(PLATFORM_DESKTOP) glfwSetWindowAttrib(CORE.Window.handle, GLFW_FLOATING, GLFW_TRUE); CORE.Window.flags |= FLAG_WINDOW_TOPMOST; +#endif } // State change: FLAG_WINDOW_ALWAYS_RUN @@ -1234,15 +1242,19 @@ void ClearWindowState(unsigned int flags) // State change: FLAG_WINDOW_RESIZABLE if (((CORE.Window.flags & FLAG_WINDOW_RESIZABLE) > 0) && ((flags & FLAG_WINDOW_RESIZABLE) > 0)) { +#if defined(PLATFORM_DESKTOP) glfwSetWindowAttrib(CORE.Window.handle, GLFW_RESIZABLE, GLFW_FALSE); CORE.Window.flags &= ~FLAG_WINDOW_RESIZABLE; +#endif } // State change: FLAG_WINDOW_UNDECORATED if (((CORE.Window.flags & FLAG_WINDOW_UNDECORATED) > 0) && ((flags & FLAG_WINDOW_UNDECORATED) > 0)) { +#if defined(PLATFORM_DESKTOP) glfwSetWindowAttrib(CORE.Window.handle, GLFW_DECORATED, GLFW_TRUE); CORE.Window.flags &= ~FLAG_WINDOW_UNDECORATED; +#endif } // State change: FLAG_WINDOW_HIDDEN @@ -1267,15 +1279,19 @@ void ClearWindowState(unsigned int flags) // State change: FLAG_WINDOW_UNFOCUSED if (((CORE.Window.flags & FLAG_WINDOW_UNFOCUSED) > 0) && ((flags & FLAG_WINDOW_UNFOCUSED) > 0)) { +#if defined(PLATFORM_DESKTOP) glfwSetWindowAttrib(CORE.Window.handle, GLFW_FOCUS_ON_SHOW, GLFW_TRUE); CORE.Window.flags &= ~FLAG_WINDOW_UNFOCUSED; +#endif } // State change: FLAG_WINDOW_TOPMOST if (((CORE.Window.flags & FLAG_WINDOW_TOPMOST) > 0) && ((flags & FLAG_WINDOW_TOPMOST) > 0)) { +#if defined(PLATFORM_DESKTOP) glfwSetWindowAttrib(CORE.Window.handle, GLFW_FLOATING, GLFW_FALSE); CORE.Window.flags &= ~FLAG_WINDOW_TOPMOST; +#endif } // State change: FLAG_WINDOW_ALWAYS_RUN