Skip to content

Commit e65d808

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 80d1276 commit e65d808

File tree

4 files changed

+88
-42
lines changed

4 files changed

+88
-42
lines changed

src/CMakeLists.txt

+19-20
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ set(DBB-FIRMWARE-UI-SOURCES
6969
${CMAKE_SOURCE_DIR}/src/ui/components/show_logo.c
7070
${CMAKE_SOURCE_DIR}/src/ui/components/waiting.c
7171
${CMAKE_SOURCE_DIR}/src/ui/screen_process.c
72-
${CMAKE_SOURCE_DIR}/src/ui/ugui/ugui.c
7372
${CMAKE_SOURCE_DIR}/src/touch/gestures.c
7473
)
7574
set(DBB-FIRMWARE-UI-SOURCES ${DBB-FIRMWARE-UI-SOURCES} PARENT_SCOPE)
@@ -134,7 +133,6 @@ set(DBB-BOOTLOADER-SOURCES
134133
${CMAKE_SOURCE_DIR}/src/bootloader/mpu_regions.c
135134
${CMAKE_SOURCE_DIR}/src/queue.c
136135
${CMAKE_SOURCE_DIR}/src/usb/usb_processing.c
137-
${CMAKE_SOURCE_DIR}/src/ui/ugui/ugui.c
138136
${CMAKE_SOURCE_DIR}/src/ui/fonts/font_a_9X9.c
139137
${CMAKE_SOURCE_DIR}/src/hardfault.c
140138
${CMAKE_SOURCE_DIR}/src/ui/components/ui_images.c
@@ -150,6 +148,7 @@ set(DRIVER-SOURCES
150148
${CMAKE_SOURCE_DIR}/src/platform/platform_init.c
151149
${CMAKE_SOURCE_DIR}/src/qtouch/qtouch.c
152150
${CMAKE_SOURCE_DIR}/src/ui/oled/oled.c
151+
${CMAKE_SOURCE_DIR}/src/ui/ugui/ugui.c
153152
)
154153
set(DRIVER-SOURCES ${DRIVER-SOURCES} PARENT_SCOPE)
155154

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

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

530529

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

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

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

545544
set(FIRMWARES
@@ -610,7 +609,7 @@ if(CMAKE_CROSSCOMPILING)
610609
endforeach(firmware)
611610

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

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

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

632631
target_sources(firmware-bitboxbase.elf PRIVATE bitboxbase/bitboxbase.c)
633-
target_compile_definitions(firmware-bitboxbase.elf PRIVATE PRODUCT_BITBOX_BASE "APP_BTC=0" "APP_LTC=0" "APP_ETH=0" "APP_U2F=0")
632+
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")
634633
target_sources(firmware-bitboxbase.elf PRIVATE ${BITBOXBASE-FIRMWARE-SOURCES})
635634
target_link_libraries(firmware-bitboxbase.elf PRIVATE bitboxbase-platform)
636635

637636
target_sources(firmware-bitboxbase-semihosting.elf PRIVATE bitboxbase/bitboxbase.c)
638-
target_compile_definitions(firmware-bitboxbase-semihosting.elf PRIVATE PRODUCT_BITBOX_BASE SEMIHOSTING "APP_BTC=0" "APP_LTC=0" "APP_ETH=0" "APP_U2F=0")
637+
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")
639638
target_sources(firmware-bitboxbase-semihosting.elf PRIVATE ${BITBOXBASE-FIRMWARE-SOURCES})
640639
target_link_libraries(firmware-bitboxbase-semihosting.elf PRIVATE bitboxbase-platform)
641640

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

649648
target_sources(factory-setup-bitboxbase.elf PRIVATE factorysetup.c)
650-
target_compile_definitions(factory-setup-bitboxbase.elf PRIVATE PRODUCT_BITBOXBASE_FACTORYSETUP "APP_BTC=0" "APP_LTC=0" "APP_ETH=0" "APP_U2F=0")
649+
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")
651650
target_link_libraries(factory-setup-bitboxbase.elf PRIVATE bitboxbase-platform)
652651

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

src/platform/platform_config.h

+58-17
Original file line numberDiff line numberDiff line change
@@ -15,67 +15,108 @@
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

50101
// Derive other useful definitions from the product.
51102

52103
#if PRODUCT_BITBOX_MULTI == 1
53-
#define PLATFORM_BITBOX02 1
54-
#define PLATFORM_BITBOXBASE 0
55104
#define FACTORYSETUP 0
56105
#endif
57106

58107
#if PRODUCT_BITBOX_BTCONLY == 1
59-
#define PLATFORM_BITBOX02 1
60-
#define PLATFORM_BITBOXBASE 0
61108
#define FACTORYSETUP 0
62109
#endif
63110

64111
#if PRODUCT_BITBOX_BASE == 1
65-
#define PLATFORM_BITBOX02 0
66-
#define PLATFORM_BITBOXBASE 1
67112
#define FACTORYSETUP 0
68113
#endif
69114

70115
#if PRODUCT_BITBOX02_FACTORYSETUP == 1
71-
#define PLATFORM_BITBOX02 1
72-
#define PLATFORM_BITBOXBASE 0
73116
#define FACTORYSETUP 1
74117
#endif
75118

76119
#if PRODUCT_BITBOXBASE_FACTORYSETUP == 1
77-
#define PLATFORM_BITBOX02 0
78-
#define PLATFORM_BITBOXBASE 1
79120
#define FACTORYSETUP 1
80121
#endif
81122

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-3
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,18 @@ find_package(Nanopb REQUIRED)
4747

4848
add_library(bitbox
4949
STATIC
50+
${DBB-FIRMWARE-COMMON-SOURCES}
5051
${DBB-FIRMWARE-COMPONENT-SOURCES}
5152
${DBB-FIRMWARE-WORKFLOW-SOURCES}
5253
${APP-BTC-SOURCES}
53-
${DBB-FILTERED-SOURCES}
54+
${DBB-FIRMWARE-UI-COMMON-SOURCES}
55+
${DBB-FIRMWARE-UI-SOURCES}
56+
${DBB-FIRMWARE-PROTOBUF-SOURCES}
57+
${DBB-FIRMWARE-USB-SOURCES}
58+
${DBB-FIRMWARE-USART-SOURCES}
5459
${CTAES-SOURCES}
5560
${ETHEREUM-SOURCES}
61+
${FIRMWARE-U2F-SOURCES}
5662
# The usb.c file mixes together hardware and testing code... This should be split.
5763
${CMAKE_SOURCE_DIR}/src/usb/usb.c
5864
${CMAKE_SOURCE_DIR}/src/usb/usb_frame.c
@@ -94,7 +100,7 @@ set_source_files_properties(
94100
target_include_directories(bitbox SYSTEM PUBLIC ${NANOPB_INCLUDE_DIRS})
95101
target_include_directories(bitbox PRIVATE ${CMAKE_SOURCE_DIR}/external/FatFs/source)
96102
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")
103+
target_compile_definitions(bitbox PUBLIC "PLATFORM_BITBOX02=1" "EDITION_STANDARD=1" "APP_BTC=1" "APP_LTC=1" "APP_U2F=1" "APP_ETH=1")
98104
add_dependencies(bitbox generate-protobufs)
99105

100106
# Since noiseprotocol and wallycore are external projects we need to specify the dependency
@@ -146,7 +152,7 @@ target_include_directories(
146152
${INCLUDES}
147153
${CMAKE_BINARY_DIR}/src
148154
)
149-
target_compile_definitions(u2f-util PUBLIC "TESTING" PRODUCT_BITBOX_MULTI "APP_U2F=1" "APP_BTC=1" "APP_LTC=1" "APP_ETH=1")
155+
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")
150156
target_compile_definitions(u2f-util PUBLIC "USE_KECCAK")
151157

152158

0 commit comments

Comments
 (0)