From 191d261393b5759d637d4f34d8687696c0e197b6 Mon Sep 17 00:00:00 2001 From: Hristo Stamenov Date: Tue, 8 Dec 2020 15:38:00 +0200 Subject: [PATCH] Fixed the build for web using CMake. I found that the build for me was failing and I added some if defined checks in the core.c file where the glfwSetWindowAttrib was used. (error: implicit declaration of function 'glfwSetWindowAttrib' is invalid in C99 [-Werror,-Wimplicit-function-declaration]) I also changed some values in the toolchain file so that it correctly uses the .bat files when on windows. --- cmake/emscripten.cmake | 21 +++++++++++++++++++-- src/core.c | 16 ++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/cmake/emscripten.cmake b/cmake/emscripten.cmake index 621ae7875..e82d1b63c 100644 --- a/cmake/emscripten.cmake +++ b/cmake/emscripten.cmake @@ -1,7 +1,24 @@ SET(CMAKE_SYSTEM_NAME Linux) +SET(CMAKE_SYSTEM_PROCESSOR x86) + +SET(CMAKE_CROSSCOMPILING TRUE) +SET_PROPERTY(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE) + +# Unset WIN32 and APPLE +SET(WIN32) +SET(APPLE) + +# Emscripten is able to mimic Unix systems +SET(UNIX 1) + +if (CMAKE_HOST_WIN32) + SET(CMAKE_C_COMPILER "emcc.bat") + SET(CMAKE_CXX_COMPILER "em++.bat") +else () + SET(CMAKE_C_COMPILER "emcc") + SET(CMAKE_CXX_COMPILER "em++") +endif() -SET(CMAKE_C_COMPILER emcc) -SET(CMAKE_CXX_COMPILER em++) if(NOT DEFINED CMAKE_AR) find_program(CMAKE_AR NAMES emar) endif() diff --git a/src/core.c b/src/core.c index 12f76609d..5ee787794 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