cmake_minimum_required(VERSION 3.22.1) project("face_sdk") set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) if(MSVC) add_compile_options(/Zc:__cplusplus) endif() if(CMAKE_SYSTEM_NAME STREQUAL "Android") message(STATUS "Building for Android") include_directories( vulkan third_party/glm third_party/vma third_party/vma/include ) add_library(face_sdk SHARED app/src/main/cpp/main.cpp app/src/main/cpp/AndroidOut.cpp app/src/main/cpp/DebugLog.h app/src/main/cpp/DebugLog.cpp app/src/main/cpp/CrashHandler.h app/src/main/cpp/CrashHandler.cpp vulkan/AppBase.h vulkan/AppBase.cpp vulkan/Application.h vulkan/Application.cpp vulkan/FaceApp.h vulkan/FaceApp.cpp vulkan/lodepng.cpp third_party/vma/src/VmaUsage.h third_party/vma/src/VmaUsage.cpp ) find_package(game-activity REQUIRED CONFIG) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u Java_com_google_androidgamesdk_GameActivity_initializeNativeCode") find_package(Vulkan REQUIRED) target_link_libraries(face_sdk game-activity::game-activity_static Vulkan::Vulkan android log # dl: needed by CrashHandler::dumpFrame -> dladdr() to map a # PC back to "module + symbol + offset" in the crash log. dl) target_compile_definitions(face_sdk PRIVATE VMA_STATIC_VULKAN_FUNCTIONS=0 VMA_DYNAMIC_VULKAN_FUNCTIONS=1 ) endif() if(CMAKE_SYSTEM_NAME STREQUAL "Windows" OR WIN32) message(STATUS "Building for Windows") add_compile_options(/utf-8) add_compile_definitions(_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING) include_directories( ${CMAKE_CURRENT_LIST_DIR}/vulkan ${CMAKE_CURRENT_LIST_DIR}/third_party ${CMAKE_CURRENT_LIST_DIR}/third_party/glm ${CMAKE_CURRENT_LIST_DIR}/third_party/vma ${CMAKE_CURRENT_LIST_DIR}/third_party/vma/include "third_party/glfw-3.4/output/include" "C:/VulkanSDK/1.4.321.1/Include" ) link_libraries( # "${CMAKE_CURRENT_LIST_DIR}/third_party/glfw-3.4/output/lib/glfw3.lib" "${CMAKE_CURRENT_LIST_DIR}/third_party/glfw-3.4/output/glfw3.lib" "C:/VulkanSDK/1.4.321.1/Lib/vulkan-1.lib" ) # 将源代码添加到此项目的可执行文件。 add_executable (face_sdk vulkan/AppBase.h vulkan/AppBase.cpp vulkan/Application.h vulkan/Application.cpp vulkan/FaceApp.h vulkan/FaceApp.cpp vulkan/main.cpp vulkan/lodepng.cpp third_party/vma/src/VmaUsage.h third_party/vma/src/VmaUsage.cpp ) endif() # target_compile_definitions(face_sdk PRIVATE VK_NO_PROTOTYPES) 使用volk 动态加载的时候需要定义,不自动生成vulkan接口 target_compile_definitions(face_sdk PRIVATE GLM_ENABLE_EXPERIMENTAL) # target_compile_definitions(face_sdk PRIVATE VULKAN_HPP_NO_STRUCT_CONSTRUCTORS) 解决vs 编译c++ 20 不支持新构造函数的特性