-
Notifications
You must be signed in to change notification settings - Fork 27
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
150 lines (131 loc) · 4.31 KB
/
CMakeLists.txt
File metadata and controls
150 lines (131 loc) · 4.31 KB
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
cmake_minimum_required(VERSION 3.16)
if(NOT DEFINED DEVICE)
message(FATAL_ERROR "You must specify -DDEVICE=<device>")
endif()
if(NOT DEFINED FAMILY)
set(FAMILY_PATH ${CMAKE_SOURCE_DIR}/Devices/${DEVICE})
else()
set(FAMILY_PATH ${CMAKE_SOURCE_DIR}/Devices/${FAMILY})
endif()
project(MatrixOS-${DEVICE})
# # Global C flags
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
# -ggdb \
# -fdata-sections \
# -ffunction-sections \
# -fsingle-precision-constant \
# -fno-strict-aliasing \
# -Wdouble-promotion \
# -Wstrict-overflow \
# -Wextra \
# -Wfloat-equal \
# -Wundef \
# -Wwrite-strings \
# -Wsign-compare \
# -Wmissing-format-attribute \
# -Wunreachable-code \
# -Wcast-align \
# -Wcast-function-type \
# ")
# # Global C++ flags
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
# -ggdb \
# -fdata-sections \
# -ffunction-sections \
# -fsingle-precision-constant \
# -fno-strict-aliasing \
# -Wdouble-promotion \
# -Wstrict-overflow \
# -Wextra \
# -Wfloat-equal \
# -Wundef \
# -Wwrite-strings \
# -Wsign-compare \
# -Wmissing-format-attribute \
# -Wunreachable-code \
# -Wcast-align \
# -Wcast-function-type \
# -std=gnu++17 \
# ")
# set(CMAKE_C_STANDARD 11)
# set(CMAKE_C_STANDARD_REQUIRED ON)
# set(CMAKE_CXX_STANDARD 17)
# set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(NOT DEFINED DEVICE)
message(FATAL_ERROR "You must specify -DDEVICE=<device>")
endif()
if(NOT DEFINED FAMILY)
set(FAMILY_PATH ${CMAKE_SOURCE_DIR}/Devices/${DEVICE})
else()
set(FAMILY_PATH ${CMAKE_SOURCE_DIR}/Devices/${FAMILY})
endif()
message(STATUS "DEVICE: ${DEVICE} ${FAMILY} (${FAMILY_PATH})")
string(ASCII 27 Esc)
if(MODE STREQUAL "RELEASE")
message("${Esc}[92mCOMPILE AS RELEASE BUILD${Esc}[0m")
add_compile_definitions(RELEASE_BUILD)
elseif(MODE STREQUAL "RELEASECANDIDATE")
message("${Esc}[94mCOMPILE AS RELEASE CANDIDATE BUILD${Esc}[0m")
add_compile_definitions(RELEASE_CANDIDATE_BUILD)
elseif(MODE STREQUAL "BETA")
message("${Esc}[96mCOMPILE AS BETA BUILD${Esc}[0m")
add_compile_definitions(BETA_BUILD)
elseif(MODE STREQUAL "NIGHTLY")
message("${Esc}[95mCOMPILE AS NIGHTY BUILD${Esc}[0m")
add_compile_definitions(NIGHTY_BUILD)
elseif(MODE STREQUAL "DEVELOPMENT")
message("${Esc}[93mCOMPILE AS DEVELOPMENT BUILD${Esc}[0m")
add_compile_definitions(DEVELOPMENT_BUILD)
elseif(MODE STREQUAL "UNDEFINED")
message("${Esc}[91mCOMPILE AS CODE DEFINED BUILD WITH NO OPTIMIZATIONS${Esc}[0m")
add_compile_definitions(DEBUG_BUILD)
else()
message( FATAL_ERROR "MODE is not defined" )
endif()
if(DEFINED MATRIXOS_RELEASE_VER_OVERRIDE)
message(STATUS "Overriding MATRIXOS_RELEASE_VER=${MATRIXOS_RELEASE_VER_OVERRIDE}")
add_compile_definitions(MATRIXOS_RELEASE_VER_OVERRIDE=${MATRIXOS_RELEASE_VER_OVERRIDE})
endif()
# Load device feature flags before processing subdirectories
if(NOT EXISTS ${FAMILY_PATH}/Config.cmake)
message(FATAL_ERROR "Config.cmake not found in ${FAMILY_PATH}. Please create this file to define DEVICE_STORAGE and DEVICE_BATTERY.")
endif()
include(${FAMILY_PATH}/Config.cmake)
# Default feature flags for devices that don't set them
if(NOT DEFINED DEVICE_TINYUSB)
set(DEVICE_TINYUSB 1)
endif()
if(NOT DEFINED DEVICE_CUSTOM_USB_IO)
set(DEVICE_CUSTOM_USB_IO 0)
endif()
if(NOT DEFINED DEVICE_CUSTOM_HID_IO)
set(DEVICE_CUSTOM_HID_IO 0)
endif()
if(NOT DEFINED DEVICE_CUSTOM_MIDI_IO)
set(DEVICE_CUSTOM_MIDI_IO 0)
endif()
# Pass device feature flags as compile definitions to all targets
add_compile_definitions(
DEVICE_STORAGE=${DEVICE_STORAGE}
DEVICE_BATTERY=${DEVICE_BATTERY}
DEVICE_TINYUSB=${DEVICE_TINYUSB}
DEVICE_CUSTOM_USB_IO=${DEVICE_CUSTOM_USB_IO}
DEVICE_CUSTOM_HID_IO=${DEVICE_CUSTOM_HID_IO}
DEVICE_CUSTOM_MIDI_IO=${DEVICE_CUSTOM_MIDI_IO}
)
# Set debug flags globally for all targets before adding subdirectories
if(MODE STREQUAL "DEVELOPMENT" OR MODE STREQUAL "UNDEFINED")
if(EMSCRIPTEN)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3 -O0")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3 -O0")
message(STATUS "Building Emscripten debug symbols: -g3 -O0")
else()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3 -Og")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3 -Og")
message(STATUS "Building with debug symbols: -g3 -Og")
endif()
endif()
add_subdirectory(${FAMILY_PATH})
add_subdirectory(Devices)
add_subdirectory(OS)
add_subdirectory(Applications)