| cmake_minimum_required(VERSION 3.15) |
| project(FlutterEmbedderVulkanGLFW) |
| |
| set(CMAKE_CXX_STANDARD 17) |
| |
| # Primary target |
| |
| set(EXE_NAME embedder_example_vulkan) |
| |
| file(GLOB_RECURSE SOURCE_FILES "src/*.cc" "src/*.h") |
| add_executable(${EXE_NAME} ${SOURCE_FILES}) |
| |
| |
| # Dependency: Vulkan SDK |
| |
| # Override the SDK location by using the VULKAN_SDK environment variable. |
| # The VULKAN_SDK path should contain `include/vulkan/vulkan.hpp`. |
| # |
| # MacOS MoltenVK Vulkan SDK environment example: |
| # export VULKAN_SDK=~/VulkanSDK/1.2.198.1/macOS |
| # export VK_LOADER_DEBUG=all |
| # export VK_ICD_FILENAMES=$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json |
| # export VK_LAYER_PATH=$VULKAN_SDK/share/vulkan/explicit_layer.d |
| # export DYLD_LIBRARY_PATH=$VULKAN_SDK/lib:$DYLD_LIBRARY_PATH |
| |
| find_package(Vulkan REQUIRED) |
| target_include_directories(${EXE_NAME} PRIVATE ${Vulkan_INCLUDE_DIRS}) |
| target_link_libraries(${EXE_NAME} PRIVATE Vulkan::Vulkan) |
| |
| |
| # Dependency: GLFW |
| |
| set(GLFW_REPOSITORY ${CMAKE_SOURCE_DIR}/../../third_party/glfw) |
| |
| set(BUILD_SHARED_LIBS OFF) |
| set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE) |
| set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE) |
| set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) |
| set(GLFW_VULKAN_STATIC OFF CACHE BOOL "" FORCE) |
| add_subdirectory(${GLFW_REPOSITORY} build_glfw) |
| |
| target_link_libraries(${EXE_NAME} PRIVATE glfw) |
| target_include_directories(${EXE_NAME} PRIVATE ${GLFW_REPOSITORY}/include) |
| |
| |
| # Dependency: Flutter Engine |
| |
| # This is assuming you've built a local version of the Flutter Engine. If you |
| # downloaded yours from the internet you'll have to change this. |
| set(EMBEDDER_H_DIR ${CMAKE_SOURCE_DIR}/../../shell/platform/embedder) |
| set(FLUTTER_OUT_DIR ${CMAKE_SOURCE_DIR}/../../../out/host_debug_unopt) |
| |
| find_library(FLUTTER_LIB flutter_engine PATHS ${FLUTTER_OUT_DIR}) |
| |
| target_link_libraries(${EXE_NAME} PRIVATE ${FLUTTER_LIB}) |
| target_include_directories(${EXE_NAME} PRIVATE ${EMBEDDER_H_DIR}) |
| |
| # Copy the flutter library here since the shared library |
| # name is `./libflutter_engine.dylib`. |
| add_custom_command( |
| TARGET ${EXE_NAME} POST_BUILD |
| COMMAND ${CMAKE_COMMAND} -E copy |
| ${FLUTTER_LIB} |
| ${CMAKE_CURRENT_BINARY_DIR}) |