137 lines
5.5 KiB
CMake
137 lines
5.5 KiB
CMake
cmake_minimum_required(VERSION 3.5)
|
|
project(arona_core)
|
|
|
|
function(retrieve_files out_files)
|
|
set(source_list)
|
|
|
|
# 递归查找文件夹下的 .h .hpp. ini 文件保存到 HEAD_FILES
|
|
file(GLOB_RECURSE HEAD_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS *.h *.hpp *.ini)
|
|
|
|
# 递归查找文件夹下的 *.cpp *.c 文件保存到 SRC_FILES
|
|
file(GLOB_RECURSE SRC_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS *.cpp *.c)
|
|
|
|
# 将 HEDADER_FILES 和 SRC_FILES 保存到 ALL_FILES 变量
|
|
set(ALL_FILES ${HEAD_FILES} ${SRC_FILES})
|
|
|
|
set(RESULT "")
|
|
|
|
# 对 ALL_FILES 变量里面的所有文件分类(保留资源管理器的目录结构)
|
|
foreach(fileItem ${ALL_FILES})
|
|
# Get the directory of the source file
|
|
get_filename_component(PARENT_DIR "${fileItem}" DIRECTORY)
|
|
|
|
# 用于检查平台的条件
|
|
if(PARENT_DIR STREQUAL "windows")
|
|
if(WIN32)
|
|
set(RESULT "${RESULT};${fileItem}")
|
|
else()
|
|
continue()
|
|
endif()
|
|
elseif(PARENT_DIR STREQUAL "linux")
|
|
if(UNIX AND NOT APPLE)
|
|
set(RESULT "${RESULT};${fileItem}")
|
|
else()
|
|
continue()
|
|
endif()
|
|
elseif(PARENT_DIR STREQUAL "mac")
|
|
if(APPLE)
|
|
set(RESULT "${RESULT};${fileItem}")
|
|
else()
|
|
continue()
|
|
endif()
|
|
else()
|
|
# 如果文件夹名称不是平台,则始终包含
|
|
set(RESULT "${RESULT};${fileItem}")
|
|
endif()
|
|
|
|
# Remove common directory prefix to make the group
|
|
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "" GROUP "${PARENT_DIR}")
|
|
# Make sure we are using windows slashes
|
|
string(REPLACE "/" "\\" GROUP "${GROUP}")
|
|
# Group into "Source Files" and "Header Files"
|
|
set(GROUP "${GROUP}")
|
|
source_group("${GROUP}" FILES "${fileItem}")
|
|
endforeach()
|
|
|
|
set(${out_files} ${RESULT} PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
set(SHADER_CPP_GENERATED_CMAKE "${CMAKE_CURRENT_SOURCE_DIR}/cmake/GenerateShaderCPPFile.cmake" CACHE STRING "" FORCE)
|
|
|
|
function(compile_shader TARGET_NAME OUTPUT SHADER_INCLUDE_DIR)
|
|
set(working_dir "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
set(GLSLANG_BIN $ENV{VULKAN_SDK}/Bin/glslangValidator.exe) # 设置glslangValidator的位置
|
|
set(ALL_SHADER_FILE "")
|
|
# get files in SHADER_INCLUDE_DIR
|
|
file(GLOB_RECURSE ALL_SHADER_FILE "${SHADER_INCLUDE_DIR}/*.vert" "${SHADER_INCLUDE_DIR}/*.frag" "${SHADER_INCLUDE_DIR}/*.comp" "${SHADER_INCLUDE_DIR}/*.tesc" "${SHADER_INCLUDE_DIR}/*.tese" "${SHADER_INCLUDE_DIR}/*.geom")
|
|
|
|
|
|
foreach(SHADER ${ALL_SHADER_FILE}) # 遍历每一个shader源文件
|
|
get_filename_component(SHADER_NAME ${SHADER} NAME) # 获取shader的名字
|
|
string(REPLACE "." "_" HEADER_NAME ${SHADER_NAME}) # 在生成的.h文件中将文件名的'.'换成'_'
|
|
string(TOUPPER ${HEADER_NAME} GLOBAL_SHADER_VAR) # 将存储二进制内容的全局vector对象名改为全部大写
|
|
set(SPV_FILE "${OUTPUT}/spv/${SHADER_NAME}.spv") # 生成的.spv文件
|
|
set(CPP_FILE "${OUTPUT}/cpp/${HEADER_NAME}.h") # 生成的.h文件
|
|
add_custom_command(
|
|
OUTPUT ${SPV_FILE}
|
|
COMMAND ${GLSLANG_BIN} -I${SHADER_INCLUDE_DIR} -V100 -o ${SPV_FILE} ${SHADER}
|
|
DEPENDS ${SHADER}
|
|
WORKING_DIRECTORY "${working_dir}") # 添加编译命令,在项目生成时执行
|
|
list(APPEND ALL_GENERATED_SPV_FILES ${SPV_FILE})
|
|
add_custom_command(
|
|
OUTPUT ${CPP_FILE}
|
|
COMMAND ${CMAKE_COMMAND} -DPATH=${SPV_FILE} -DHEADER="${CPP_FILE}"
|
|
-DGLOBAL="${GLOBAL_SHADER_VAR}" -P "${SHADER_CPP_GENERATED_CMAKE}"
|
|
DEPENDS ${SPV_FILE}
|
|
WORKING_DIRECTORY "${working_dir}") # 添加执行将spv转换为h文件的cmake函数的命令
|
|
list(APPEND ALL_GENERATED_CPP_FILES ${CPP_FILE})
|
|
endforeach()
|
|
add_custom_target(${TARGET_NAME} # 将上述过程添加到一个生成目标中
|
|
DEPENDS ${ALL_GENERATED_SPV_FILES} ${ALL_GENERATED_CPP_FILES} SOURCES ${SHADERS})
|
|
endfunction()
|
|
|
|
# setup portaudio
|
|
set(PA_USE_ASIO ON CACHE BOOL "" FORCE)
|
|
set(PA_BUILD_SHARED_LIBS ON CACHE BOOL "" FORCE)
|
|
|
|
if (WIN32)
|
|
set(PA_USE_WMME OFF CACHE BOOL "" FORCE)
|
|
set(PA_USE_WDMKS OFF CACHE BOOL "" FORCE)
|
|
set(PA_USE_WDMKS_DEVICE_INFO OFF CACHE BOOL "" FORCE)
|
|
set(PA_USE_DS OFF CACHE BOOL "" FORCE)
|
|
elseif(APPLE)
|
|
set(PA_USE_COREAUDIO ON CACHE BOOL "" FORCE)
|
|
endif()
|
|
|
|
# setup spdlog
|
|
set(SPDLOG_BUILD_SHARED ON CACHE BOOL "" FORCE)
|
|
set(SPDLOG_BUILD_EXAMPLE OFF CACHE BOOL "" FORCE)
|
|
set(SPDLOG_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
|
set(SPDLOG_BUILD_BENCH OFF CACHE BOOL "" FORCE)
|
|
set(SPDLOG_FMT_EXTERNAL OFF CACHE BOOL "" FORCE)
|
|
set(SPDLOG_FMT_EXTERNAL_HO OFF CACHE BOOL "" FORCE)
|
|
set(SPDLOG_WCHAR_SUPPORT ON CACHE BOOL "" FORCE)
|
|
set(SPDLOG_ENABLE_PCH ON CACHE BOOL "" FORCE)
|
|
set(SPDLOG_USE_STD_FORMAT OFF CACHE BOOL "" FORCE)
|
|
|
|
if (MSVC)
|
|
link_directories(${CMAKE_BINARY_DIR}/bin/$<CONFIG>)
|
|
endif ()
|
|
|
|
# setup taskflow
|
|
set(TF_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
|
set(TF_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
|
|
|
|
add_subdirectory(core)
|
|
add_subdirectory(third_party/imgui)
|
|
add_subdirectory(third_party/portaudio)
|
|
add_subdirectory(third_party/spdlog)
|
|
add_subdirectory(third_party/glfw)
|
|
add_subdirectory(third_party/mempool)
|
|
add_subdirectory(third_party/taskflow)
|
|
|
|
add_definitions(-DGLFW_INCLUDE_NONE)
|
|
|
|
# install
|
|
install(DIRECTORY ${CMAKE_SOURCE_DIR}/third_party/imgui/imgui/misc/fonts DESTINATION ${CMAKE_BINARY_DIR}/bin)
|