1load("//bazel:defs.bzl", "pico_board_config")
2load("//bazel/util:multiple_choice_flag.bzl", "declare_flag_choices", "flag_choice")
3
4package(default_visibility = ["//visibility:public"])
5
6# Known board choices:
7BOARD_CHOICES = [
8    "0xcb_helios",
9    "adafruit_feather_rp2040_usb_host",
10    "adafruit_feather_rp2040",
11    "adafruit_itsybitsy_rp2040",
12    "adafruit_kb2040",
13    "adafruit_macropad_rp2040",
14    "adafruit_qtpy_rp2040",
15    "adafruit_trinkey_qt2040",
16    "amethyst_fpga",
17    "archi",
18    "arduino_nano_rp2040_connect",
19    "cytron_maker_pi_rp2040",
20    "datanoisetv_rp2040_dsp",
21    "defcon32_badge",
22    "eetree_gamekit_rp2040",
23    "garatronic_pybstick26_rp2040",
24    "gen4_rp2350_24",
25    "gen4_rp2350_24ct",
26    "gen4_rp2350_24t",
27    "gen4_rp2350_28",
28    "gen4_rp2350_28ct",
29    "gen4_rp2350_28t",
30    "gen4_rp2350_32",
31    "gen4_rp2350_32ct",
32    "gen4_rp2350_32t",
33    "gen4_rp2350_35",
34    "gen4_rp2350_35ct",
35    "gen4_rp2350_35t",
36    "hellbender_2350A_devboard",
37    "ilabs_challenger_rp2350_bconnect",
38    "ilabs_challenger_rp2350_wifi_ble",
39    "ilabs_opendec02",
40    "melopero_perpetuo_rp2350_lora",
41    "melopero_shake_rp2040",
42    "metrotech_xerxes_rp2040",
43    "net8086_usb_interposer",
44    "none",
45    "nullbits_bit_c_pro",
46    "phyx_rick_tny_rp2350",
47    "pi-plates_micropi",
48    "pico_w",
49    "pico",
50    "pico2",
51    "pimoroni_badger2040",
52    "pimoroni_interstate75",
53    "pimoroni_keybow2040",
54    "pimoroni_motor2040",
55    "pimoroni_pga2040",
56    "pimoroni_pga2350",
57    "pimoroni_pico_plus2_rp2350",
58    "pimoroni_picolipo_16mb",
59    "pimoroni_picolipo_4mb",
60    "pimoroni_picosystem",
61    "pimoroni_plasma2040",
62    "pimoroni_plasma2350",
63    "pimoroni_servo2040",
64    "pimoroni_tiny2040_2mb",
65    "pimoroni_tiny2040",
66    "pimoroni_tiny2350",
67    "pololu_3pi_2040_robot",
68    "pololu_zumo_2040_robot",
69    "seeed_xiao_rp2040",
70    "seeed_xiao_rp2350",
71    "solderparty_rp2040_stamp_carrier",
72    "solderparty_rp2040_stamp_round_carrier",
73    "solderparty_rp2040_stamp",
74    "solderparty_rp2350_stamp_xl",
75    "solderparty_rp2350_stamp",
76    "sparkfun_micromod",
77    "sparkfun_promicro_rp2350",
78    "sparkfun_promicro",
79    "sparkfun_thingplus",
80    "switchscience_picossci2_conta_base",
81    "switchscience_picossci2_dev_board",
82    "switchscience_picossci2_micro",
83    "switchscience_picossci2_rp2350_breakout",
84    "switchscience_picossci2_tiny",
85    "tinycircuits_thumby_color_rp2350",
86    "vgaboard",
87    "waveshare_rp2040_lcd_0.96",
88    "waveshare_rp2040_lcd_1.28",
89    "waveshare_rp2040_one",
90    "waveshare_rp2040_plus_16mb",
91    "waveshare_rp2040_plus_4mb",
92    "waveshare_rp2040_zero",
93    "weact_studio_rp2040_16mb",
94    "weact_studio_rp2040_2mb",
95    "weact_studio_rp2040_4mb",
96    "weact_studio_rp2040_8mb",
97    "wiznet_w5100s_evb_pico",
98]
99
100BOARD_CHOICE_FILES = ["include/boards/" + c + ".h" for c in BOARD_CHOICES]
101
102BOARD_CHOICE_MAP = {c: [":{}".format(c)] for c in BOARD_CHOICES}
103
104# PICO_BUILD_DEFINE: PICO_BOARD, Name of board, type=string, default=CMake PICO_BOARD variable, group=pico_base
105[
106    pico_board_config(
107        name = board,
108        hdrs = BOARD_CHOICE_FILES,
109        defines = [
110            'PICO_BOARD=\\"{}\\"'.format(board),
111        ],
112        includes = ["include"],
113        platform_includes = [
114            "cmsis/rename_exceptions.h",
115            "boards/{}.h".format(board),
116        ],
117        deps = ["//src/rp2_common/cmsis:rename_exceptions"],
118    )
119    for board in BOARD_CHOICES
120]
121
122# Creates a config_setting for each known board option with the name:
123#     PICO_BOARD_[choice]
124declare_flag_choices(
125    "//bazel/config:PICO_BOARD",
126    BOARD_CHOICES,
127)
128
129cc_library(
130    name = "default",
131    deps = select(
132        flag_choice(
133            "//bazel/config:PICO_BOARD",
134            ":__pkg__",
135            BOARD_CHOICE_MAP,
136        ) | {
137            "//bazel/constraint:host": [":none"],
138            "//conditions:default": [":none"],
139        },
140    ),
141)
142