diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/CMakeLists.txt b/packages/flutter_tools/templates/app/winuwp.tmpl/CMakeLists.txt new file mode 100644 index 00000000000..13282d1099a --- /dev/null +++ b/packages/flutter_tools/templates/app/winuwp.tmpl/CMakeLists.txt @@ -0,0 +1,57 @@ +cmake_minimum_required(VERSION 3.8) +set(CMAKE_SYSTEM_NAME WindowsStore) +set(CMAKE_SYSTEM_VERSION 10.0) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED YES) + +project(runner LANGUAGES CXX) + +cmake_policy(SET CMP0079 NEW) + +set(BINARY_NAME "app") + +# Configure build options. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() + +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100" /await) + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") + target_compile_definitions(${TARGET} PRIVATE WINUWP) + set_target_properties(${TARGET} PROPERTIES VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION 10.0.18362.0) +endfunction() + +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") + +# Flutter library and tool build rules. +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build +add_subdirectory("runner_uwp") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/flutter/CMakeLists.txt b/packages/flutter_tools/templates/app/winuwp.tmpl/flutter/CMakeLists.txt new file mode 100644 index 00000000000..ddf45257f87 --- /dev/null +++ b/packages/flutter_tools/templates/app/winuwp.tmpl/flutter/CMakeLists.txt @@ -0,0 +1,91 @@ +cmake_minimum_required(VERSION 3.8) +set(CMAKE_SYSTEM_NAME WindowsStore) +set(CMAKE_SYSTEM_VERSION 10.0) +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +include(CMakePrintHelpers) + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows_winuwp.dll") + +# === Assets === +set(CMAKE_INSTALL_MANIFEST "${EPHEMERAL_DIR}/install_manifest") +file(STRINGS ${CMAKE_INSTALL_MANIFEST} INSTALL_MANIFEST_CONTENT) + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(INSTALL_MANIFEST_CONTENT ${INSTALL_MANIFEST_CONTENT} PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/project_version b/packages/flutter_tools/templates/app/winuwp.tmpl/project_version index 573541ac970..c227083464f 100644 --- a/packages/flutter_tools/templates/app/winuwp.tmpl/project_version +++ b/packages/flutter_tools/templates/app/winuwp.tmpl/project_version @@ -1 +1 @@ -0 +0 \ No newline at end of file diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-100.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-100.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-125.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-125.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-150.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-150.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-200.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-200.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-400.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-400.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/LockScreenLogo.scale-200.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/LockScreenLogo.scale-200.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-100.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-100.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-125.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-125.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-150.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-150.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-200.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-200.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-400.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-400.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-100.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-100.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-125.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-125.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-150.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-150.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-200.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-200.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-400.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-400.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-100.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-100.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-125.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-125.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-150.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-150.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-200.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-200.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-400.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-400.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-16.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-16.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-256.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-256.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-32.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-32.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-48.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-48.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-100.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-100.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-125.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-125.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-150.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-150.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-200.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-200.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-400.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-400.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-16.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-16.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-24.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-24.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-256.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-256.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-32.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-32.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-48.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-48.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/StoreLogo.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/StoreLogo.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-100.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-100.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-125.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-125.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-150.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-150.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-200.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-200.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-400.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-400.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Wide310x150Logo.scale-200.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/Wide310x150Logo.scale-200.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-100.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-100.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-125.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-125.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-150.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-150.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-200.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-200.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-400.png.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-400.png.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/CMakeLists.txt.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/CMakeLists.txt.tmpl new file mode 100644 index 00000000000..4ac70c511e6 --- /dev/null +++ b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/CMakeLists.txt.tmpl @@ -0,0 +1,127 @@ +cmake_minimum_required (VERSION 3.8) +set(CMAKE_SYSTEM_NAME WindowsStore) +set(CMAKE_SYSTEM_VERSION 10.0) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED YES) + +include(CMakePrintHelpers) + +project (runner LANGUAGES CXX) + +# UWP tile and icon assets. +set(ASSET_FILES ${ASSET_FILES} + Assets/LargeTile.scale-100.png + Assets/LargeTile.scale-125.png + Assets/LargeTile.scale-150.png + Assets/LargeTile.scale-200.png + Assets/LargeTile.scale-400.png + Assets/LockScreenLogo.scale-200.png + Assets/SmallTile.scale-100.png + Assets/SmallTile.scale-125.png + Assets/SmallTile.scale-150.png + Assets/SmallTile.scale-200.png + Assets/SmallTile.scale-400.png + Assets/SplashScreen.scale-100.png + Assets/SplashScreen.scale-125.png + Assets/SplashScreen.scale-150.png + Assets/SplashScreen.scale-200.png + Assets/SplashScreen.scale-400.png + Assets/Square44x44Logo.altform-unplated_targetsize-16.png + Assets/Square44x44Logo.altform-unplated_targetsize-32.png + Assets/Square44x44Logo.altform-unplated_targetsize-48.png + Assets/Square44x44Logo.altform-unplated_targetsize-256.png + Assets/Square44x44Logo.scale-100.png + Assets/Square44x44Logo.scale-125.png + Assets/Square44x44Logo.scale-150.png + Assets/Square44x44Logo.scale-200.png + Assets/Square44x44Logo.scale-400.png + Assets/Square44x44Logo.targetsize-16.png + Assets/Square44x44Logo.targetsize-24.png + Assets/Square44x44Logo.targetsize-24_altform-unplated.png + Assets/Square44x44Logo.targetsize-32.png + Assets/Square44x44Logo.targetsize-48.png + Assets/Square44x44Logo.targetsize-256.png + Assets/Square150x150Logo.scale-100.png + Assets/Square150x150Logo.scale-125.png + Assets/Square150x150Logo.scale-150.png + Assets/Square150x150Logo.scale-200.png + Assets/Square150x150Logo.scale-400.png + Assets/StoreLogo.png + Assets/StoreLogo.scale-100.png + Assets/StoreLogo.scale-125.png + Assets/StoreLogo.scale-150.png + Assets/StoreLogo.scale-200.png + Assets/StoreLogo.scale-400.png + Assets/Wide310x150Logo.scale-200.png + Assets/WideTile.scale-100.png + Assets/WideTile.scale-125.png + Assets/WideTile.scale-150.png + Assets/WideTile.scale-200.png + Assets/WideTile.scale-400.png +) + +# Configure package manifest file. +set(APP_MANIFEST_NAME Package.appxmanifest) +set(APP_MANIFEST_TARGET_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/${APP_MANIFEST_NAME}) +set(SHORT_NAME ${BINARY_NAME}) +set(PACKAGE_GUID "{{windowsIdentifier}}") + +configure_file( + appxmanifest.in + ${APP_MANIFEST_TARGET_LOCATION} + @ONLY) + +set(CONTENT_FILES ${APP_MANIFEST_TARGET_LOCATION}) + +# Configure package content files. +set_property(SOURCE ${CONTENT_FILES} PROPERTY VS_DEPLOYMENT_CONTENT 1) + +set(RESOURCE_FILES ${ASSET_FILES} ${CONTENT_FILES} Windows_TemporaryKey.pfx) +set_property(SOURCE ${ASSET_FILES} PROPERTY VS_DEPLOYMENT_CONTENT 1) +set_property(SOURCE ${ASSET_FILES} PROPERTY VS_DEPLOYMENT_LOCATION "Assets") + +set(STRING_FILES Resources.pri) +set_property(SOURCE ${STRING_FILES} PROPERTY VS_TOOL_OVERRIDE "PRIResource") + +source_group("Resource Files" FILES ${RESOURCE_FILES} ${CONTENT_FILES} ${STRING_FILES}) + +# Configure Flutter assets using tool generated install manifest +foreach(ITEM ${INSTALL_MANIFEST_CONTENT}) + get_filename_component(ITEM_REL ${CMAKE_BINARY_DIR} DIRECTORY) + file(RELATIVE_PATH RELPATH ${ITEM_REL} ${ITEM}) + + get_filename_component(RELPATH ${RELPATH} DIRECTORY) + get_filename_component(ITEMEXT ${ITEM} LAST_EXT) + + if("${ITEMEXT}" STREQUAL ".dll" OR "${ITEMEXT}" STREQUAL ".pdb") + string(CONCAT RELPATH "") + elseif ("${ITEMEXT}" STREQUAL ".so") + file(RELATIVE_PATH RELPATH "${ITEM_REL}/winuwp" ${ITEM}) + string(REGEX REPLACE "/" "\\\\" RELPATH ${RELPATH}) + string(CONCAT RELPATH "Assets\\Data") + elseif("${ITEMEXT}" STREQUAL ".dat") + string(CONCAT RELPATH "Assets\\Data") + else() + string(REGEX REPLACE "/" "\\\\" RELPATH ${RELPATH}) + string(CONCAT RELPATH "Assets\\Data\\" ${RELPATH}) + endif() + + cmake_print_variables(${RELPATH}) + + set_property(SOURCE ${ITEM} PROPERTY VS_DEPLOYMENT_CONTENT 1) + set_property(SOURCE ${ITEM} PROPERTY VS_DEPLOYMENT_LOCATION ${RELPATH}) +endforeach() + +add_executable (${BINARY_NAME} WIN32 + main.cpp + flutter_frameworkview.cpp + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + ${RESOURCE_FILES} + ${INSTALL_MANIFEST_CONTENT} +) +apply_standard_settings(${BINARY_NAME}) +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") +target_link_libraries(${BINARY_NAME} PRIVATE WindowsApp flutter flutter_wrapper_app) +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/CMakeSettings.json b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/CMakeSettings.json new file mode 100644 index 00000000000..ba63a530d74 --- /dev/null +++ b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/CMakeSettings.json @@ -0,0 +1,27 @@ +{ + // See https://go.microsoft.com//fwlink//?linkid=834763 for more information about this file. + "configurations": [ + { + "name": "Debug", + "generator": "Visual Studio 15 2017 Win64", + "configurationType": "Debug", + "inheritEnvironments": [ "msvc_x64_x64" ], + "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}", + "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "", + "ctestCommandArgs": "" + }, + { + "name": "Release", + "generator": "Visual Studio 15 2017 Win64", + "configurationType": "Release", + "inheritEnvironments": [ "msvc_x64_x64" ], + "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}", + "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "", + "ctestCommandArgs": "" + } + ] +} diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Windows_TemporaryKey.pfx.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/Windows_TemporaryKey.pfx.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/appxmanifest.in b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/appxmanifest.in new file mode 100644 index 00000000000..570d424ee82 --- /dev/null +++ b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/appxmanifest.in @@ -0,0 +1,42 @@ + + + + + + + + @SHORT_NAME@ + CMake Test Cert + Assets/StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/flutter_frameworkview.cpp b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/flutter_frameworkview.cpp new file mode 100644 index 00000000000..bcdc73adbf6 --- /dev/null +++ b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/flutter_frameworkview.cpp @@ -0,0 +1,155 @@ +#include "winrt/Windows.ApplicationModel.Core.h" +#include "winrt/Windows.Foundation.h" +#include "winrt/Windows.System.Profile.h" +#include "winrt/Windows.System.Threading.h" +#include "winrt/Windows.UI.Core.h" +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include + +struct FlutterFrameworkView + : winrt::implements< + FlutterFrameworkView, + winrt::Windows::ApplicationModel::Core::IFrameworkView> { + // |winrt::Windows::ApplicationModel::Core::IFrameworkView| + void + Initialize(winrt::Windows::ApplicationModel::Core::CoreApplicationView const + &applicationView) { + + // Layout scaling must be disabled in the appinitialization phase in order + // to take effect correctly. + if (winrt::Windows::System::Profile::AnalyticsInfo::VersionInfo() + .DeviceFamily() == L"Windows.Xbox") { + + bool result = winrt::Windows::UI::ViewManagement::ApplicationViewScaling:: + TrySetDisableLayoutScaling(true); + if (!result) { + OutputDebugString(L"Couldn't disable layout scaling"); + } + } + + main_view_ = applicationView; + main_view_.Activated({this, &FlutterFrameworkView::OnActivated}); + } + + // |winrt::Windows::ApplicationModel::Core::IFrameworkView| + void Uninitialize() { + main_view_.Activated(nullptr); + main_view_ = nullptr; + } + + // |winrt::Windows::ApplicationModel::Core::IFrameworkView| + void Load(winrt::hstring const &) {} + + // |winrt::Windows::ApplicationModel::Core::IFrameworkView| + void Run() { + winrt::Windows::UI::Core::CoreWindow window = + winrt::Windows::UI::Core::CoreWindow::GetForCurrentThread(); + + winrt::Windows::UI::Core::CoreDispatcher dispatcher = window.Dispatcher(); + dispatcher.ProcessEvents( + winrt::Windows::UI::Core::CoreProcessEventsOption::ProcessUntilQuit); + } + + // |winrt::Windows::ApplicationModel::Core::IFrameworkView| + winrt::Windows::Foundation::IAsyncAction + SetWindow(winrt::Windows::UI::Core::CoreWindow const &window) { + + // Capture reference to window. + window_ = window; + + // Lay out the window's content within the region occupied by the + // CoreWindow. + auto appView = winrt::Windows::UI::ViewManagement::ApplicationView:: + GetForCurrentView(); + + appView.SetDesiredBoundsMode(winrt::Windows::UI::ViewManagement:: + ApplicationViewBoundsMode::UseCoreWindow); + + // Configure folder paths. + try { + winrt::Windows::Storage::StorageFolder folder = + winrt::Windows::ApplicationModel::Package::Current() + .InstalledLocation(); + + winrt::Windows::Storage::StorageFolder assets = + co_await folder.GetFolderAsync(L"Assets"); + winrt::Windows::Storage::StorageFolder data = + co_await assets.GetFolderAsync(L"data"); + winrt::Windows::Storage::StorageFolder flutter_assets = + co_await data.GetFolderAsync(L"flutter_assets"); + winrt::Windows::Storage::StorageFile icu_data = + co_await data.GetFileAsync(L"icudtl.dat"); + +#if NDEBUG + winrt::Windows::Storage::StorageFile aot_data = + co_await data.GetFileAsync(L"app.so"); +#endif + + std::wstring flutter_assets_path{flutter_assets.Path()}; + std::wstring icu_data_path{icu_data.Path()}; + std::wstring aot_data_path { +#if NDEBUG + aot_data.Path() +#endif + }; + + flutter::DartProject project(flutter_assets_path, icu_data_path, + aot_data_path); + + // Construct viewcontroller using the Window and project + flutter_view_controller_ = std::make_unique( + static_cast(winrt::get_abi(main_view_)), + static_cast(winrt::get_abi(launch_args_)), + project); + + // If plugins present, register them. + RegisterPlugins(flutter_view_controller_.get()->engine()); + } catch (winrt::hresult_error &err) { + winrt::Windows::UI::Popups::MessageDialog md = + winrt::Windows::UI::Popups::MessageDialog::MessageDialog( + L"There was a problem starting the engine: " + err.message()); + md.ShowAsync(); + } + } + + void OnActivated( + winrt::Windows::ApplicationModel::Core::CoreApplicationView const + &applicationView, + winrt::Windows::ApplicationModel::Activation::IActivatedEventArgs const + &args) { + // Activate the application window, making it visible and enabling it to + // receive events. + applicationView.CoreWindow().Activate(); + + // Capture launch args to later pass to Flutter. + launch_args_ = args; + } + + // Current CoreApplicationView. + winrt::Windows::ApplicationModel::Core::CoreApplicationView main_view_{ + nullptr}; + + // Current CoreWindow. + winrt::Windows::UI::Core::CoreWindow window_{nullptr}; + + // Current FlutterViewController. + std::unique_ptr flutter_view_controller_{ + nullptr}; + + // Launch args that were passed in on activation. + winrt::Windows::ApplicationModel::Activation::IActivatedEventArgs + launch_args_; +}; diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/main.cpp b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/main.cpp new file mode 100644 index 00000000000..1ce54b1fc12 --- /dev/null +++ b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/main.cpp @@ -0,0 +1,30 @@ + +#include + +#include "winrt/Windows.ApplicationModel.Core.h" +#include "winrt/Windows.Foundation.h" +#include +#include +#include + +#include + +#include "flutter_frameworkview.cpp" + +struct App + : winrt::implements< + App, winrt::Windows::ApplicationModel::Core::IFrameworkViewSource> { + App() { view_ = winrt::make_self(); } + + // |winrt::Windows::ApplicationModel::Core::IFrameworkViewSource| + winrt::Windows::ApplicationModel::Core::IFrameworkView CreateView() { + return view_.as(); + } + + winrt::com_ptr view_; +}; + +int __stdcall wWinMain(HINSTANCE, HINSTANCE, PWSTR, int) { + winrt::Windows::ApplicationModel::Core::CoreApplication::Run( + winrt::make()); +} diff --git a/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/resources.pri.img.tmpl b/packages/flutter_tools/templates/app/winuwp.tmpl/runner_uwp/resources.pri.img.tmpl new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/flutter_tools/templates/template_manifest.json b/packages/flutter_tools/templates/template_manifest.json index 61cca6c21e0..ce57286d2ad 100644 --- a/packages/flutter_tools/templates/template_manifest.json +++ b/packages/flutter_tools/templates/template_manifest.json @@ -138,7 +138,64 @@ "templates/app/windows.tmpl/runner/utils.h", "templates/app/windows.tmpl/runner/win32_window.cpp", "templates/app/windows.tmpl/runner/win32_window.h", + "templates/app/winuwp.tmpl/CMakeLists.txt", + "templates/app/winuwp.tmpl/flutter/CMakeLists.txt", "templates/app/winuwp.tmpl/project_version", + "templates/app/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-100.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-125.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-150.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-200.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/LargeTile.scale-400.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/LockScreenLogo.scale-200.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-100.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-125.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-150.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-200.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/SmallTile.scale-400.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-100.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-125.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-150.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-200.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/SplashScreen.scale-400.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-100.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-125.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-150.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-200.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Square150x150Logo.scale-400.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-16.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-256.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-32.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.altform-unplated_targetsize-48.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-100.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-125.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-150.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-200.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.scale-400.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-16.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-24.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-256.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-32.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Square44x44Logo.targetsize-48.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/StoreLogo.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-100.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-125.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-150.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-200.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/StoreLogo.scale-400.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/Wide310x150Logo.scale-200.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-100.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-125.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-150.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-200.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/Assets/WideTile.scale-400.png.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/CMakeLists.txt.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/CMakeSettings.json", + "templates/app/winuwp.tmpl/runner_uwp/Windows_TemporaryKey.pfx.img.tmpl", + "templates/app/winuwp.tmpl/runner_uwp/appxmanifest.in", + "templates/app/winuwp.tmpl/runner_uwp/flutter_frameworkview.cpp", + "templates/app/winuwp.tmpl/runner_uwp/main.cpp", + "templates/app/winuwp.tmpl/runner_uwp/resources.pri.img.tmpl", "templates/cocoapods/Podfile-ios-objc", "templates/cocoapods/Podfile-ios-swift", "templates/cocoapods/Podfile-macos",