Squash project setup refactor

This commit is contained in:
Metehan Tuncbilek
2024-08-04 14:43:31 +02:00
committed by Georg Hagen
parent 6a1a76f4d1
commit 071ced8cb0
19 changed files with 172 additions and 122 deletions

View File

View File

@@ -0,0 +1,29 @@
function(LinkAppleFrameworks TARGET)
target_link_libraries(${TARGET}
PUBLIC "-framework CoreFoundation"
PUBLIC "-framework Foundation"
PUBLIC "-framework CoreImage"
PUBLIC "-framework CoreVideo"
PUBLIC "-framework Metal"
PUBLIC "-framework MetalPerformanceShaders"
PUBLIC "-framework ARKit"
PUBLIC "-lstdc++"
PUBLIC c++
PUBLIC c
)
# Locate system libraries on iOS
find_library(UIKIT UIKit)
find_library(FOUNDATION Foundation)
find_library(MOBILECORESERVICES MobileCoreServices)
find_library(CFNETWORK CFNetwork)
find_library(SYSTEMCONFIGURATION SystemConfiguration)
# link the frameworks located above
target_link_libraries(${TARGET} PUBLIC ${UIKIT})
target_link_libraries(${TARGET} PUBLIC ${FOUNDATION})
target_link_libraries(${TARGET} PUBLIC ${MOBILECORESERVICES})
target_link_libraries(${TARGET} PUBLIC ${CFNETWORK})
target_link_libraries(${TARGET} PUBLIC ${SYSTEMCONFIGURATION})
endfunction()

View File

@@ -0,0 +1,18 @@
function(FilterPlatformPaths sourcesVar)
if (IOS)
list(FILTER ${sourcesVar} EXCLUDE REGEX ".*GLFW.*")
else ()
list(FILTER ${sourcesVar} EXCLUDE REGEX ".*[\\/]Host[\\/]iOS[\\/].*")
endif ()
if (NOT LINUX)
list(FILTER ${sourcesVar} EXCLUDE REGEX ".*[\\/]Host[\\/]Linux[\\/].*")
endif ()
if (NOT WIN32)
list(FILTER ${sourcesVar} EXCLUDE REGEX ".*[\\/]Host[\\/]Windows[\\/].*")
endif ()
list(FILTER ${sourcesVar} EXCLUDE REGEX "main\.(m|mm|c|cpp)")
set(${sourcesVar} ${${sourcesVar}} PARENT_SCOPE)
endfunction()

View File

@@ -0,0 +1,33 @@
function(SetOptimisationSettings)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
if (LINUX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -mtune=native" PARENT_SCOPE)
elseif (APPLE)
add_compile_options("$<$<CONFIG:Release>:-O3>$<$<CONFIG:Debug>:-O0>$<$<CONFIG:MinSizeRel>:-Os>$<$<CONFIG:RelWithDebInfo>:-O2>")
set(CMAKE_Swift_FLAGS_DEBUG "-Onone" PARENT_SCOPE)
set(CMAKE_Swift_FLAGS_RELEASE "-O" PARENT_SCOPE)
set(CMAKE_Swift_FLAGS_MINSIZEREL "-Osize" PARENT_SCOPE)
endif ()
endfunction()
function(SetWarningSettings TARGET)
if (LINUX)
target_compile_options(${TARGET} PRIVATE -Wall -Wno-unknown-pragmas)
elseif (WIN32)
if (MSVC)
set_target_properties(${TARGET} PROPERTIES COMPILE_FLAGS "/wd4068")
set_target_properties(${TARGET} PROPERTIES LINK_FLAGS "/ignore:4099")
endif()
endif()
endfunction()
function(SetOutputDirs BASE_DIR)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${BASE_DIR}" PARENT_SCOPE)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${BASE_DIR}/release" PARENT_SCOPE)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${BASE_DIR}/minsizerel" PARENT_SCOPE)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${BASE_DIR}/relwithdebinfo" PARENT_SCOPE)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${BASE_DIR}/debug" PARENT_SCOPE)
set(CMAKE_DEBUG_POSTFIX "d" PARENT_SCOPE)
endfunction()

View File

@@ -0,0 +1,25 @@
function(SetShaderDependency TARGET SHADER_SRC_FOLDER SHADER_OUTPUT_FOLDER)
if (NOT EXISTS ${SHADER_OUTPUT_FOLDER})
file(MAKE_DIRECTORY ${SHADER_OUTPUT_FOLDER})
endif ()
file(GLOB SHADER_SRC_FILES ${SHADER_SRC_FOLDER}/*)
list(FILTER SHADER_SRC_FILES EXCLUDE REGEX ".*\\.(hpp|cpp)$")
foreach(SHADER_FILE ${SHADER_SRC_FILES})
get_filename_component(FILENAME ${SHADER_FILE} NAME_WLE)
if (NOT ${FILENAME} IN_LIST PROCESSED_FILES)
list(APPEND PROCESSED_FILES ${FILENAME})
list(APPEND OUTPUT_HEADERS ${SHADER_OUTPUT_FOLDER}/${FILENAME}.h)
list(APPEND OUTPUT_SOURCES ${SHADER_OUTPUT_FOLDER}/${FILENAME}.c)
endif()
endforeach()
set(SHADER_EXPECTED_OUTPUT ${OUTPUT_HEADERS} ${OUTPUT_SOURCES})
add_custom_command(OUTPUT ${SHADER_EXPECTED_OUTPUT}
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/TryCompileShaders.cmake
DEPENDS ${SHADER_SRC_FILES}
COMMENT "Recompiling shaders")
add_custom_target(RecompileShaders ALL
DEPENDS ${SHADER_EXPECTED_OUTPUT})
add_dependencies(${TARGET} RecompileShaders)
endfunction(SetShaderDependency)

View File

@@ -0,0 +1,30 @@
function(SetupVulkan TARGET)
if (APPLE)
find_package(MoltenVK REQUIRED)
target_link_libraries(${TARGET} PRIVATE ${MoltenVK_LIBRARIES})
else ()
find_package(Vulkan REQUIRED)
target_link_libraries(${TARGET} PRIVATE Vulkan::Vulkan)
if (NO_SHADERC)
message("Disable shaderc linking")
else()
find_package(Vulkan OPTIONAL_COMPONENTS shaderc_combined)
if (Vulkan_shaderc_combined_FOUND)
target_link_libraries(${TARGET} PRIVATE Vulkan::shaderc_combined)
target_compile_definitions(${TARGET} PRIVATE HAS_SHADERC)
endif ()
endif ()
endif ()
target_include_directories(${TARGET} PUBLIC ${Vulkan_INCLUDE_DIR})
if (ANDROID)
add_definitions(-DVK_USE_PLATFORM_ANDROID_KHR)
elseif (WIN32)
add_definitions(-DVK_USE_PLATFORM_WIN32_KHR)
elseif (LINUX)
add_definitions(-DVK_USE_PLATFORM_XCB_KHR)
find_package(XCB REQUIRED)
target_link_libraries(${TARGET} PRIVATE ${XCB_LIBRARIES})
endif()
endfunction()

View File

@@ -0,0 +1,10 @@
function(FindCmakeConfigDirs BASE_DIR OUTPUT_NAME)
file(GLOB_RECURSE ALL_CONFIGS "${BASE_DIR}/*[Cc]onfig.cmake")
set(PACKAGE_SUB_DIRS "")
foreach(CONF ${ALL_CONFIGS})
get_filename_component(DIR_NAME "${CONF}" DIRECTORY)
list(APPEND PACKAGE_SUB_DIRS "${DIR_NAME}")
endforeach()
list(REMOVE_DUPLICATES PACKAGE_SUB_DIRS)
set(${OUTPUT_NAME} ${PACKAGE_SUB_DIRS} PARENT_SCOPE)
endfunction()

View File

@@ -0,0 +1,15 @@
function(VarsFromFile filename)
if (EXISTS ${filename})
file(STRINGS ${filename} ConfigContents)
foreach(NameAndValue ${ConfigContents})
# Strip leading spaces
string(REGEX REPLACE "^[ ]+" "" NameAndValue ${NameAndValue})
# Find variable name
string(REGEX MATCH "^[^=]+" Name ${NameAndValue})
# Find the value
string(REPLACE "${Name}=" "" Value ${NameAndValue})
# Set the variable
set(${Name} "${Value}" PARENT_SCOPE)
endforeach()
endif ()
endfunction(VarsFromFile)