CMake relied on this file for configurations and also was interfering in the regular config.h by having a separate definition if building with CMake. This was not entirely correct so instead we will define compile time definitions separately through CMake (CompileDefinitions.cmake) and also will use the provided EXTERNAL_CONFIG_FLAGS that I found that will not use config.h in through the build process. I also introduced a new compiler option (CUSTOMIZE_BUILD) that when OFF will use the default config.h and when ON will show other options for redefining your own options. Fixed an error in rlgl.h where if you have both RLGL_STANDALONE and SUPPORT_VR_SIMULATOR you get a compile time error.
121 lines
3.4 KiB
CMake
121 lines
3.4 KiB
CMake
# Setup the project and settings
|
|
project(raylib C)
|
|
set(PROJECT_VERSION 3.5.0)
|
|
set(API_VERSION 351)
|
|
|
|
include(GNUInstallDirs)
|
|
include(JoinPaths)
|
|
|
|
# Sets build type if not set by now
|
|
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|
if(RAYLIB_IS_MAIN)
|
|
set(default_build_type Debug)
|
|
endif()
|
|
|
|
message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
|
|
|
|
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build." FORCE)
|
|
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
|
|
endif()
|
|
|
|
# Get the sources together
|
|
set(raylib_public_headers
|
|
raylib.h
|
|
rlgl.h
|
|
physac.h
|
|
raymath.h
|
|
raudio.h
|
|
)
|
|
|
|
set(raylib_sources
|
|
core.c
|
|
models.c
|
|
shapes.c
|
|
text.c
|
|
textures.c
|
|
utils.c
|
|
)
|
|
|
|
# cmake/GlfwImport.cmake handles the details around the inclusion of glfw
|
|
include(GlfwImport)
|
|
|
|
|
|
if (USE_AUDIO)
|
|
MESSAGE(STATUS "Audio Backend: miniaudio")
|
|
list(APPEND raylib_sources raudio.c)
|
|
else ()
|
|
MESSAGE(STATUS "Audio Backend: None (-DUSE_AUDIO=OFF)")
|
|
endif ()
|
|
|
|
include(LibraryConfigurations)
|
|
|
|
set(LIBS_PRIVATE ${LIBS_PRIVATE} ${OPENAL_LIBRARY})
|
|
|
|
add_library(raylib ${raylib_sources} ${raylib_public_headers})
|
|
|
|
if (NOT BUILD_SHARED_LIBS)
|
|
MESSAGE(STATUS "Building raylib static library")
|
|
add_library(raylib_static ALIAS raylib)
|
|
add_test("pkg-config--static" ${PROJECT_SOURCE_DIR}/../cmake/test-pkgconfig.sh --static)
|
|
else()
|
|
MESSAGE(STATUS "Building raylib shared library")
|
|
if (MSVC)
|
|
target_compile_definitions(raylib
|
|
PRIVATE $<BUILD_INTERFACE:BUILD_LIBTYPE_SHARED>
|
|
INTERFACE $<INSTALL_INTERFACE:USE_LIBTYPE_SHARED>
|
|
)
|
|
endif ()
|
|
|
|
add_test("pkg-config" ${PROJECT_SOURCE_DIR}/../cmake/test-pkgconfig.sh)
|
|
endif()
|
|
|
|
# Setting target properties
|
|
set_target_properties(raylib PROPERTIES
|
|
PUBLIC_HEADER "${raylib_public_headers}"
|
|
VERSION ${PROJECT_VERSION}
|
|
SOVERSION ${API_VERSION}
|
|
)
|
|
|
|
if (WITH_PIC OR BUILD_SHARED_LIBS)
|
|
set_property(TARGET raylib PROPERTY POSITION_INDEPENDENT_CODE ON)
|
|
endif ()
|
|
|
|
# Linking libraries
|
|
target_link_libraries(raylib "${LIBS_PRIVATE}")
|
|
if (${PLATFORM} MATCHES "Desktop")
|
|
target_link_libraries(raylib glfw)
|
|
endif ()
|
|
|
|
include(CompileDefinitions)
|
|
|
|
# Registering include directories
|
|
target_include_directories(raylib
|
|
PUBLIC
|
|
$<INSTALL_INTERFACE:include>
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
|
|
PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}
|
|
${OPENGL_INCLUDE_DIR}
|
|
${OPENAL_INCLUDE_DIR}
|
|
)
|
|
|
|
# Copy the header files to the build directory for convenience
|
|
file(COPY ${raylib_public_headers} DESTINATION "include")
|
|
|
|
include(InstallConfigurations)
|
|
|
|
# Print the flags for the user
|
|
if (DEFINED CMAKE_BUILD_TYPE)
|
|
message(STATUS "Generated build type: ${CMAKE_BUILD_TYPE}")
|
|
else ()
|
|
message(STATUS "Generated config types: ${CMAKE_CONFIGURATION_TYPES}")
|
|
endif ()
|
|
|
|
message(STATUS "Compiling with the flags:")
|
|
message(STATUS " PLATFORM=" ${PLATFORM_CPP})
|
|
message(STATUS " GRAPHICS=" ${GRAPHICS})
|
|
|
|
include(PackConfigurations)
|
|
|
|
enable_testing()
|