if(NOT USE_VULKAN) return() endif() if(ANDROID) if(NOT ANDROID_NDK) message(FATAL_ERROR "USE_VULKAN requires ANDROID_NDK set.") endif() # Vulkan from ANDROID_NDK set(VULKAN_INCLUDE_DIR "${ANDROID_NDK}/sources/third_party/vulkan/src/include") message(STATUS "VULKAN_INCLUDE_DIR:${VULKAN_INCLUDE_DIR}") set(VULKAN_ANDROID_NDK_WRAPPER_DIR "${ANDROID_NDK}/sources/third_party/vulkan/src/common") message(STATUS "Vulkan_ANDROID_NDK_WRAPPER_DIR:${VULKAN_ANDROID_NDK_WRAPPER_DIR}") set(VULKAN_WRAPPER_DIR "${VULKAN_ANDROID_NDK_WRAPPER_DIR}") add_library( VulkanWrapper STATIC ${VULKAN_WRAPPER_DIR}/vulkan_wrapper.h ${VULKAN_WRAPPER_DIR}/vulkan_wrapper.cpp) target_include_directories(VulkanWrapper PUBLIC .) target_include_directories(VulkanWrapper PUBLIC "${VULKAN_INCLUDE_DIR}") target_link_libraries(VulkanWrapper ${CMAKE_DL_LIBS}) string(APPEND Vulkan_DEFINES " -DUSE_VULKAN_WRAPPER") list(APPEND Vulkan_INCLUDES ${VULKAN_WRAPPER_DIR}) list(APPEND Vulkan_LIBS VulkanWrapper) # Shaderc if(USE_VULKAN_SHADERC_RUNTIME) # Shaderc from ANDROID_NDK set(Shaderc_ANDROID_NDK_INCLUDE_DIR "${ANDROID_NDK}/sources/third_party/shaderc/include") message(STATUS "Shaderc_ANDROID_NDK_INCLUDE_DIR:${Shaderc_ANDROID_NDK_INCLUDE_DIR}") find_path( GOOGLE_SHADERC_INCLUDE_DIRS NAMES shaderc/shaderc.hpp PATHS "${Shaderc_ANDROID_NDK_INCLUDE_DIR}") set(Shaderc_ANDROID_NDK_LIB_DIR "${ANDROID_NDK}/sources/third_party/shaderc/libs/${ANDROID_STL}/${ANDROID_ABI}") message(STATUS "Shaderc_ANDROID_NDK_LIB_DIR:${Shaderc_ANDROID_NDK_LIB_DIR}") find_library( GOOGLE_SHADERC_LIBRARIES NAMES shaderc PATHS "${Shaderc_ANDROID_NDK_LIB_DIR}") # Shaderc in NDK is not prebuilt if(NOT GOOGLE_SHADERC_LIBRARIES) set(NDK_SHADERC_DIR "${ANDROID_NDK}/sources/third_party/shaderc") set(NDK_BUILD_CMD "${ANDROID_NDK}/ndk-build") execute_process( COMMAND ${NDK_BUILD_CMD} NDK_PROJECT_PATH=${NDK_SHADERC_DIR} APP_BUILD_SCRIPT=${NDK_SHADERC_DIR}/Android.mk APP_PLATFORM=${ANDROID_PLATFORM} APP_STL=${ANDROID_STL} APP_ABI=${ANDROID_ABI} libshaderc_combined -j8 WORKING_DIRECTORY "${NDK_SHADERC_DIR}" RESULT_VARIABLE error_code) if(error_code) message(FATAL_ERROR "Failed to build ANDROID_NDK Shaderc error_code:${error_code}") else() unset(GOOGLE_SHADERC_LIBRARIES CACHE) find_library( GOOGLE_SHADERC_LIBRARIES NAMES shaderc HINTS "${Shaderc_ANDROID_NDK_LIB_DIR}") endif() endif(NOT GOOGLE_SHADERC_LIBRARIES) if(GOOGLE_SHADERC_INCLUDE_DIRS AND GOOGLE_SHADERC_LIBRARIES) message(STATUS "Shaderc FOUND include:${GOOGLE_SHADERC_INCLUDE_DIRS}") message(STATUS "Shaderc FOUND libs:${GOOGLE_SHADERC_LIBRARIES}") endif() list(APPEND Vulkan_INCLUDES ${GOOGLE_SHADERC_INCLUDE_DIRS}) list(APPEND Vulkan_LIBS ${GOOGLE_SHADERC_LIBRARIES}) endif(USE_VULKAN_SHADERC_RUNTIME) else() find_package(Vulkan) if(NOT Vulkan_FOUND) message(FATAL_ERROR "USE_VULKAN requires either Vulkan installed on system path or environment var VULKAN_SDK set.") endif() list(APPEND Vulkan_INCLUDES ${Vulkan_INCLUDE_DIRS}) list(APPEND Vulkan_LIBS ${Vulkan_LIBRARIES}) set(GOOGLE_SHADERC_INCLUDE_SEARCH_PATH ${Vulkan_INCLUDE_DIR}) set(GOOGLE_SHADERC_LIBRARY_SEARCH_PATH ${Vulkan_LIBRARY}) if(USE_VULKAN_SHADERC_RUNTIME) find_path( GOOGLE_SHADERC_INCLUDE_DIRS NAMES shaderc/shaderc.hpp PATHS ${GOOGLE_SHADERC_INCLUDE_SEARCH_PATH}) find_library( GOOGLE_SHADERC_LIBRARIES NAMES shaderc_combined PATHS ${GOOGLE_SHADERC_LIBRARY_SEARCH_PATH}) find_package_handle_standard_args( Shaderc DEFAULT_MSG GOOGLE_SHADERC_INCLUDE_DIRS GOOGLE_SHADERC_LIBRARIES) if(NOT Shaderc_FOUND) message(FATAL_ERROR "USE_VULKAN: Shaderc not found in VULKAN_SDK") else() message(STATUS "shaderc FOUND include:${GOOGLE_SHADERC_INCLUDE_DIRS}") message(STATUS "shaderc FOUND libs:${GOOGLE_SHADERC_LIBRARIES}") endif() list(APPEND Vulkan_INCLUDES ${GOOGLE_SHADERC_INCLUDE_DIRS}) list(APPEND Vulkan_LIBS ${GOOGLE_SHADERC_LIBRARIES}) endif(USE_VULKAN_SHADERC_RUNTIME) endif()