Skip to content

Commit 77df799

Browse files
committed
cmake: Deduce PRODUCT_ macros from PLATFORM_ and EDITION_.
Instead of #defininig all the possible PRODUCT_ macros, it makes more sense to enforce the definition of the (limited) PLATFORM_ and EDITION_ macros, and extract the relevant definitions of PRODUCT_* from there. This makes it easier to enforce that the macros are defined consistently, and allows further separation of code that is dependent on the platform it will run on, but not on the edition (e.g. the touch code depends on the PLATFORM_*, but it doesn't matter whether it will run on a -multi or on a -btconly device).
1 parent a5a1ae6 commit 77df799

File tree

4 files changed

+89
-67
lines changed

4 files changed

+89
-67
lines changed

src/CMakeLists.txt

+19-20
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ set(DBB-FIRMWARE-UI-SOURCES
6868
${CMAKE_SOURCE_DIR}/src/ui/components/show_logo.c
6969
${CMAKE_SOURCE_DIR}/src/ui/components/waiting.c
7070
${CMAKE_SOURCE_DIR}/src/ui/screen_process.c
71-
${CMAKE_SOURCE_DIR}/src/ui/ugui/ugui.c
7271
${CMAKE_SOURCE_DIR}/src/touch/gestures.c
7372
)
7473
set(DBB-FIRMWARE-UI-SOURCES ${DBB-FIRMWARE-UI-SOURCES} PARENT_SCOPE)
@@ -133,7 +132,6 @@ set(DBB-BOOTLOADER-SOURCES
133132
${CMAKE_SOURCE_DIR}/src/bootloader/mpu_regions.c
134133
${CMAKE_SOURCE_DIR}/src/queue.c
135134
${CMAKE_SOURCE_DIR}/src/usb/usb_processing.c
136-
${CMAKE_SOURCE_DIR}/src/ui/ugui/ugui.c
137135
${CMAKE_SOURCE_DIR}/src/ui/fonts/font_a_9X9.c
138136
${CMAKE_SOURCE_DIR}/src/hardfault.c
139137
${CMAKE_SOURCE_DIR}/src/ui/components/ui_images.c
@@ -149,6 +147,7 @@ set(DRIVER-SOURCES
149147
${CMAKE_SOURCE_DIR}/src/platform/platform_init.c
150148
${CMAKE_SOURCE_DIR}/src/qtouch/qtouch.c
151149
${CMAKE_SOURCE_DIR}/src/ui/oled/oled.c
150+
${CMAKE_SOURCE_DIR}/src/ui/ugui/ugui.c
152151
)
153152
set(DRIVER-SOURCES ${DRIVER-SOURCES} PARENT_SCOPE)
154153

@@ -520,25 +519,25 @@ if(CMAKE_CROSSCOMPILING)
520519
target_sources(${bootloader}.elf PRIVATE ${BITBOXBASE-ONLY-SOURCES})
521520
endforeach(bootloader)
522521

523-
target_compile_definitions(bootloader.elf PRIVATE PRODUCT_BITBOX_MULTI)
524-
target_compile_definitions(bootloader-development.elf PRIVATE PRODUCT_BITBOX_MULTI BOOTLOADER_DEVDEVICE)
525-
target_compile_definitions(bootloader-semihosting.elf PRIVATE PRODUCT_BITBOX_MULTI BOOTLOADER_DEVDEVICE SEMIHOSTING)
526-
target_compile_definitions(bootloader-development-locked.elf PRIVATE PRODUCT_BITBOX_MULTI BOOTLOADER_DEVDEVICE BOOTLOADER_PRODUCTION)
522+
target_compile_definitions(bootloader.elf PRIVATE "PLATFORM_BITBOX02=1" "EDITION_STANDARD=1")
523+
target_compile_definitions(bootloader-development.elf PRIVATE "PLATFORM_BITBOX02=1" "EDITION_STANDARD=1" BOOTLOADER_DEVDEVICE)
524+
target_compile_definitions(bootloader-semihosting.elf PRIVATE "PLATFORM_BITBOX02=1" "EDITION_STANDARD=1" BOOTLOADER_DEVDEVICE SEMIHOSTING)
525+
target_compile_definitions(bootloader-development-locked.elf PRIVATE "PLATFORM_BITBOX02=1" "EDITION_STANDARD=1" BOOTLOADER_DEVDEVICE BOOTLOADER_PRODUCTION)
527526
set_property(TARGET bootloader-development-locked.elf PROPERTY EXCLUDE_FROM_ALL ON)
528527

529528

530-
target_compile_definitions(bootloader-production.elf PRIVATE PRODUCT_BITBOX_MULTI BOOTLOADER_PRODUCTION)
529+
target_compile_definitions(bootloader-production.elf PRIVATE "PLATFORM_BITBOX02=1" "EDITION_STANDARD=1" BOOTLOADER_PRODUCTION)
531530
set_property(TARGET bootloader-production.elf PROPERTY EXCLUDE_FROM_ALL ON)
532531

533-
target_compile_definitions(bootloader-btc.elf PRIVATE PRODUCT_BITBOX_BTCONLY)
534-
target_compile_definitions(bootloader-btc-development.elf PRIVATE PRODUCT_BITBOX_BTCONLY BOOTLOADER_DEVDEVICE)
535-
target_compile_definitions(bootloader-btc-production.elf PRIVATE PRODUCT_BITBOX_BTCONLY BOOTLOADER_PRODUCTION)
532+
target_compile_definitions(bootloader-btc.elf PRIVATE "PLATFORM_BITBOX02=1" "EDITION_BTCONLY=1")
533+
target_compile_definitions(bootloader-btc-development.elf PRIVATE "PLATFORM_BITBOX02=1" "EDITION_BTCONLY=1" BOOTLOADER_DEVDEVICE)
534+
target_compile_definitions(bootloader-btc-production.elf PRIVATE "PLATFORM_BITBOX02=1" "EDITION_BTCONLY=1" BOOTLOADER_PRODUCTION)
536535
set_property(TARGET bootloader-btc-production.elf PROPERTY EXCLUDE_FROM_ALL ON)
537536

538-
target_compile_definitions(bootloader-bitboxbase.elf PRIVATE PRODUCT_BITBOX_BASE)
539-
target_compile_definitions(bootloader-bitboxbase-development.elf PRIVATE BOOTLOADER_DEVDEVICE PRODUCT_BITBOX_BASE)
540-
target_compile_definitions(bootloader-bitboxbase-semihosting.elf PRIVATE BOOTLOADER_DEVDEVICE PRODUCT_BITBOX_BASE SEMIHOSTING)
541-
target_compile_definitions(bootloader-bitboxbase-production.elf PRIVATE BOOTLOADER_PRODUCTION PRODUCT_BITBOX_BASE)
537+
target_compile_definitions(bootloader-bitboxbase.elf PRIVATE "PLATFORM_BITBOXBASE=1" "EDITION_STANDARD=1")
538+
target_compile_definitions(bootloader-bitboxbase-development.elf PRIVATE BOOTLOADER_DEVDEVICE "PLATFORM_BITBOXBASE=1" "EDITION_STANDARD=1")
539+
target_compile_definitions(bootloader-bitboxbase-semihosting.elf PRIVATE BOOTLOADER_DEVDEVICE "PLATFORM_BITBOXBASE=1" "EDITION_STANDARD=1" SEMIHOSTING)
540+
target_compile_definitions(bootloader-bitboxbase-production.elf PRIVATE BOOTLOADER_PRODUCTION "PLATFORM_BITBOXBASE=1" "EDITION_STANDARD=1")
542541
set_property(TARGET bootloader-bitboxbase-production.elf PROPERTY EXCLUDE_FROM_ALL ON)
543542

544543
set(FIRMWARES
@@ -609,7 +608,7 @@ if(CMAKE_CROSSCOMPILING)
609608
endforeach(firmware)
610609

611610
target_sources(firmware.elf PRIVATE firmware.c)
612-
target_compile_definitions(firmware.elf PRIVATE PRODUCT_BITBOX_MULTI "APP_ETH=1" "APP_U2F=1")
611+
target_compile_definitions(firmware.elf PRIVATE "PLATFORM_BITBOX02=1" "EDITION_STANDARD=1" "APP_ETH=1" "APP_U2F=1")
613612
target_sources(firmware.elf PRIVATE ${FIRMWARE-U2F-SOURCES})
614613
target_link_libraries(firmware.elf PRIVATE bitbox02-platform)
615614
target_link_libraries(firmware.elf PRIVATE app_btc-multi)
@@ -620,21 +619,21 @@ if(CMAKE_CROSSCOMPILING)
620619
target_link_libraries(firmware-semihosting.elf PRIVATE app_btc-multi)
621620

622621
# Select an implementation of the system calls that can communicate with the debugger
623-
target_compile_definitions(firmware-semihosting.elf PRIVATE PRODUCT_BITBOX_MULTI "APP_ETH=1" "APP_U2F=1")
622+
target_compile_definitions(firmware-semihosting.elf PRIVATE "PLATFORM_BITBOX02=1" "EDITION_STANDARD=1" "APP_ETH=1" "APP_U2F=1")
624623
target_compile_definitions(firmware-semihosting.elf PRIVATE SEMIHOSTING)
625624

626625
target_sources(firmware-btc.elf PRIVATE firmware.c)
627-
target_compile_definitions(firmware-btc.elf PRIVATE PRODUCT_BITBOX_BTCONLY "APP_ETH=0" "APP_U2F=0")
626+
target_compile_definitions(firmware-btc.elf PRIVATE "PLATFORM_BITBOX02=1" "EDITION_BTCONLY=1" "APP_ETH=0" "APP_U2F=0")
628627
target_link_libraries(firmware-btc.elf PRIVATE bitbox02-platform)
629628
target_link_libraries(firmware-btc.elf PRIVATE app_btc-btc)
630629

631630
target_sources(firmware-bitboxbase.elf PRIVATE bitboxbase/bitboxbase.c)
632-
target_compile_definitions(firmware-bitboxbase.elf PRIVATE PRODUCT_BITBOX_BASE "APP_BTC=0" "APP_LTC=0" "APP_ETH=0" "APP_U2F=0")
631+
target_compile_definitions(firmware-bitboxbase.elf PRIVATE "PLATFORM_BITBOXBASE=1" "EDITION_STANDARD=1" "APP_BTC=0" "APP_LTC=0" "APP_ETH=0" "APP_U2F=0")
633632
target_sources(firmware-bitboxbase.elf PRIVATE ${BITBOXBASE-FIRMWARE-SOURCES})
634633
target_link_libraries(firmware-bitboxbase.elf PRIVATE bitboxbase-platform)
635634

636635
target_sources(firmware-bitboxbase-semihosting.elf PRIVATE bitboxbase/bitboxbase.c)
637-
target_compile_definitions(firmware-bitboxbase-semihosting.elf PRIVATE PRODUCT_BITBOX_BASE SEMIHOSTING "APP_BTC=0" "APP_LTC=0" "APP_ETH=0" "APP_U2F=0")
636+
target_compile_definitions(firmware-bitboxbase-semihosting.elf PRIVATE "PLATFORM_BITBOXBASE=1" "EDITION_STANDARD=1" SEMIHOSTING "APP_BTC=0" "APP_LTC=0" "APP_ETH=0" "APP_U2F=0")
638637
target_sources(firmware-bitboxbase-semihosting.elf PRIVATE ${BITBOXBASE-FIRMWARE-SOURCES})
639638
target_link_libraries(firmware-bitboxbase-semihosting.elf PRIVATE bitboxbase-platform)
640639

@@ -646,7 +645,7 @@ if(CMAKE_CROSSCOMPILING)
646645
target_link_libraries(factory-setup.elf PRIVATE bitbox02-platform)
647646

648647
target_sources(factory-setup-bitboxbase.elf PRIVATE factorysetup.c)
649-
target_compile_definitions(factory-setup-bitboxbase.elf PRIVATE PRODUCT_BITBOXBASE_FACTORYSETUP "APP_BTC=0" "APP_LTC=0" "APP_ETH=0" "APP_U2F=0")
648+
target_compile_definitions(factory-setup-bitboxbase.elf PRIVATE "PLATFORM_BITBOXBASE=1" "EDITION_FACTORYSETUP=1" "APP_BTC=0" "APP_LTC=0" "APP_ETH=0" "APP_U2F=0")
650649
target_link_libraries(factory-setup-bitboxbase.elf PRIVATE bitboxbase-platform)
651650

652651
foreach(name ${BOOTLOADERS} ${FIRMWARES})

src/platform/platform_config.h

+59-17
Original file line numberDiff line numberDiff line change
@@ -15,67 +15,109 @@
1515
#ifndef _PLATFORM_CONFIG_H
1616
#define _PLATFORM_CONFIG_H
1717

18-
// Force the PRODUCT_ defines to be 0 or 1, so they can be used safely without risk of typos.
18+
#if !defined(PLATFORM_BITBOX02)
19+
#define PLATFORM_BITBOX02 0
20+
#elif PLATFORM_BITBOX02 != 0 && PLATFORM_BITBOX02 != 1
21+
#error "Invalid value for PLATFORM_BITBOX02."
22+
#endif
23+
24+
#if !defined(PLATFORM_BITBOXBASE)
25+
#define PLATFORM_BITBOXBASE 0
26+
#elif PLATFORM_BITBOXBASE != 0 && PLATFORM_BITBOXBASE != 1
27+
#error "Invalid value for PLATFORM_BITBOXBASE."
28+
#endif
29+
30+
#if !defined(EDITION_STANDARD)
31+
#define EDITION_STANDARD 0
32+
#elif EDITION_STANDARD != 0 && EDITION_STANDARD != 1
33+
#error "Invalid value for EDITION_STANDARD."
34+
#endif
35+
#if !defined(EDITION_BTCONLY)
36+
#define EDITION_BTCONLY 0
37+
#elif EDITION_BTCONLY != 0 && EDITION_BTCONLY != 1
38+
#error "Invalid value for EDITION_BTCONLY."
39+
#endif
40+
#if !defined(EDITION_FACTORYSETUP)
41+
#define EDITION_FACTORYSETUP 0
42+
#elif EDITION_FACTORYSETUP != 0 && EDITION_FACTORYSETUP != 1
43+
#error "Invalid value for EDITION_FACTORYSETUP."
44+
#endif
45+
46+
#if PLATFORM_BITBOX02 == 1
47+
48+
#if EDITION_STANDARD == 1
49+
#define PRODUCT_BITBOX_MULTI 1
50+
#elif EDITION_BTCONLY == 1
51+
#define PRODUCT_BITBOX_BTCONLY 1
52+
#elif EDITION_FACTORYSETUP == 1
53+
#define PRODUCT_BITBOX02_FACTORYSETUP 1
54+
#else
55+
#error "Invalid EDITION value."
56+
#endif
57+
58+
#elif PLATFORM_BITBOXBASE == 1
59+
60+
#if EDITION_STANDARD == 1
61+
#define PRODUCT_BITBOX_BASE 1
62+
#elif EDITION_FACTORYSETUP == 1
63+
#define PRODUCT_BITBOXBASE_FACTORYSETUP 1
64+
#else
65+
#error "Invalid EDITION value."
66+
#endif
67+
68+
#else
69+
#error "Invalid PRODUCT value."
70+
#endif
1971

2072
#if !defined(PRODUCT_BITBOX_MULTI)
2173
#define PRODUCT_BITBOX_MULTI 0
2274
#elif PRODUCT_BITBOX_MULTI != 1
23-
#error "invalid product value"
75+
#error "invalid PRODUCT_BITBOX_MULTI value"
2476
#endif
2577

2678
#if !defined(PRODUCT_BITBOX_BTCONLY)
2779
#define PRODUCT_BITBOX_BTCONLY 0
2880
#elif PRODUCT_BITBOX_BTCONLY != 1
29-
#error "invalid product value"
81+
#error "invalid PRODUCT_BITBOX_BTCONLY value"
3082
#endif
3183

3284
#if !defined(PRODUCT_BITBOX_BASE)
3385
#define PRODUCT_BITBOX_BASE 0
3486
#elif PRODUCT_BITBOX_BASE != 1
35-
#error "invalid product value"
87+
#error "invalid PRODUCT_BITBOX_BASE value"
3688
#endif
3789

3890
#if !defined(PRODUCT_BITBOX02_FACTORYSETUP)
3991
#define PRODUCT_BITBOX02_FACTORYSETUP 0
4092
#elif PRODUCT_BITBOX02_FACTORYSETUP != 1
41-
#error "invald product value"
93+
#error "invald PRODUCT_BITBOX02_FACTORYSETUP value"
4294
#endif
43-
4495
#if !defined(PRODUCT_BITBOXBASE_FACTORYSETUP)
4596
#define PRODUCT_BITBOXBASE_FACTORYSETUP 0
4697
#elif PRODUCT_BITBOXBASE_FACTORYSETUP != 1
47-
#error "invald product value"
98+
#error "invald PRODUCT_BITBOXBASE_FACTORYSETUP value"
4899
#endif
49100

101+
50102
// Derive other useful definitions from the product.
51103

52104
#if PRODUCT_BITBOX_MULTI == 1
53-
#define PLATFORM_BITBOX02 1
54-
#define PLATFORM_BITBOXBASE 0
55105
#define FACTORYSETUP 0
56106
#endif
57107

58108
#if PRODUCT_BITBOX_BTCONLY == 1
59-
#define PLATFORM_BITBOX02 1
60-
#define PLATFORM_BITBOXBASE 0
61109
#define FACTORYSETUP 0
62110
#endif
63111

64112
#if PRODUCT_BITBOX_BASE == 1
65-
#define PLATFORM_BITBOX02 0
66-
#define PLATFORM_BITBOXBASE 1
67113
#define FACTORYSETUP 0
68114
#endif
69115

70116
#if PRODUCT_BITBOX02_FACTORYSETUP == 1
71-
#define PLATFORM_BITBOX02 1
72-
#define PLATFORM_BITBOXBASE 0
73117
#define FACTORYSETUP 1
74118
#endif
75119

76120
#if PRODUCT_BITBOXBASE_FACTORYSETUP == 1
77-
#define PLATFORM_BITBOX02 0
78-
#define PLATFORM_BITBOXBASE 1
79121
#define FACTORYSETUP 1
80122
#endif
81123

test/device-test/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ target_link_libraries(bitbox02-test-platform
8686
)
8787

8888
# Always enable semihosting for the test firmwares
89-
target_compile_definitions(bitbox02-test-platform PUBLIC PRODUCT_BITBOX_MULTI SEMIHOSTING)
89+
target_compile_definitions(bitbox02-test-platform PUBLIC "PLATFORM_BITBOX02=1" "EDITION_STANDARD=1" SEMIHOSTING)
9090
target_link_libraries(bitbox02-test-platform PUBLIC --specs=nano.specs --specs=rdimon.specs)
9191
target_compile_options(bitbox02-test-platform PUBLIC --specs=nano.specs --specs=rdimon.specs)
9292

@@ -193,7 +193,7 @@ target_link_libraries(bitboxbase-test-platform
193193
add_dependencies(bitboxbase-test-platform rust-cbindgen)
194194

195195
# Always enable semihosting for the test firmwares
196-
target_compile_definitions(bitboxbase-test-platform PUBLIC PRODUCT_BITBOX_BASE SEMIHOSTING)
196+
target_compile_definitions(bitboxbase-test-platform PUBLIC "PLATFORM_BITBOXBASE=1" "EDITION_STANDARD=1" SEMIHOSTING)
197197
target_link_libraries(bitboxbase-test-platform PUBLIC --specs=nano.specs --specs=rdimon.specs)
198198
target_compile_options(bitboxbase-test-platform PUBLIC --specs=nano.specs --specs=rdimon.specs)
199199

test/unit-test/CMakeLists.txt

+9-28
Original file line numberDiff line numberDiff line change
@@ -18,42 +18,23 @@
1818

1919
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter -Wno-missing-prototypes -Wno-missing-declarations -Wno-implicit-function-declaration -Wno-bad-function-cast")
2020

21-
22-
set(DBB-FILTERED-SOURCES
23-
${DBB-FIRMWARE-COMMON-SOURCES}
24-
${DBB-FIRMWARE-UI-COMMON-SOURCES}
25-
${DBB-FIRMWARE-UI-SOURCES}
26-
${DBB-FIRMWARE-PROTOBUF-SOURCES}
27-
${FIRMWARE-U2F-SOURCES}
28-
${DBB-FIRMWARE-USB-SOURCES}
29-
${DBB-FIRMWARE-USART-SOURCES}
30-
)
31-
32-
set(IGNORE_SOURCES
33-
"src/screen.c"
34-
"src/ui/ugui/ugui.c"
35-
"src/memory/nvmctrl.c"
36-
"src/memory/smarteeprom.c"
37-
)
38-
39-
# Exclude some files which depends on the hardware.
40-
foreach(SOURCEFILE ${IGNORE_SOURCES})
41-
list(FILTER DBB-FILTERED-SOURCES EXCLUDE REGEX ".*/${SOURCEFILE}$")
42-
endforeach()
43-
44-
message("FILTERED SOURCES: ${DBB-FILTERED-SOURCES}")
45-
4621
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/tools/nanopb/extra)
4722
find_package(Nanopb REQUIRED)
4823

4924
add_library(bitbox
5025
STATIC
26+
${DBB-FIRMWARE-COMMON-SOURCES}
5127
${DBB-FIRMWARE-COMPONENT-SOURCES}
5228
${DBB-FIRMWARE-WORKFLOW-SOURCES}
5329
${APP-BTC-SOURCES}
54-
${DBB-FILTERED-SOURCES}
30+
${DBB-FIRMWARE-UI-COMMON-SOURCES}
31+
${DBB-FIRMWARE-UI-SOURCES}
32+
${DBB-FIRMWARE-PROTOBUF-SOURCES}
33+
${DBB-FIRMWARE-USB-SOURCES}
34+
${DBB-FIRMWARE-USART-SOURCES}
5535
${CTAES-SOURCES}
5636
${ETHEREUM-SOURCES}
37+
${FIRMWARE-U2F-SOURCES}
5738
# The usb.c file mixes together hardware and testing code... This should be split.
5839
${CMAKE_SOURCE_DIR}/src/usb/usb.c
5940
${CMAKE_SOURCE_DIR}/src/usb/usb_frame.c
@@ -94,7 +75,7 @@ set_source_files_properties(
9475
target_include_directories(bitbox SYSTEM PUBLIC ${NANOPB_INCLUDE_DIRS})
9576
target_include_directories(bitbox PRIVATE ${CMAKE_SOURCE_DIR}/external/FatFs/source)
9677
target_compile_definitions(bitbox PUBLIC "PB_NO_PACKED_STRUCTS=1" "PB_FIELD_16BIT=1")
97-
target_compile_definitions(bitbox PUBLIC "PRODUCT_BITBOX_MULTI=1" "APP_BTC=1" "APP_LTC=1" "APP_U2F=1" "APP_ETH=1")
78+
target_compile_definitions(bitbox PUBLIC "PLATFORM_BITBOX02=1" "EDITION_STANDARD=1" "APP_BTC=1" "APP_LTC=1" "APP_U2F=1" "APP_ETH=1")
9879
add_dependencies(bitbox generate-protobufs)
9980

10081
# Since noiseprotocol and wallycore are external projects we need to specify the dependency
@@ -146,7 +127,7 @@ target_include_directories(
146127
${INCLUDES}
147128
${CMAKE_BINARY_DIR}/src
148129
)
149-
target_compile_definitions(u2f-util PUBLIC "TESTING" PRODUCT_BITBOX_MULTI "APP_U2F=1" "APP_BTC=1" "APP_LTC=1" "APP_ETH=1")
130+
target_compile_definitions(u2f-util PUBLIC "TESTING" "PLATFORM_BITBOX02=1" "EDITION_STANDARD=1" "APP_U2F=1" "APP_BTC=1" "APP_LTC=1" "APP_ETH=1")
150131
target_compile_definitions(u2f-util PUBLIC "USE_KECCAK")
151132

152133

0 commit comments

Comments
 (0)