125 lines
3.3 KiB
CMake
125 lines
3.3 KiB
CMake
|
|
if(KOMPUTE_OPT_ENABLE_SPDLOG)
|
|
if(KOMPUTE_OPT_REPO_SUBMODULE_BUILD)
|
|
set(SPDLOG_INSTALL ON)
|
|
add_subdirectory(${PROJECT_SOURCE_DIR}/external/spdlog ${CMAKE_CURRENT_BINARY_DIR}/kompute_spdlog)
|
|
else()
|
|
find_package(spdlog REQUIRED)
|
|
endif()
|
|
endif()
|
|
|
|
if(KOMPUTE_OPT_ANDOID_BUILD)
|
|
find_library(android android)
|
|
endif()
|
|
|
|
# We don't import Vulkan library if Android build as its build dynamically
|
|
# Otherwise it is expected that the Vulkan SDK and dependencies are installed
|
|
if(NOT KOMPUTE_OPT_ANDOID_BUILD)
|
|
find_package(Vulkan REQUIRED)
|
|
endif()
|
|
|
|
if(KOMPUTE_OPT_BUILD_SHADERS)
|
|
# all shaders are compiled into cpp files
|
|
kompute_make(build_shaders
|
|
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
|
endif()
|
|
|
|
if(KOMPUTE_OPT_BUILD_SINGLE_HEADER)
|
|
# all headers are compiled into a single header
|
|
kompute_make(build_single_header
|
|
OUTPUT ${PROJECT_SOURCE_DIR}/single_include)
|
|
endif()
|
|
|
|
file(GLOB kompute_CPP
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/*.cpp"
|
|
)
|
|
|
|
if(KOMPUTE_OPT_ANDOID_BUILD)
|
|
set(VK_ANDROID_COMMON_DIR ${ANDROID_NDK}/sources/third_party/vulkan/src/common)
|
|
set(VK_ANDROID_PATCH_DIR ${PROJECT_SOURCE_DIR}/vk_ndk_wrapper_include/)
|
|
set(VK_ANDROID_INCLUDE_DIR ${ANDROID_NDK}/sources/third_party/vulkan/src/include)
|
|
|
|
include_directories(
|
|
${VK_ANDROID_COMMON_DIR}
|
|
${VK_ANDROID_PATCH_DIR}
|
|
${VK_ANDROID_INCLUDE_DIR})
|
|
|
|
add_library(kompute_vk_ndk_wrapper STATIC
|
|
${PROJECT_SOURCE_DIR}/vk_ndk_wrapper_include/kompute_vk_ndk_wrapper.cpp)
|
|
endif()
|
|
|
|
add_library(kompute
|
|
${kompute_CPP})
|
|
|
|
target_include_directories(
|
|
kompute PUBLIC
|
|
$<INSTALL_INTERFACE:include>
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
)
|
|
|
|
if(NOT KOMPUTE_OPT_ANDOID_BUILD)
|
|
target_link_libraries(
|
|
kompute
|
|
Vulkan::Vulkan
|
|
)
|
|
else()
|
|
target_link_libraries(
|
|
kompute
|
|
)
|
|
endif()
|
|
|
|
if(KOMPUTE_OPT_REPO_SUBMODULE_BUILD)
|
|
# Override the default Vulkan::Vulkan headers
|
|
# In this case we only use the build interface due to https://github.com/KhronosGroup/Vulkan-Headers/issues/157
|
|
add_subdirectory(${PROJECT_SOURCE_DIR}/external/Vulkan-Headers ${CMAKE_CURRENT_BINARY_DIR}/kompute_vulkan_headers)
|
|
get_target_property(VULKAN_HEADERS_INCLUDES Vulkan-Headers INTERFACE_INCLUDE_DIRECTORIES)
|
|
target_include_directories(
|
|
kompute PUBLIC
|
|
$<BUILD_INTERFACE:${VULKAN_HEADERS_INCLUDES}>)
|
|
endif()
|
|
|
|
if(KOMPUTE_OPT_ENABLE_SPDLOG)
|
|
target_link_libraries(
|
|
kompute
|
|
spdlog::spdlog
|
|
)
|
|
endif()
|
|
|
|
if(KOMPUTE_OPT_ANDOID_BUILD)
|
|
target_link_libraries(
|
|
kompute
|
|
kompute_vk_ndk_wrapper
|
|
log
|
|
android
|
|
)
|
|
endif()
|
|
|
|
if(KOMPUTE_OPT_BUILD_SHADERS)
|
|
add_dependencies(kompute
|
|
build_shaders)
|
|
endif()
|
|
|
|
if(KOMPUTE_OPT_BUILD_SINGLE_HEADER)
|
|
add_dependencies(kompute
|
|
build_single_header)
|
|
endif()
|
|
|
|
add_library(kompute::kompute ALIAS kompute)
|
|
|
|
if(KOMPUTE_OPT_INSTALL)
|
|
install(TARGETS kompute EXPORT KomputeTargets
|
|
LIBRARY DESTINATION lib
|
|
ARCHIVE DESTINATION lib
|
|
INCLUDES DESTINATION include)
|
|
|
|
install(DIRECTORY include/ DESTINATION include)
|
|
|
|
install(DIRECTORY ${PROJECT_SOURCE_DIR}/single_include/
|
|
DESTINATION include)
|
|
|
|
install(EXPORT KomputeTargets
|
|
FILE komputeConfig.cmake
|
|
NAMESPACE kompute::
|
|
DESTINATION lib/cmake/kompute)
|
|
endif()
|
|
|