| 
									
										
										
										
											2021-11-04 16:43:12 +08:00
										 |  |  | cmake_minimum_required(VERSION 3.14)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral")
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # 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.dll")
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Published to parent scope for install step.
 | 
					
						
							|  |  |  | set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE)
 | 
					
						
							|  |  |  | set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE)
 | 
					
						
							| 
									
										
										
										
											2021-11-18 16:18:20 +08:00
										 |  |  | set(DART_FFI_DLL "${CMAKE_CURRENT_SOURCE_DIR}/dart_ffi/dart_ffi.dll" PARENT_SCOPE)
 | 
					
						
							| 
									
										
										
										
											2021-11-04 16:43:12 +08:00
										 |  |  | set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE)
 | 
					
						
							|  |  |  | set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" 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)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # === Flutter tool backend ===
 | 
					
						
							|  |  |  | # _phony_ is a non-existent file to force this command to run every time,
 | 
					
						
							|  |  |  | # since currently there's no way to get a full input/output list from the
 | 
					
						
							|  |  |  | # flutter tool.
 | 
					
						
							|  |  |  | set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_")
 | 
					
						
							|  |  |  | set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE)
 | 
					
						
							|  |  |  | add_custom_command( | 
					
						
							|  |  |  |   OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS}
 | 
					
						
							|  |  |  |     ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN}
 | 
					
						
							|  |  |  |     ${CPP_WRAPPER_SOURCES_APP}
 | 
					
						
							|  |  |  |     ${PHONY_OUTPUT}
 | 
					
						
							|  |  |  |   COMMAND ${CMAKE_COMMAND} -E env
 | 
					
						
							|  |  |  |     ${FLUTTER_TOOL_ENVIRONMENT}
 | 
					
						
							|  |  |  |     "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat"
 | 
					
						
							|  |  |  |       windows-x64 $<CONFIG>
 | 
					
						
							|  |  |  |   VERBATIM
 | 
					
						
							|  |  |  | )
 | 
					
						
							|  |  |  | add_custom_target(flutter_assemble DEPENDS | 
					
						
							|  |  |  |   "${FLUTTER_LIBRARY}"
 | 
					
						
							|  |  |  |   ${FLUTTER_LIBRARY_HEADERS}
 | 
					
						
							|  |  |  |   ${CPP_WRAPPER_SOURCES_CORE}
 | 
					
						
							|  |  |  |   ${CPP_WRAPPER_SOURCES_PLUGIN}
 | 
					
						
							|  |  |  |   ${CPP_WRAPPER_SOURCES_APP}
 | 
					
						
							|  |  |  | )
 |