From 3f097263310c3993a742891bce4dc00892aa5c3d Mon Sep 17 00:00:00 2001 From: Ahmad Fatoum Date: Sat, 28 Jul 2018 16:08:41 +0200 Subject: CMake: Major cleanup to support find_package(raylib) Remove that link_libraries_to_executable() hack and defines a proper raylib target that can be used with target_link_libraries. The same target is also available for external (user) code by using find_package(raylib). This results in: - Remove hardcoded build directories from examples and games CMakeLists.txt - Allow rlgl_standalone and other special examples to be built easily - Allow CMake projects to find_package(raylib instead of fiddling with pkg-config - Makes code a little more maintainable - Fixes #471, #606. - Makes code less confusing by removing the double use of PLATFORM (#584). Note that this is still not _The Right Way_(TM), because normally raylib-config.cmake (or its includes) would be automatically generated. I didn't manage to get that to work though, so I went the easier route of just wrapping pkg_check_modules for consumption by find_package. --- examples/CMakeLists.txt | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) (limited to 'examples') diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index a214c171..708c08c6 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,15 +1,6 @@ # Setup the project and settings project(examples) -include("../cmake/utils.cmake") - -# Make sure raylib has been built -# TODO `build` directory should maybe be something else... -# TODO place somewhere else? -include_directories("../build/release") -include_directories("../src/external") -include_directories("../src/external/glfw/include") - # Get the sources together set(example_dirs audio core models others shaders shapes text textures) set(CMAKE_REQUIRED_DEFINITIONS -D_POSIX_C_SOURCE=199309L) @@ -64,6 +55,9 @@ elseif(${PLATFORM} MATCHES "Web") set(OUTPUT_EXT ".html") endif() +if (NOT TARGET raylib) + find_package(raylib 2.0 REQUIRED) +endif() # Do each example foreach(example_source ${example_sources}) @@ -75,7 +69,7 @@ foreach(example_source ${example_sources}) add_executable(${example_name} ${example_source}) # Link the libraries - link_libraries_to_executable(${example_name}) + target_link_libraries(${example_name} raylib) endforeach() # Copy all of the resource files to the destination -- cgit v1.2.3 From 5a94a280d0a7d2866a12e6f9144401881e17de02 Mon Sep 17 00:00:00 2001 From: Ahmad Fatoum Date: Sat, 28 Jul 2018 16:35:21 +0200 Subject: CMake: include rlgl_standalone in -DBUILD_EXAMPLES With the recent CMake cleanup, getting raylib's dependencies for use when building rlgl_standalone is quite straight forward, so lets enable it again. Fixes #508, just properly this time. :) --- examples/CMakeLists.txt | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'examples') diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 708c08c6..90a1e902 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -25,12 +25,12 @@ foreach(example_dir ${example_dirs}) endforeach() include(CheckIncludeFiles) -list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/standard_lighting.c) -list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/rlgl_standalone.c) # see #588 set(OUTPUT_EXT) +list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/rlgl_standalone.c) 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) list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_vr_simulator.c) list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/core/core_3d_camera_free.c) @@ -49,12 +49,16 @@ if(${PLATFORM} MATCHES "Android") 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) + elseif(${PLATFORM} MATCHES "Web") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os -s USE_GLFW=3 -s ASSERTIONS=1 -s WASM=1 -s EMTERPRETIFY=1 -s EMTERPRETIFY_ASYNC=1") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --shell-file ${CMAKE_SOURCE_DIR}/templates/web_shell/shell.html") set(OUTPUT_EXT ".html") + endif() +include_directories(BEFORE SYSTEM others/external/include) + if (NOT TARGET raylib) find_package(raylib 2.0 REQUIRED) endif() @@ -68,9 +72,22 @@ foreach(example_source ${example_sources}) # Setup the example add_executable(${example_name} ${example_source}) - # Link the libraries target_link_libraries(${example_name} raylib) endforeach() +if (${PLATFORM} MATCHES "Desktop") + # rlgl_standalone can't be linked with raylib because of duplicate rlgl symbols + 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}) + add_executable(${example_name} ${example_source}) + add_dependencies(${example_name} raylib) + target_link_libraries(${example_name} ${raylib_LDFLAGS}) + target_include_directories(${example_name} PRIVATE ${raylib_INCLUDE_DIRS}) + + endforeach() +endif() + # Copy all of the resource files to the destination file(COPY ${example_resources} DESTINATION "resources/") -- cgit v1.2.3