main
  1# Project-level configuration.
  2cmake_minimum_required(VERSION 3.10)
  3project(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.
  7set(BINARY_NAME "blood_pressure_app")
  8# The unique GTK application identifier for this application. See:
  9# https://wiki.gnome.org/HowDoI/ChooseApplicationID
 10set(APPLICATION_ID "com.derdilla.blood_pressure_app")
 11
 12# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
 13# versions of CMake.
 14cmake_policy(SET CMP0063 NEW)
 15
 16# Load bundled libraries from the lib/ directory relative to the binary.
 17set(CMAKE_INSTALL_RPATH "$ORIGIN/lib")
 18
 19# Root filesystem for cross-building.
 20if(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)
 27endif()
 28
 29# Define build configuration options.
 30if(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")
 35endif()
 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.
 42function(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>")
 47endfunction()
 48
 49# Flutter library and tool build rules.
 50set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
 51add_subdirectory(${FLUTTER_MANAGED_DIR})
 52
 53# System-level dependencies.
 54find_package(PkgConfig REQUIRED)
 55pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
 56
 57add_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.
 63add_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.
 71apply_standard_settings(${BINARY_NAME})
 72
 73# Add dependency libraries. Add any application-specific dependencies here.
 74target_link_libraries(${BINARY_NAME} PRIVATE flutter)
 75target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK)
 76
 77# Run the Flutter tool portions of the build. This must not be removed.
 78add_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.
 84set_target_properties(${BINARY_NAME}
 85  PROPERTIES
 86  RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run"
 87)
 88
 89# Generated plugin build rules, which manage building the plugins and adding
 90# them to the application.
 91include(flutter/generated_plugins.cmake)
 92
 93
 94# === Installation ===
 95# By default, "installing" just makes a relocatable bundle in the build
 96# directory.
 97set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle")
 98if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
 99  set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE)
100endif()
101
102# Start with a clean build bundle directory every time.
103install(CODE "
104  file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\")
105  " COMPONENT Runtime)
106
107set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data")
108set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib")
109
110install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}"
111  COMPONENT Runtime)
112
113install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
114  COMPONENT Runtime)
115
116install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
117  COMPONENT Runtime)
118
119foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES})
120  install(FILES "${bundled_library}"
121    DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
122    COMPONENT Runtime)
123endforeach(bundled_library)
124
125# Fully re-copy the assets directory on each build to avoid having stale files
126# from a previous install.
127set(FLUTTER_ASSET_DIR_NAME "flutter_assets")
128install(CODE "
129  file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\")
130  " COMPONENT Runtime)
131install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}"
132  DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime)
133
134# Install the AOT library on non-Debug builds only.
135if(NOT CMAKE_BUILD_TYPE MATCHES "Debug")
136  install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
137    COMPONENT Runtime)
138endif()