feat: Add CMake build configuration for the Windows platform.
This commit is contained in:
1 parent
bf1a6690af
commit
be1f2a0deb
4 files changed
+72
-109
No files matched your search
+72
-1
@@ -34,10 +34,50 @@ endfunction()
|
||||
set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
|
||||
add_subdirectory(${FLUTTER_MANAGED_DIR})
|
||||
|
||||
add_subdirectory("runner")
|
||||
# The application target is defined here directly to ensure it's available
|
||||
# for plugin linking and bundling logic in a single scope.
|
||||
add_executable(${BINARY_NAME} WIN32
|
||||
"runner/flutter_window.cpp"
|
||||
"runner/main.cpp"
|
||||
"runner/utils.cpp"
|
||||
"runner/win32_window.cpp"
|
||||
"${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
|
||||
"runner/Runner.rc"
|
||||
"runner/runner.exe.manifest"
|
||||
)
|
||||
|
||||
apply_standard_settings(${BINARY_NAME})
|
||||
|
||||
target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"")
|
||||
target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}")
|
||||
target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}")
|
||||
target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}")
|
||||
target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}")
|
||||
target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX")
|
||||
|
||||
target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app)
|
||||
target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib")
|
||||
target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/runner")
|
||||
|
||||
add_dependencies(${BINARY_NAME} flutter_assemble)
|
||||
|
||||
# Generated plugin build rules, which manage building the plugins and adding
|
||||
# them to the application.
|
||||
include(flutter/generated_plugins.cmake)
|
||||
|
||||
# === Fix Plugin-Specific Variable Naming Nuisances ===
|
||||
# Some plugins (like whisper_ggml_plus) use non-standard variable names for bundling.
|
||||
# We explicitly bridge them here so Flutter's standard logic picks them up.
|
||||
if(DEFINED ggml_library_flutter_bundled_libraries)
|
||||
list(APPEND PLUGIN_BUNDLED_LIBRARIES ${ggml_library_flutter_bundled_libraries})
|
||||
endif()
|
||||
|
||||
# === Explicit Dependencies for FFI Plugins ===
|
||||
if(TARGET whisper_ggml_plus)
|
||||
add_dependencies(${BINARY_NAME} whisper_ggml_plus)
|
||||
endif()
|
||||
|
||||
# === Installation ===
|
||||
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "..." FORCE)
|
||||
set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data")
|
||||
@@ -59,3 +99,34 @@ install(CODE "file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_D
|
||||
install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime)
|
||||
|
||||
install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" CONFIGURATIONS Profile;Release COMPONENT Runtime)
|
||||
|
||||
# === Consolidated Bundling Logic (POST_BUILD) ===
|
||||
# We do this at the end of the top-level file to ensure:
|
||||
# 1. The ${BINARY_NAME} target (defined in runner/) exists.
|
||||
# 2. PLUGIN_BUNDLED_LIBRARIES is fully populated by include(generated_plugins.cmake).
|
||||
|
||||
# 1. Copy Core Flutter and ICU data
|
||||
add_custom_command(TARGET ${BINARY_NAME} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FLUTTER_LIBRARY}" "$<TARGET_FILE_DIR:${BINARY_NAME}>"
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:${BINARY_NAME}>/data"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FLUTTER_ICU_DATA_FILE}" "$<TARGET_FILE_DIR:${BINARY_NAME}>/data"
|
||||
VERBATIM)
|
||||
|
||||
# 2. Copy Plugin Bundled Libraries (DLLs)
|
||||
# Note: Use a generator expression to handle the list of libraries correctly.
|
||||
if(PLUGIN_BUNDLED_LIBRARIES)
|
||||
add_custom_command(TARGET ${BINARY_NAME} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PLUGIN_BUNDLED_LIBRARIES} "$<TARGET_FILE_DIR:${BINARY_NAME}>"
|
||||
VERBATIM)
|
||||
endif()
|
||||
|
||||
# 3. Copy AOT Kernel (app.so) for Release/Profile modes
|
||||
add_custom_command(TARGET ${BINARY_NAME} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E $<$<NOT:$<CONFIG:Debug>>:copy_if_different> "${AOT_LIBRARY}" "$<TARGET_FILE_DIR:${BINARY_NAME}>/data"
|
||||
VERBATIM)
|
||||
|
||||
# 4. Copy Flutter Assets
|
||||
add_custom_command(TARGET ${BINARY_NAME} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:${BINARY_NAME}>/data/flutter_assets"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${PROJECT_BUILD_DIR}/flutter_assets" "$<TARGET_FILE_DIR:${BINARY_NAME}>/data/flutter_assets"
|
||||
VERBATIM)
|
||||
@@ -1,42 +0,0 @@
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
project(runner LANGUAGES CXX)
|
||||
|
||||
add_executable(${BINARY_NAME} WIN32
|
||||
"flutter_window.cpp"
|
||||
"main.cpp"
|
||||
"utils.cpp"
|
||||
"win32_window.cpp"
|
||||
"${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
|
||||
"Runner.rc"
|
||||
"runner.exe.manifest"
|
||||
)
|
||||
|
||||
apply_standard_settings(${BINARY_NAME})
|
||||
|
||||
target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"")
|
||||
target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}")
|
||||
target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}")
|
||||
target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}")
|
||||
target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}")
|
||||
|
||||
target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX")
|
||||
|
||||
target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app)
|
||||
target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib")
|
||||
target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}")
|
||||
|
||||
add_dependencies(${BINARY_NAME} flutter_assemble)
|
||||
|
||||
# Unified build-time dependency copy script
|
||||
add_custom_command(TARGET ${BINARY_NAME} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-D "BINARY_DIR=${CMAKE_BINARY_DIR}"
|
||||
-D "SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
-D "OUTPUT_DIR=$<TARGET_FILE_DIR:${BINARY_NAME}>"
|
||||
-D "FLUTTER_LIBRARY=${FLUTTER_LIBRARY}"
|
||||
-D "FLUTTER_ICU_DATA_FILE=${FLUTTER_ICU_DATA_FILE}"
|
||||
-D "PROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}"
|
||||
-D "BUILD_TYPE=$<CONFIG>"
|
||||
-P "${CMAKE_CURRENT_SOURCE_DIR}/copy_dependencies.cmake"
|
||||
VERBATIM
|
||||
)
|
||||
@@ -1,50 +0,0 @@
|
||||
# Robust build-time dependency copy script
|
||||
|
||||
message(STATUS "DEBUG: Running copy_dependencies.cmake")
|
||||
message(STATUS "DEBUG: BINARY_DIR: ${BINARY_DIR}")
|
||||
message(STATUS "DEBUG: OUTPUT_DIR: ${OUTPUT_DIR}")
|
||||
|
||||
# 1. Copy Core Flutter DLLs
|
||||
if(EXISTS "${FLUTTER_LIBRARY}")
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FLUTTER_LIBRARY}" "${OUTPUT_DIR}")
|
||||
endif()
|
||||
|
||||
if(EXISTS "${FLUTTER_ICU_DATA_FILE}")
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory "${OUTPUT_DIR}/data")
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FLUTTER_ICU_DATA_FILE}" "${OUTPUT_DIR}/data")
|
||||
endif()
|
||||
|
||||
# 1.1 Copy AOT Data (app.so) for Release/Profile
|
||||
if(NOT BUILD_TYPE STREQUAL "Debug")
|
||||
file(GLOB_RECURSE app_so "${BINARY_DIR}/*/app.so")
|
||||
if(app_so)
|
||||
list(GET app_so 0 first_app_so)
|
||||
message(STATUS "DEBUG: Found app.so at ${first_app_so}")
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory "${OUTPUT_DIR}/data")
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${first_app_so}" "${OUTPUT_DIR}/data")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# 2. Copy Assets
|
||||
if(EXISTS "${PROJECT_BUILD_DIR}/flutter_assets")
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory "${OUTPUT_DIR}/data/flutter_assets")
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${PROJECT_BUILD_DIR}/flutter_assets" "${OUTPUT_DIR}/data/flutter_assets")
|
||||
endif()
|
||||
|
||||
# 3. Copy Plugin DLLs (Search and find)
|
||||
set(DLL_NAMES
|
||||
"whisper_ggml_plus.dll"
|
||||
"ffmpeg_kit_extended_flutter_plugin.dll"
|
||||
"libffmpegkit.dll"
|
||||
)
|
||||
|
||||
foreach(dll ${DLL_NAMES})
|
||||
file(GLOB_RECURSE found_dll "${BINARY_DIR}/*/${dll}")
|
||||
if(found_dll)
|
||||
list(GET found_dll 0 first_found) # Take the first one found
|
||||
message(STATUS "DEBUG: Found ${dll} at ${first_found}")
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${first_found}" "${OUTPUT_DIR}")
|
||||
else()
|
||||
message(STATUS "DEBUG: Could not find ${dll} in ${BINARY_DIR}")
|
||||
endif()
|
||||
endforeach()
|
||||
@@ -1,16 +0,0 @@
|
||||
set(SEARCH_PATHS
|
||||
"${CMAKE_BINARY_DIR}/plugins/ffmpeg_kit_extended_flutter/libffmpegkit.dll"
|
||||
"${CMAKE_BINARY_DIR}/install/libffmpegkit.dll"
|
||||
"${CMAKE_BINARY_DIR}/runner/Debug/libffmpegkit.dll"
|
||||
)
|
||||
|
||||
foreach(path ${SEARCH_PATHS})
|
||||
if(EXISTS "${path}")
|
||||
message(STATUS "DEBUG: Found libffmpegkit.dll at ${path}")
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
"${path}"
|
||||
"${CMAKE_BINARY_DIR}/runner/${BUILD_TYPE}"
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
endforeach()
|
||||
Reference in new issue
Block a user