g
This commit is contained in:
parent
90ac688f3d
commit
42764b5dd6
4 changed files with 175 additions and 81 deletions
161
CMakeLists.txt
161
CMakeLists.txt
|
@ -5,8 +5,8 @@
|
|||
cmake_minimum_required(VERSION 3.22)
|
||||
|
||||
project(sortiva
|
||||
LANGUAGES CXX
|
||||
VERSION 1.0.0
|
||||
LANGUAGES CXX
|
||||
VERSION 1.0.0
|
||||
)
|
||||
|
||||
# ========================================================
|
||||
|
@ -30,35 +30,35 @@ set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) # Build static
|
|||
# It then sets the folder property for the target.
|
||||
|
||||
function(put_targets_into_folder)
|
||||
set(oneValueArgs FOLDER)
|
||||
set(multiValueArgs TARGETS)
|
||||
cmake_parse_arguments(ARGS "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||
set(oneValueArgs FOLDER)
|
||||
set(multiValueArgs TARGETS)
|
||||
cmake_parse_arguments(ARGS "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||
|
||||
foreach(target ${ARGS_TARGETS})
|
||||
# Check if target exists
|
||||
if (NOT TARGET ${target})
|
||||
message(FATAL_ERROR "${target} target not found")
|
||||
endif()
|
||||
foreach(target ${ARGS_TARGETS})
|
||||
# Check if target exists
|
||||
if (NOT TARGET ${target})
|
||||
message(FATAL_ERROR "${target} target not found")
|
||||
endif()
|
||||
|
||||
# Get the actual target (if it is aliased)
|
||||
get_target_property(actual_target ${target} ALIASED_TARGET)
|
||||
if (NOT actual_target)
|
||||
set(actual_target ${target})
|
||||
endif()
|
||||
# Get the actual target (if it is aliased)
|
||||
get_target_property(actual_target ${target} ALIASED_TARGET)
|
||||
if (NOT actual_target)
|
||||
set(actual_target ${target})
|
||||
endif()
|
||||
|
||||
# Set the folder property for the target
|
||||
set_target_properties(${actual_target} PROPERTIES FOLDER ${ARGS_FOLDER})
|
||||
endforeach()
|
||||
# Set the folder property for the target
|
||||
set_target_properties(${actual_target} PROPERTIES FOLDER ${ARGS_FOLDER})
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
|
||||
function(find_files var_name path)
|
||||
set(sources)
|
||||
foreach(ext ${ARGN})
|
||||
file(GLOB_RECURSE files "${path}/*.${ext}")
|
||||
list(APPEND sources ${files})
|
||||
endforeach()
|
||||
set(${var_name} ${${var_name}} ${sources} PARENT_SCOPE)
|
||||
set(sources)
|
||||
foreach(ext ${ARGN})
|
||||
file(GLOB_RECURSE files "${path}/*.${ext}")
|
||||
list(APPEND sources ${files})
|
||||
endforeach()
|
||||
set(${var_name} ${${var_name}} ${sources} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# ========================================================
|
||||
|
@ -87,9 +87,9 @@ FetchContent_MakeAvailable(sol2)
|
|||
|
||||
# --- Add Lua
|
||||
FetchContent_Declare(
|
||||
lua
|
||||
GIT_REPOSITORY "https://github.com/marovira/lua"
|
||||
GIT_TAG "5.4.4"
|
||||
lua
|
||||
GIT_REPOSITORY "https://github.com/marovira/lua"
|
||||
GIT_TAG "5.4.4"
|
||||
)
|
||||
FetchContent_MakeAvailable(lua)
|
||||
|
||||
|
@ -103,11 +103,11 @@ set(SOL2_ENABLE_INSTALL OFF CACHE BOOL "" FORCE)
|
|||
# that are shared among all targets.
|
||||
|
||||
function(set_common_properties target)
|
||||
target_link_libraries(${target} PRIVATE sol2::sol2) # Link with Sol2
|
||||
target_compile_definitions(${target} PRIVATE SOL_ALL_SAFETIES_ON=1)
|
||||
target_include_directories(${target} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) # Include project headers
|
||||
target_sources(${target} PRIVATE ${SVA_COMMON_FILES}) # Include common files
|
||||
target_link_libraries(${target} PRIVATE lua::lua)
|
||||
target_link_libraries(${target} PRIVATE sol2::sol2) # Link with Sol2
|
||||
target_compile_definitions(${target} PRIVATE SOL_ALL_SAFETIES_ON=1)
|
||||
target_include_directories(${target} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) # Include project headers
|
||||
target_sources(${target} PRIVATE ${SVA_COMMON_FILES}) # Include common files
|
||||
target_link_libraries(${target} PRIVATE lua::lua)
|
||||
endfunction()
|
||||
|
||||
# ========================================================
|
||||
|
@ -118,7 +118,7 @@ set(GUI_TARGET_NAME "${PROJECT_NAME}")
|
|||
# --- Create GUI Executable
|
||||
find_files(SVA_GUI_FILES "./src/" hpp cpp h c hxx cxx)
|
||||
add_executable(${GUI_TARGET_NAME}
|
||||
${SVA_GUI_FILES}
|
||||
${SVA_GUI_FILES}
|
||||
)
|
||||
|
||||
source_group(TREE ${PROJECT_SOURCE_DIR}/src/ PREFIX "Source" FILES ${SVA_GUI_FILES})
|
||||
|
@ -127,53 +127,68 @@ source_group(TREE ${PROJECT_SOURCE_DIR}/src/ PREFIX "Source" FILES ${SVA_GUI_FIL
|
|||
# RAYLIB
|
||||
# ---------------
|
||||
# Dependencies
|
||||
set(RAYLIB_VERSION 5.0)
|
||||
set(RAYLIB_VERSION 5.5)
|
||||
find_package(raylib ${RAYLIB_VERSION} QUIET) # QUIET or REQUIRED
|
||||
|
||||
if (NOT raylib_FOUND) # If there's none, fetch and build raylib
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
raylib
|
||||
DOWNLOAD_EXTRACT_TIMESTAMP OFF
|
||||
URL https://github.com/raysan5/raylib/archive/refs/tags/${RAYLIB_VERSION}.tar.gz
|
||||
)
|
||||
FetchContent_GetProperties(raylib)
|
||||
if (NOT raylib_POPULATED) # Have we downloaded raylib yet?
|
||||
set(FETCHCONTENT_QUIET NO)
|
||||
FetchContent_MakeAvailable(raylib)
|
||||
set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) # don't build the supplied examples
|
||||
endif()
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
raylib
|
||||
DOWNLOAD_EXTRACT_TIMESTAMP OFF
|
||||
URL https://github.com/raysan5/raylib/archive/refs/tags/${RAYLIB_VERSION}.tar.gz
|
||||
)
|
||||
FetchContent_GetProperties(raylib)
|
||||
if (NOT raylib_POPULATED) # Have we downloaded raylib yet?
|
||||
set(FETCHCONTENT_QUIET NO)
|
||||
FetchContent_MakeAvailable(raylib)
|
||||
set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) # don't build the supplied examples
|
||||
endif()
|
||||
endif()
|
||||
|
||||
target_link_libraries(${GUI_TARGET_NAME} PRIVATE raylib)
|
||||
# raylib-cpp
|
||||
find_package(raylib_cpp QUIET)
|
||||
if (NOT raylib_cpp_FOUND)
|
||||
if (NOT DEFINED RAYLIB_CPP_VERSION)
|
||||
set(RAYLIB_CPP_VERSION next)
|
||||
endif()
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
raylib_cpp
|
||||
GIT_REPOSITORY https://github.com/RobLoach/raylib-cpp.git
|
||||
GIT_TAG ${RAYLIB_CPP_VERSION}
|
||||
)
|
||||
FetchContent_MakeAvailable(raylib_cpp)
|
||||
endif()
|
||||
|
||||
target_link_libraries(${GUI_TARGET_NAME} PRIVATE raylib raylib_cpp)
|
||||
|
||||
# Checks if OSX and links appropriate frameworks (Only required on MacOS)
|
||||
if (APPLE)
|
||||
target_link_libraries(${PROJECT_NAME} "-framework IOKit")
|
||||
target_link_libraries(${PROJECT_NAME} "-framework Cocoa")
|
||||
target_link_libraries(${PROJECT_NAME} "-framework OpenGL")
|
||||
target_link_libraries(${PROJECT_NAME} "-framework IOKit")
|
||||
target_link_libraries(${PROJECT_NAME} "-framework Cocoa")
|
||||
target_link_libraries(${PROJECT_NAME} "-framework OpenGL")
|
||||
endif()
|
||||
|
||||
|
||||
set_common_properties(${GUI_TARGET_NAME})
|
||||
|
||||
|
||||
|
||||
put_targets_into_folder(
|
||||
FOLDER "ThirdParty/raylib"
|
||||
TARGETS
|
||||
raylib uninstall
|
||||
FOLDER "ThirdParty/raylib"
|
||||
TARGETS
|
||||
raylib raylib_cpp uninstall
|
||||
)
|
||||
|
||||
put_targets_into_folder(
|
||||
FOLDER "ThirdParty/lua"
|
||||
TARGETS
|
||||
lua lua_lib
|
||||
FOLDER "ThirdParty/lua"
|
||||
TARGETS
|
||||
lua lua_lib
|
||||
)
|
||||
|
||||
put_targets_into_folder(
|
||||
FOLDER "ThirdParty/glfw"
|
||||
TARGETS
|
||||
glfw update_mappings
|
||||
FOLDER "ThirdParty/glfw"
|
||||
TARGETS
|
||||
glfw update_mappings
|
||||
)
|
||||
|
||||
|
||||
|
@ -182,17 +197,17 @@ put_targets_into_folder(
|
|||
set(SVA_CREATE_INCLUDES_TARGET ON CACHE BOOL "Create an includes target")
|
||||
|
||||
if(${SVA_CREATE_INCLUDES_TARGET})
|
||||
set(INCLUDES_TARGET_NAME "includes")
|
||||
set(INCLUDE_FILES)
|
||||
find_files(
|
||||
INCLUDE_FILES
|
||||
"include/"
|
||||
hpp h hxx
|
||||
)
|
||||
message(STATUS "Include files: ${INCLUDE_FILES}")
|
||||
add_custom_target(${INCLUDES_TARGET_NAME}
|
||||
SOURCES
|
||||
${INCLUDE_FILES}
|
||||
)
|
||||
source_group(TREE ${PROJECT_SOURCE_DIR}/include/ PREFIX "Source" FILES ${INCLUDE_FILES})
|
||||
set(INCLUDES_TARGET_NAME "includes")
|
||||
set(INCLUDE_FILES)
|
||||
find_files(
|
||||
INCLUDE_FILES
|
||||
"include/"
|
||||
hpp h hxx
|
||||
)
|
||||
message(STATUS "Include files: ${INCLUDE_FILES}")
|
||||
add_custom_target(${INCLUDES_TARGET_NAME}
|
||||
SOURCES
|
||||
${INCLUDE_FILES}
|
||||
)
|
||||
source_group(TREE ${PROJECT_SOURCE_DIR}/include/ PREFIX "Source" FILES ${INCLUDE_FILES})
|
||||
endif()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue