CMakeLists.txt (5423B)
1 # Project-level configuration. 2 cmake_minimum_required(VERSION 3.10) 3 project(runner LANGUAGES CXX) 4 5 # The name of the executable created for the application. Change this to change 6 # the on-disk name of your application. 7 set(BINARY_NAME "penny") 8 # The unique GTK application identifier for this application. See: 9 # https://wiki.gnome.org/HowDoI/ChooseApplicationID 10 set(APPLICATION_ID "com.example.penny") 11 12 # Explicitly opt in to modern CMake behaviors to avoid warnings with recent 13 # versions of CMake. 14 cmake_policy(SET CMP0063 NEW) 15 16 # Load bundled libraries from the lib/ directory relative to the binary. 17 set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") 18 19 # Root filesystem for cross-building. 20 if(FLUTTER_TARGET_PLATFORM_SYSROOT) 21 set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) 22 set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) 23 set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 24 set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) 25 set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 26 set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 27 endif() 28 29 # Define build configuration options. 30 if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) 31 set(CMAKE_BUILD_TYPE "Debug" CACHE 32 STRING "Flutter build mode" FORCE) 33 set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS 34 "Debug" "Profile" "Release") 35 endif() 36 37 # Compilation settings that should be applied to most targets. 38 # 39 # Be cautious about adding new options here, as plugins use this function by 40 # default. In most cases, you should add new options to specific targets instead 41 # of modifying this function. 42 function(APPLY_STANDARD_SETTINGS TARGET) 43 target_compile_features(${TARGET} PUBLIC cxx_std_14) 44 target_compile_options(${TARGET} PRIVATE -Wall -Werror) 45 target_compile_options(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>:-O3>") 46 target_compile_definitions(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>:NDEBUG>") 47 endfunction() 48 49 # Flutter library and tool build rules. 50 set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") 51 add_subdirectory(${FLUTTER_MANAGED_DIR}) 52 53 # System-level dependencies. 54 find_package(PkgConfig REQUIRED) 55 pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) 56 57 add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") 58 59 # Define the application target. To change its name, change BINARY_NAME above, 60 # not the value here, or `flutter run` will no longer work. 61 # 62 # Any new source files that you add to the application should be added here. 63 add_executable(${BINARY_NAME} 64 "main.cc" 65 "my_application.cc" 66 "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" 67 ) 68 69 # Apply the standard set of build settings. This can be removed for applications 70 # that need different build settings. 71 apply_standard_settings(${BINARY_NAME}) 72 73 # Add dependency libraries. Add any application-specific dependencies here. 74 target_link_libraries(${BINARY_NAME} PRIVATE flutter) 75 target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) 76 77 # Run the Flutter tool portions of the build. This must not be removed. 78 add_dependencies(${BINARY_NAME} flutter_assemble) 79 80 # Only the install-generated bundle's copy of the executable will launch 81 # correctly, since the resources must in the right relative locations. To avoid 82 # people trying to run the unbundled copy, put it in a subdirectory instead of 83 # the default top-level location. 84 set_target_properties(${BINARY_NAME} 85 PROPERTIES 86 RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" 87 ) 88 89 90 # Generated plugin build rules, which manage building the plugins and adding 91 # them to the application. 92 include(flutter/generated_plugins.cmake) 93 94 95 # === Installation === 96 # By default, "installing" just makes a relocatable bundle in the build 97 # directory. 98 set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") 99 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) 100 set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) 101 endif() 102 103 # Start with a clean build bundle directory every time. 104 install(CODE " 105 file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") 106 " COMPONENT Runtime) 107 108 set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") 109 set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") 110 111 install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" 112 COMPONENT Runtime) 113 114 install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" 115 COMPONENT Runtime) 116 117 install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" 118 COMPONENT Runtime) 119 120 foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) 121 install(FILES "${bundled_library}" 122 DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" 123 COMPONENT Runtime) 124 endforeach(bundled_library) 125 126 # Copy the native assets provided by the build.dart from all packages. 127 set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") 128 install(DIRECTORY "${NATIVE_ASSETS_DIR}" 129 DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" 130 COMPONENT Runtime) 131 132 # Fully re-copy the assets directory on each build to avoid having stale files 133 # from a previous install. 134 set(FLUTTER_ASSET_DIR_NAME "flutter_assets") 135 install(CODE " 136 file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") 137 " COMPONENT Runtime) 138 install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" 139 DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) 140 141 # Install the AOT library on non-Debug builds only. 142 if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") 143 install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" 144 COMPONENT Runtime) 145 endif()