From 63f2dfae142ba70b13b74900af74e29730fa6a56 Mon Sep 17 00:00:00 2001 From: GeorgH93 Date: Fri, 19 Mar 2021 23:31:23 +0100 Subject: [PATCH] Update CMakeLists.txt --- CMakeLists.txt | 78 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 69 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2e77c31..ea83b80 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,6 +19,10 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/bin/release") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/bin/debug") set(CMAKE_DEBUG_POSTFIX "d") +if(LINUX) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -mtune=native") +endif() + project (openVulkanoCpp VERSION 1.0 LANGUAGES C CXX) add_executable(openVulkanoCpp openVulkanoCpp/main.cpp) @@ -28,6 +32,11 @@ target_include_directories(openVulkanoCpp PUBLIC openVulkanoCpp) # Setup IOS if(IOS) + set(APP_BUNDLE_IDENTIFIER "eu.georgh93.openVulkano") + set(MACOSX_BUNDLE_INFO_STRING ${APP_BUNDLE_IDENTIFIER}) + set(MACOSX_BUNDLE_GUI_IDENTIFIER ${APP_BUNDLE_IDENTIFIER}) + set(MACOSX_BUNDLE_BUNDLE_NAME ${APP_BUNDLE_IDENTIFIER}) + set(CMAKE_OSX_DEPLOYMENT_TARGET "14.1") # The used ARKit features are only available starting with iOS 14 target_link_libraries(openVulkanoCpp @@ -42,16 +51,48 @@ if(IOS) PRIVATE c++ PRIVATE 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(openVulkanoCpp PRIVATE ${UIKIT}) + target_link_libraries(openVulkanoCpp PRIVATE ${FOUNDATION}) + target_link_libraries(openVulkanoCpp PRIVATE ${MOBILECORESERVICES}) + target_link_libraries(openVulkanoCpp PRIVATE ${CFNETWORK}) + target_link_libraries(openVulkanoCpp PRIVATE ${SYSTEMCONFIGURATION}) endif () #Setup Vulkan -if (NOT IOS) - find_package(Vulkan REQUIRED) - set(Vulkan_LIBRARIES Vulkan::Vulkan) - target_link_libraries(openVulkanoCpp PRIVATE ${Vulkan_LIBRARIES}) - target_include_directories(openVulkanoCpp PUBLIC ${Vulkan_INCLUDE_DIR}) +if (APPLE) + # Try to find xcframework of MoltenVK + target_link_libraries(openVulkanoCpp) + cmake_path(SET MoltenVK_path NORMALIZE "$ENV{VULKAN_SDK}/../MoltenVK/") + cmake_path(SET MoltenVK_XC_path NORMALIZE "$ENV{VULKAN_SDK}/../MoltenVK/MoltenVK.xcframework") + if (EXISTS "${MoltenVK_path}" AND EXISTS "${MoltenVK_XC_path}") + if (EXISTS "${MoltenVK_path}/include") + set(Vulkan_INCLUDE_DIR "${MoltenVK_path}/include") + endif() + + target_link_libraries(openVulkanoCpp PRIVATE "${MoltenVK_XC_path}/ios-arm64/libMoltenVK.a") + message("Found MoltenVK xcframework: ${MoltenVK_XC_path}") + endif() + + if (NOT ${Vulkan_INCLUDE_DIR}) + #find_package(Vulkan REQUIRED COMPONENTS MoltenVK) + #target_link_libraries(openVulkanoCpp PRIVATE Vulkan::MoltenVK) + endif() else () -endif () + find_package(Vulkan REQUIRED) + target_link_libraries(openVulkanoCpp PRIVATE Vulkan::Vulkan) +endif() +target_include_directories(openVulkanoCpp PUBLIC ${Vulkan_INCLUDE_DIR}) + if (ANDROID) add_definitions(-DVK_USE_PLATFORM_ANDROID_KHR) @@ -64,15 +105,34 @@ elseif (LINUX) endif() set_property(TARGET openVulkanoCpp PROPERTY CXX_STANDARD 17) -target_compile_options(openVulkanoCpp PRIVATE -Wall) +if (LINUX) + target_compile_options(openVulkanoCpp PRIVATE -Wall) +endif() if (NOT ANDROID AND NOT IOS) Find_Package(OpenCV) + Find_Package(libjpeg-turbo) target_include_directories(openVulkanoCpp PRIVATE ${OpenCV_INCLUDE_DIRS}) - target_link_libraries(openVulkanoCpp PRIVATE glfw ${OpenCV_LIBS} sago::platform_folders) + target_link_libraries(openVulkanoCpp PRIVATE glfw ${OpenCV_LIBS} pugixml) + if (libjpeg-turbo_FOUND) + target_link_libraries(openVulkanoCpp PRIVATE libjpeg-turbo::turbojpeg) + endif() + #target_link_libraries(openVulkanoCpp PRIVATE assimp) + add_compile_definitions(GLM_FORCE_AVX2) endif() -target_link_libraries(openVulkanoCpp PRIVATE magic_enum yaml-cpp spdlog glm assimp pugixml archive_static) +list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/deps/INSTALL) +if (IOS) + target_link_libraries(openVulkanoCpp PRIVATE "/opt/libjpeg-turbo-ios/lib/libturbojpeg.a") + target_include_directories(openVulkanoCpp PRIVATE "/opt/libjpeg-turbo-ios/include") +endif () + +find_package(LibArchive REQUIRED) +set(ZLIB_USE_STATIC_LIBS ON) +find_package(ZLIB REQUIRED) +target_include_directories(openVulkanoCpp PRIVATE ${LibArchive_INCLUDE_DIR}) +target_link_libraries(openVulkanoCpp PRIVATE magic_enum yaml-cpp spdlog glm pugixml ${LibArchive_LIBRARIES} ${ZLIB_LIBRARIES} stb eigen utf8cpp) add_compile_definitions(GLM_FORCE_INTRINSICS) +add_compile_definitions(GLM_FORCE_SILENT_WARNINGS) add_compile_definitions(LIBARCHIVE_STATIC)