diff --git a/CMakeLists.txt b/CMakeLists.txt index ae6b1c5e..0c890870 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,8 +13,8 @@ set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) - set(NRF_TARGET "nrf52") +cmake_policy(SET CMP0140 NEW) if (NOT ARM_NONE_EABI_TOOLCHAIN_PATH) message(FATAL_ERROR "The path to the toolchain (arm-none-eabi) must be specified on the command line (add -DARM_NONE_EABI_TOOLCHAIN_PATH=") @@ -35,6 +35,19 @@ endif() set(TARGET_DEVICE "PINETIME" CACHE STRING "Target device") set_property(CACHE TARGET_DEVICE PROPERTY STRINGS PINETIME MOY_TFK5 MOY_TIN5 MOY_TON5 MOY_UNK) +option(ENABLE_APP_STOPWATCH "Enable the Stopwatch application" True) +option(ENABLE_APP_ALARM "Enable the Alarm application" True) +option(ENABLE_APP_TIMER "Enable the Timer application" True) +option(ENABLE_APP_STEPS "Enable the Steps application" True) +option(ENABLE_APP_HEARTRATE "Enable the HeartRate application" True) +option(ENABLE_APP_MUSIC "Enable the Music application" True) +option(ENABLE_APP_PAINT "Enable the Paint application" True) +option(ENABLE_APP_PADDLE "Enable the Paddle game" True) +option(ENABLE_APP_TWOS "Enable the Twos game" True) +option(ENABLE_APP_METRONOME "Enable the Metronome application" True) +option(ENABLE_APP_NAVIGATION "Enable the Navigation application" True) +option(ENABLE_APP_MOTION "Enable the Motion application" False) + set(PROJECT_GIT_COMMIT_HASH "") execute_process(COMMAND git rev-parse --short HEAD @@ -70,5 +83,28 @@ set(VERSION_EDIT_WARNING "// Do not edit this file, it is automatically generate configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/Version.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/Version.h) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/docker/post_build.sh.in ${CMAKE_CURRENT_BINARY_DIR}/post_build.sh) +function(AddToListIfEnabled list enabled type) + if(${enabled}) + list(APPEND ${list} ${type}) + endif () + return(PROPAGATE ${list}) +endfunction() + +# Generate the list of user apps to be compiled into the firmware +AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_STOPWATCH} "Apps::StopWatch") +AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_ALARM} "Apps::Alarm") +AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_TIMER} "Apps::Timer") +AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_STEPS} "Apps::Steps") +AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_HEARTRATE} "Apps::HeartRate") +AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_MUSIC} "Apps::Music") +AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_PAINT} "Apps::Paint") +AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_PADDLE} "Apps::Paddle") +AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_TWOS} "Apps::Twos") +AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_METRONOME} "Apps::Metronome") +AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_NAVIGATION} "Apps::Navigation") +AddToListIfEnabled(USERAPP_TYPES_LIST ${ENABLE_APP_MOTION} "Apps::Motion") + +list(JOIN USERAPP_TYPES_LIST "," USERAPP_TYPES) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/displayapp/Apps.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/displayapp/Apps.h) add_subdirectory(src) diff --git a/src/displayapp/Apps.h b/src/displayapp/Apps.h.in similarity index 97% rename from src/displayapp/Apps.h rename to src/displayapp/Apps.h.in index ebd8bf78..23ad12a3 100644 --- a/src/displayapp/Apps.h +++ b/src/displayapp/Apps.h.in @@ -63,6 +63,8 @@ namespace Pinetime { static constexpr size_t Count = sizeof...(As); }; + using UserAppTypes = TypeList<@USERAPP_TYPES@>; + template struct WatchFaceTypeList { static constexpr size_t Count = sizeof...(Ws); diff --git a/src/displayapp/UserApps.h b/src/displayapp/UserApps.h index cb6d5779..985b335f 100644 --- a/src/displayapp/UserApps.h +++ b/src/displayapp/UserApps.h @@ -1,5 +1,5 @@ #pragma once -#include "Apps.h" +#include "displayapp/Apps.h" #include "Controllers.h" #include "displayapp/screens/Alarm.h"