diff --git a/cmake/LibraryConfigurations.cmake b/cmake/LibraryConfigurations.cmake index 02b28a2e6..23a7ec2f0 100644 --- a/cmake/LibraryConfigurations.cmake +++ b/cmake/LibraryConfigurations.cmake @@ -4,69 +4,65 @@ # See https://cmake.org/cmake/help/latest/policy/CMP0072.html for more # information. if(POLICY CMP0072) - cmake_policy(SET CMP0072 NEW) + cmake_policy(SET CMP0072 NEW) endif() -if(${PLATFORM} MATCHES "Desktop") +if (${PLATFORM} MATCHES "Desktop") set(PLATFORM_CPP "PLATFORM_DESKTOP") - if(APPLE) + if (APPLE) # Need to force OpenGL 3.3 on OS X # See: https://github.com/raysan5/raylib/issues/341 set(GRAPHICS "GRAPHICS_API_OPENGL_33") find_library(OPENGL_LIBRARY OpenGL) set(LIBS_PRIVATE ${OPENGL_LIBRARY}) link_libraries("${LIBS_PRIVATE}") - - if(NOT CMAKE_SYSTEM STRLESS "Darwin-18.0.0") + if (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() - elseif(WIN32) + endif () + elseif (WIN32) add_definitions(-D_CRT_SECURE_NO_WARNINGS) find_package(OpenGL QUIET) set(LIBS_PRIVATE ${OPENGL_LIBRARIES} winmm) - elseif(UNIX) + elseif (UNIX) find_library(pthread NAMES pthread) find_package(OpenGL QUIET) - - if("${OPENGL_LIBRARIES}" STREQUAL "") + if ("${OPENGL_LIBRARIES}" STREQUAL "") set(OPENGL_LIBRARIES "GL") - endif() + endif () - if("${CMAKE_SYSTEM_NAME}" MATCHES "(Net|Open)BSD") + if ("${CMAKE_SYSTEM_NAME}" MATCHES "(Net|Open)BSD") find_library(OSS_LIBRARY ossaudio) - endif() + endif () set(LIBS_PRIVATE m pthread ${OPENGL_LIBRARIES} ${OSS_LIBRARY}) - else() + else () find_library(pthread NAMES pthread) find_package(OpenGL QUIET) - - if("${OPENGL_LIBRARIES}" STREQUAL "") + if ("${OPENGL_LIBRARIES}" STREQUAL "") set(OPENGL_LIBRARIES "GL") - endif() + endif () set(LIBS_PRIVATE m atomic pthread ${OPENGL_LIBRARIES} ${OSS_LIBRARY}) - if("${CMAKE_SYSTEM_NAME}" MATCHES "(Net|Open)BSD") + if ("${CMAKE_SYSTEM_NAME}" MATCHES "(Net|Open)BSD") find_library(OSS_LIBRARY ossaudio) set(LIBS_PRIVATE m pthread ${OPENGL_LIBRARIES} ${OSS_LIBRARY}) - endif() + endif () - if(NOT "${CMAKE_SYSTEM_NAME}" MATCHES "(Net|Open)BSD" AND USE_AUDIO) + if (NOT "${CMAKE_SYSTEM_NAME}" MATCHES "(Net|Open)BSD" AND USE_AUDIO) set(LIBS_PRIVATE ${LIBS_PRIVATE} dl) - endif() - endif() + endif () + endif () -elseif(${PLATFORM} MATCHES "Web") +elseif (${PLATFORM} MATCHES "Web") set(PLATFORM_CPP "PLATFORM_WEB") set(GRAPHICS "GRAPHICS_API_OPENGL_ES2") - - # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --profiling") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s USE_GLFW=3 -s ASSERTIONS=1 --profiling") set(CMAKE_STATIC_LIBRARY_SUFFIX ".a") -elseif(${PLATFORM} MATCHES "Android") +elseif (${PLATFORM} MATCHES "Android") set(PLATFORM_CPP "PLATFORM_ANDROID") set(GRAPHICS "GRAPHICS_API_OPENGL_ES2") set(CMAKE_POSITION_INDEPENDENT_CODE ON) @@ -77,7 +73,7 @@ elseif(${PLATFORM} MATCHES "Android") find_library(OPENGL_LIBRARY OpenGL) set(LIBS_PRIVATE m log android EGL GLESv2 OpenSLES atomic c) -elseif("${PLATFORM}" MATCHES "DRM") +elseif ("${PLATFORM}" MATCHES "DRM") set(PLATFORM_CPP "PLATFORM_DRM") set(GRAPHICS "GRAPHICS_API_OPENGL_ES2") @@ -90,46 +86,44 @@ elseif("${PLATFORM}" MATCHES "DRM") find_library(DRM drm) find_library(GBM gbm) - if(NOT CMAKE_CROSSCOMPILING OR NOT CMAKE_SYSROOT) + if (NOT CMAKE_CROSSCOMPILING OR NOT CMAKE_SYSROOT) include_directories(/usr/include/libdrm) - endif() - + endif () set(LIBS_PRIVATE ${GLESV2} ${EGL} ${DRM} ${GBM} atomic pthread m dl) -elseif("${PLATFORM}" MATCHES "SDL") +elseif ("${PLATFORM}" MATCHES "SDL") find_package(SDL2 REQUIRED) set(PLATFORM_CPP "PLATFORM_DESKTOP_SDL") set(LIBS_PRIVATE SDL2::SDL2) -endif() -if(NOT ${OPENGL_VERSION} MATCHES "OFF") +endif () + +if (NOT ${OPENGL_VERSION} MATCHES "OFF") set(${SUGGESTED_GRAPHICS} "${GRAPHICS}") - - if(${OPENGL_VERSION} MATCHES "4.3") - set(GRAPHICS "GRAPHICS_API_OPENGL_43") - elseif(${OPENGL_VERSION} MATCHES "3.3") + if (${OPENGL_VERSION} MATCHES "4.3") + set(GRAPHICS "GRAPHICS_API_OPENGL_43") + elseif (${OPENGL_VERSION} MATCHES "3.3") set(GRAPHICS "GRAPHICS_API_OPENGL_33") - elseif(${OPENGL_VERSION} MATCHES "2.1") + elseif (${OPENGL_VERSION} MATCHES "2.1") set(GRAPHICS "GRAPHICS_API_OPENGL_21") - elseif(${OPENGL_VERSION} MATCHES "1.1") + elseif (${OPENGL_VERSION} MATCHES "1.1") set(GRAPHICS "GRAPHICS_API_OPENGL_11") - elseif(${OPENGL_VERSION} MATCHES "ES 2.0") + elseif (${OPENGL_VERSION} MATCHES "ES 2.0") set(GRAPHICS "GRAPHICS_API_OPENGL_ES2") - elseif(${OPENGL_VERSION} MATCHES "ES 3.0") + elseif (${OPENGL_VERSION} MATCHES "ES 3.0") set(GRAPHICS "GRAPHICS_API_OPENGL_ES3") - endif() - - if("${SUGGESTED_GRAPHICS}" AND NOT "${SUGGESTED_GRAPHICS}" STREQUAL "${GRAPHICS}") + endif () + if ("${SUGGESTED_GRAPHICS}" AND NOT "${SUGGESTED_GRAPHICS}" STREQUAL "${GRAPHICS}") message(WARNING "You are overriding the suggested GRAPHICS=${SUGGESTED_GRAPHICS} with ${GRAPHICS}! This may fail") - endif() -endif() + endif () +endif () -if(NOT GRAPHICS) +if (NOT GRAPHICS) set(GRAPHICS "GRAPHICS_API_OPENGL_33") -endif() +endif () set(LIBS_PRIVATE ${LIBS_PRIVATE} ${OPENAL_LIBRARY}) -if(${PLATFORM} MATCHES "Desktop") +if (${PLATFORM} MATCHES "Desktop") set(LIBS_PRIVATE ${LIBS_PRIVATE} glfw) -endif() +endif () diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 4cafff438..28550eaec 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -11,7 +11,7 @@ set(example_dirs shapes text textures -) + ) # Next few lines will check for existence of symbols or header files # They are needed for the physac example and threads examples @@ -21,38 +21,34 @@ check_symbol_exists(CLOCK_MONOTONIC time.h HAVE_CLOCK_MONOTONIC) check_symbol_exists(QueryPerformanceCounter windows.h HAVE_QPC) set(CMAKE_REQUIRED_DEFINITIONS) -if(HAVE_QPC OR HAVE_CLOCK_MONOTONIC) +if (HAVE_QPC OR HAVE_CLOCK_MONOTONIC) set(example_dirs ${example_dirs} physac) -endif() +endif () include(CheckIncludeFile) CHECK_INCLUDE_FILE("stdatomic.h" HAVE_STDATOMIC_H) set(CMAKE_THREAD_PREFER_PTHREAD TRUE) find_package(Threads) - -if(CMAKE_USE_PTHREADS_INIT AND HAVE_STDATOMIC_H) +if (CMAKE_USE_PTHREADS_INIT AND HAVE_STDATOMIC_H) add_if_flag_compiles("-std=c11" CMAKE_C_FLAGS) - - if(THREADS_HAVE_PTHREAD_ARG) + if (THREADS_HAVE_PTHREAD_ARG) add_if_flag_compiles("-pthread" CMAKE_C_FLAGS) - endif() - - if(CMAKE_THREAD_LIBS_INIT) + endif () + if (CMAKE_THREAD_LIBS_INIT) link_libraries("${CMAKE_THREAD_LIBS_INIT}") - endif() -endif() + endif () +endif () -if(APPLE AND NOT CMAKE_SYSTEM STRLESS "Darwin-18.0.0") +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() +endif () # Collect all source files and resource files # into a CMake variable set(example_sources) set(example_resources) - -foreach(example_dir ${example_dirs}) +foreach (example_dir ${example_dirs}) # Get the .c files file(GLOB sources ${example_dir}/*.c) list(APPEND example_sources ${sources}) @@ -60,14 +56,14 @@ foreach(example_dir ${example_dirs}) # Any any resources file(GLOB resources ${example_dir}/resources/*) list(APPEND example_resources ${resources}) -endforeach() +endforeach () if(NOT CMAKE_USE_PTHREADS_INIT OR NOT HAVE_STDATOMIC_H) # Items requiring pthreads list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_loading_thread.c) -endif() +endif () -if(${PLATFORM} MATCHES "Android") +if (${PLATFORM} MATCHES "Android") list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/rlgl_standalone.c) list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/standard_lighting.c) list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_3d_picking.c) @@ -91,6 +87,7 @@ if(${PLATFORM} MATCHES "Android") list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_first_person_maze.c) list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/models/models_magicavoxel_loading.c) + list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_custom_uniform.c) list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_model_shader.c) list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_postprocessing.c) @@ -98,10 +95,11 @@ if(${PLATFORM} MATCHES "Android") list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_palette_switch.c) list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_basic_lighting.c) -elseif(${PLATFORM} MATCHES "Web") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os") +elseif (${PLATFORM} MATCHES "Web") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os -s USE_GLFW=3 -s ASSERTIONS=1 -s WASM=1 -s ASYNCIFY") # Since WASM is used, ALLOW_MEMORY_GROWTH has no extra overheads - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s WASM=1 -s ASYNCIFY -s ALLOW_MEMORY_GROWTH=1 --shell-file ${CMAKE_SOURCE_DIR}/src/shell.html") + 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(CMAKE_EXECUTABLE_SUFFIX ".html") list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/raylib_opengl_interop.c) @@ -111,31 +109,33 @@ elseif(${PLATFORM} MATCHES "Web") # and fat HTML string(REPLACE "-rdynamic" "" CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS}") -elseif("${PLATFORM}" STREQUAL "DRM") +elseif ("${PLATFORM}" STREQUAL "DRM") list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/rlgl_standalone.c) list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/raylib_opengl_interop.c) -elseif(NOT SUPPORT_GESTURES_SYSTEM) +elseif (NOT SUPPORT_GESTURES_SYSTEM) # Items requiring gestures system list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/textures/textures_mouse_painting.c) list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_basic_screen_manager.c) list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_input_gestures_web.c) list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_input_gestures.c) -endif() + +endif () # The rlgl_standalone example only targets desktop, without shared libraries. -if(BUILD_SHARED_LIBS OR NOT ${PLATFORM} MATCHES "Desktop") +if (BUILD_SHARED_LIBS OR NOT ${PLATFORM} MATCHES "Desktop") list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/rlgl_standalone.c) + endif() include_directories(BEFORE SYSTEM others/external/include) -if(NOT TARGET raylib) +if (NOT TARGET raylib) find_package(raylib 2.0 REQUIRED) -endif() +endif () # Do each example -foreach(example_source ${example_sources}) +foreach (example_source ${example_sources}) # Create the basename for the example get_filename_component(example_name ${example_source} NAME) string(REPLACE ".c" "" example_name ${example_name}) @@ -144,20 +144,19 @@ foreach(example_source ${example_sources}) add_executable(${example_name} ${example_source}) target_link_libraries(${example_name} raylib) - - if(NOT WIN32) + if (NOT WIN32) target_link_libraries(${example_name} m) endif() string(REGEX MATCH ".*/.*/" resources_dir ${example_source}) string(APPEND resources_dir "resources") - if(${PLATFORM} MATCHES "Web" AND EXISTS ${resources_dir}) + if (${PLATFORM} MATCHES "Web" AND EXISTS ${resources_dir}) # The local resources path needs to be mapped to /resources virtual path string(APPEND resources_dir "@resources") set_target_properties(${example_name} PROPERTIES LINK_FLAGS "--preload-file ${resources_dir}") - endif() -endforeach() + endif () +endforeach () # Copy all of the resource files to the destination file(COPY ${example_resources} DESTINATION "resources/") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index bfb4b05b5..387665705 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -69,7 +69,7 @@ else() endif() if (${PLATFORM} MATCHES "Web") - target_link_options(raylib PUBLIC "-sUSE_GLFW=3") + target_link_options(raylib PRIVATE "-sUSE_GLFW=3") endif() set_target_properties(raylib PROPERTIES