aboutsummaryrefslogtreecommitdiffstats
path: root/CMakeLists.txt
blob: c5d30874dd2383ef3e39214386e87a44de1a5679 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
cmake_minimum_required(VERSION 3.10)

set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose Debug or Release")

project(pinetime VERSION 1.13.0 LANGUAGES C CXX ASM)

set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 20)

# set(CMAKE_GENERATOR "Unix Makefiles")
set(CMAKE_C_EXTENSIONS OFF)
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")

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=<path>")
endif ()

if (NOT NRF5_SDK_PATH)
  message(FATAL_ERROR "The path to the NRF52 SDK must be specified on the command line (add -DNRF5_SDK_PATH=<path>")
endif ()

if(BUILD_DFU)
  set(BUILD_DFU true)
endif()

if(BUILD_RESOURCES)
  set(BUILD_RESOURCES true)
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
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
                OUTPUT_VARIABLE PROJECT_GIT_COMMIT_HASH
                RESULT_VARIABLE PROJECT_GIT_COMMIT_HASH_SUCCESS)

string(STRIP "${PROJECT_GIT_COMMIT_HASH}" PROJECT_GIT_COMMIT_HASH)

message("PROJECT_GIT_COMMIT_HASH_SUCCESS? " ${PROJECT_GIT_COMMIT_HASH_SUCCESS})

message("")
message("BUILD CONFIGURATION")
message("-------------------")
message("    * Mode : " ${CMAKE_BUILD_TYPE})
message("    * Version : " ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
message("    * Toolchain : " ${ARM_NONE_EABI_TOOLCHAIN_PATH})
message("    * GitRef(S) : " ${PROJECT_GIT_COMMIT_HASH})
message("    * NRF52 SDK : " ${NRF5_SDK_PATH})
message("    * Target device : " ${TARGET_DEVICE})
if(BUILD_DFU)
  message("    * Build DFU (using adafruit-nrfutil) : Enabled")
else()
  message("    * Build DFU (using adafruit-nrfutil) : Disabled")
endif()
if(BUILD_RESOURCES)
  message("    * Build resources : Enabled")
else()
  message("    * Build resources : Disabled")
endif()

set(VERSION_EDIT_WARNING "// Do not edit this file, it is automatically generated by CMAKE!")
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})
  set(${list} "${${list}}" PARENT_SCOPE)
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)