xref: /aosp_15_r20/external/pigweed/targets/rp2040/BUILD.gn (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker# Copyright 2022 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker#
3*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker# the License at
6*61c4878aSAndroid Build Coastguard Worker#
7*61c4878aSAndroid Build Coastguard Worker#     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker#
9*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker# the License.
14*61c4878aSAndroid Build Coastguard Worker
15*61c4878aSAndroid Build Coastguard Workerimport("//build_overrides/pi_pico.gni")
16*61c4878aSAndroid Build Coastguard Workerimport("//build_overrides/pigweed.gni")
17*61c4878aSAndroid Build Coastguard Worker
18*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/copy_and_patch.gni")
19*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/target_types.gni")
20*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_docgen/docs.gni")
21*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_system/system_target.gni")
22*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_toolchain/arm_gcc/toolchains.gni")
23*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_toolchain/generate_toolchain.gni")
24*61c4878aSAndroid Build Coastguard Worker
25*61c4878aSAndroid Build Coastguard Workerdeclare_args() {
26*61c4878aSAndroid Build Coastguard Worker  pw_targets_ENABLE_RP2040_TEST_RUNNER = false
27*61c4878aSAndroid Build Coastguard Worker}
28*61c4878aSAndroid Build Coastguard Worker
29*61c4878aSAndroid Build Coastguard Workerif (current_toolchain != default_toolchain) {
30*61c4878aSAndroid Build Coastguard Worker  pw_source_set("pre_init") {
31*61c4878aSAndroid Build Coastguard Worker    remove_configs = [ "$dir_pw_build:strict_warnings" ]
32*61c4878aSAndroid Build Coastguard Worker
33*61c4878aSAndroid Build Coastguard Worker    deps = [
34*61c4878aSAndroid Build Coastguard Worker      "$PICO_ROOT/src/common/pico_base",
35*61c4878aSAndroid Build Coastguard Worker      "$PICO_ROOT/src/common/pico_stdlib",
36*61c4878aSAndroid Build Coastguard Worker      "$PICO_ROOT/src/rp2_common/hardware_exception",
37*61c4878aSAndroid Build Coastguard Worker      "$PICO_ROOT/src/rp2_common/hardware_watchdog",
38*61c4878aSAndroid Build Coastguard Worker      "$PICO_ROOT/src/rp2_common/pico_malloc",
39*61c4878aSAndroid Build Coastguard Worker      "$dir_pigweed/targets/rp2040:memmap_default_ld",
40*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_cpu_exception:entry",
41*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_string",
42*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_system",
43*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_system:crash_handler",
44*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party/freertos",
45*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party/freertos:support",
46*61c4878aSAndroid Build Coastguard Worker    ]
47*61c4878aSAndroid Build Coastguard Worker    sources = [ "boot.cc" ]
48*61c4878aSAndroid Build Coastguard Worker  }
49*61c4878aSAndroid Build Coastguard Worker
50*61c4878aSAndroid Build Coastguard Worker  pw_source_set("device_handler") {
51*61c4878aSAndroid Build Coastguard Worker    deps = [
52*61c4878aSAndroid Build Coastguard Worker      "$PICO_ROOT/src/rp2_common/hardware_watchdog",
53*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_cpu_exception:entry",
54*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_cpu_exception_cortex_m:snapshot",
55*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_system:device_handler.facade",
56*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_thread_freertos:snapshot",
57*61c4878aSAndroid Build Coastguard Worker    ]
58*61c4878aSAndroid Build Coastguard Worker    sources = [ "device_handler.cc" ]
59*61c4878aSAndroid Build Coastguard Worker  }
60*61c4878aSAndroid Build Coastguard Worker
61*61c4878aSAndroid Build Coastguard Worker  config("config_includes") {
62*61c4878aSAndroid Build Coastguard Worker    include_dirs = [ "config" ]
63*61c4878aSAndroid Build Coastguard Worker    defines = [ "_PW_PICO_GN_BUILD=1" ]
64*61c4878aSAndroid Build Coastguard Worker  }
65*61c4878aSAndroid Build Coastguard Worker
66*61c4878aSAndroid Build Coastguard Worker  config("module_config_include") {
67*61c4878aSAndroid Build Coastguard Worker    cflags = [
68*61c4878aSAndroid Build Coastguard Worker      "-include",
69*61c4878aSAndroid Build Coastguard Worker      rebase_path("config/pigweed_module_config.h", root_build_dir),
70*61c4878aSAndroid Build Coastguard Worker    ]
71*61c4878aSAndroid Build Coastguard Worker    visibility = [ ":*" ]
72*61c4878aSAndroid Build Coastguard Worker  }
73*61c4878aSAndroid Build Coastguard Worker
74*61c4878aSAndroid Build Coastguard Worker  pw_source_set("module_config") {
75*61c4878aSAndroid Build Coastguard Worker    public_configs = [ ":module_config_include" ]
76*61c4878aSAndroid Build Coastguard Worker  }
77*61c4878aSAndroid Build Coastguard Worker
78*61c4878aSAndroid Build Coastguard Worker  config("rp2040_hal_config") {
79*61c4878aSAndroid Build Coastguard Worker    inputs = [ "config/rp2040_hal_config.h" ]
80*61c4878aSAndroid Build Coastguard Worker    cflags = [ "-include" +
81*61c4878aSAndroid Build Coastguard Worker               rebase_path("config/rp2040_hal_config.h", root_build_dir) ]
82*61c4878aSAndroid Build Coastguard Worker  }
83*61c4878aSAndroid Build Coastguard Worker
84*61c4878aSAndroid Build Coastguard Worker  pw_copy_and_patch_file("memmap_default_ld") {
85*61c4878aSAndroid Build Coastguard Worker    source =
86*61c4878aSAndroid Build Coastguard Worker        "${PICO_SRC_DIR}/src/rp2_common/pico_standard_link/memmap_default.ld"
87*61c4878aSAndroid Build Coastguard Worker    out = "patched_memmap_default.ld"
88*61c4878aSAndroid Build Coastguard Worker    patch_file = "patches/pico_sdk_v1_memmap_default.ld.patch"
89*61c4878aSAndroid Build Coastguard Worker
90*61c4878aSAndroid Build Coastguard Worker    # Check if PICO_SRC_DIR is defined, as in build configurations which don't
91*61c4878aSAndroid Build Coastguard Worker    # define PICO_SRC_DIR, GN will complain, as root can't be an empty string.
92*61c4878aSAndroid Build Coastguard Worker    if (PICO_SRC_DIR != "") {
93*61c4878aSAndroid Build Coastguard Worker      root = "${PICO_SRC_DIR}"
94*61c4878aSAndroid Build Coastguard Worker    }
95*61c4878aSAndroid Build Coastguard Worker  }
96*61c4878aSAndroid Build Coastguard Worker
97*61c4878aSAndroid Build Coastguard Worker  config("linker_script") {
98*61c4878aSAndroid Build Coastguard Worker    _linker_scripts = get_target_outputs(":memmap_default_ld")
99*61c4878aSAndroid Build Coastguard Worker    _linker_script_path = rebase_path(_linker_scripts[0], root_build_dir)
100*61c4878aSAndroid Build Coastguard Worker    ldflags = [ "-T${_linker_script_path}" ]
101*61c4878aSAndroid Build Coastguard Worker  }
102*61c4878aSAndroid Build Coastguard Worker
103*61c4878aSAndroid Build Coastguard Worker  pw_source_set("rp2040_freertos_config") {
104*61c4878aSAndroid Build Coastguard Worker    public_configs = [ ":config_includes" ]
105*61c4878aSAndroid Build Coastguard Worker    public_deps = [ "$dir_pw_third_party/freertos:config_assert" ]
106*61c4878aSAndroid Build Coastguard Worker    public = [ "config/FreeRTOSConfig.h" ]
107*61c4878aSAndroid Build Coastguard Worker  }
108*61c4878aSAndroid Build Coastguard Worker
109*61c4878aSAndroid Build Coastguard Worker  pw_source_set("unit_test_app") {
110*61c4878aSAndroid Build Coastguard Worker    sources = [ "unit_test_app.cc" ]
111*61c4878aSAndroid Build Coastguard Worker    deps = [
112*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_status",
113*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_system",
114*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_unit_test:rpc_service",
115*61c4878aSAndroid Build Coastguard Worker    ]
116*61c4878aSAndroid Build Coastguard Worker  }
117*61c4878aSAndroid Build Coastguard Worker
118*61c4878aSAndroid Build Coastguard Worker  # We don't want this linked into the boot_stage2 binary, so make the printf
119*61c4878aSAndroid Build Coastguard Worker  # float config a source set added to pw_build_LINK_DEPS (which is dropped on
120*61c4878aSAndroid Build Coastguard Worker  # the boot_stage2 binary) rather than as a default_config.
121*61c4878aSAndroid Build Coastguard Worker  pw_source_set("float_printf_adapter") {
122*61c4878aSAndroid Build Coastguard Worker    all_dependent_configs = [ "$dir_pw_toolchain/arm_gcc:enable_float_printf" ]
123*61c4878aSAndroid Build Coastguard Worker  }
124*61c4878aSAndroid Build Coastguard Worker}
125*61c4878aSAndroid Build Coastguard Worker
126*61c4878aSAndroid Build Coastguard Workerpw_system_target("rp2040") {
127*61c4878aSAndroid Build Coastguard Worker  cpu = PW_SYSTEM_CPU.CORTEX_M0PLUS
128*61c4878aSAndroid Build Coastguard Worker  scheduler = PW_SYSTEM_SCHEDULER.FREERTOS
129*61c4878aSAndroid Build Coastguard Worker  use_pw_malloc = false
130*61c4878aSAndroid Build Coastguard Worker  global_configs = [ ":rp2040_hal_config" ]
131*61c4878aSAndroid Build Coastguard Worker
132*61c4878aSAndroid Build Coastguard Worker  build_args = {
133*61c4878aSAndroid Build Coastguard Worker    pw_build_DEFAULT_MODULE_CONFIG = get_path_info(":module_config", "abspath")
134*61c4878aSAndroid Build Coastguard Worker    pw_build_EXECUTABLE_TARGET_TYPE = "pico_executable"
135*61c4878aSAndroid Build Coastguard Worker    pw_build_EXECUTABLE_TARGET_TYPE_FILE =
136*61c4878aSAndroid Build Coastguard Worker        get_path_info("$dir_pigweed/targets/rp2040/pico_executable.gni",
137*61c4878aSAndroid Build Coastguard Worker                      "abspath")
138*61c4878aSAndroid Build Coastguard Worker
139*61c4878aSAndroid Build Coastguard Worker    pw_assert_BACKEND = dir_pw_assert_trap
140*61c4878aSAndroid Build Coastguard Worker    pw_assert_LITE_BACKEND = dir_pw_assert_trap
141*61c4878aSAndroid Build Coastguard Worker
142*61c4878aSAndroid Build Coastguard Worker    pw_cpu_exception_ENTRY_BACKEND =
143*61c4878aSAndroid Build Coastguard Worker        "$dir_pw_cpu_exception_cortex_m:cpu_exception_armv6m"
144*61c4878aSAndroid Build Coastguard Worker    pw_cpu_exception_HANDLER_BACKEND = "$dir_pw_cpu_exception:basic_handler"
145*61c4878aSAndroid Build Coastguard Worker    pw_cpu_exception_SUPPORT_BACKEND = "$dir_pw_cpu_exception_cortex_m:support"
146*61c4878aSAndroid Build Coastguard Worker
147*61c4878aSAndroid Build Coastguard Worker    pw_log_BACKEND = dir_pw_log_tokenized
148*61c4878aSAndroid Build Coastguard Worker    pw_log_tokenized_HANDLER_BACKEND = "$dir_pw_system:log_backend.impl"
149*61c4878aSAndroid Build Coastguard Worker
150*61c4878aSAndroid Build Coastguard Worker    pw_third_party_freertos_CONFIG =
151*61c4878aSAndroid Build Coastguard Worker        "$dir_pigweed/targets/rp2040:rp2040_freertos_config"
152*61c4878aSAndroid Build Coastguard Worker    pw_third_party_freertos_PORT = "$dir_pw_third_party/freertos:arm_cm0"
153*61c4878aSAndroid Build Coastguard Worker
154*61c4878aSAndroid Build Coastguard Worker    pw_sys_io_BACKEND = dir_pw_sys_io_stdio
155*61c4878aSAndroid Build Coastguard Worker
156*61c4878aSAndroid Build Coastguard Worker    pw_sync_INTERRUPT_SPIN_LOCK_BACKEND =
157*61c4878aSAndroid Build Coastguard Worker        "$dir_pw_sync_freertos:interrupt_spin_lock"
158*61c4878aSAndroid Build Coastguard Worker
159*61c4878aSAndroid Build Coastguard Worker    pw_system_DEVICE_HANDLER = "$dir_pigweed/targets/rp2040:device_handler"
160*61c4878aSAndroid Build Coastguard Worker
161*61c4878aSAndroid Build Coastguard Worker    PICO_LINKER_SCRIPT = "$dir_pigweed/targets/rp2040:linker_script"
162*61c4878aSAndroid Build Coastguard Worker
163*61c4878aSAndroid Build Coastguard Worker    pw_build_LINK_DEPS += [
164*61c4878aSAndroid Build Coastguard Worker      "$dir_pigweed/targets/rp2040:pre_init",
165*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_assert:impl",
166*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_cpu_exception:entry_impl",
167*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_log:impl",
168*61c4878aSAndroid Build Coastguard Worker      get_path_info(":float_printf_adapter", "abspath"),
169*61c4878aSAndroid Build Coastguard Worker    ]
170*61c4878aSAndroid Build Coastguard Worker
171*61c4878aSAndroid Build Coastguard Worker    # ONLY RELEVANT FOR UNIT TESTS.
172*61c4878aSAndroid Build Coastguard Worker    if (pw_targets_ENABLE_RP2040_TEST_RUNNER) {
173*61c4878aSAndroid Build Coastguard Worker      _test_runner_script =
174*61c4878aSAndroid Build Coastguard Worker          "//targets/rp2040/py/rp2040_utils/unit_test_client.py"
175*61c4878aSAndroid Build Coastguard Worker      pw_unit_test_AUTOMATIC_RUNNER =
176*61c4878aSAndroid Build Coastguard Worker          get_path_info(_test_runner_script, "abspath")
177*61c4878aSAndroid Build Coastguard Worker    }
178*61c4878aSAndroid Build Coastguard Worker    pw_unit_test_MAIN = "$dir_pigweed/targets/rp2040:unit_test_app"
179*61c4878aSAndroid Build Coastguard Worker  }
180*61c4878aSAndroid Build Coastguard Worker}
181*61c4878aSAndroid Build Coastguard Worker
182*61c4878aSAndroid Build Coastguard Worker# This is target is to keep the presubmit happy.
183*61c4878aSAndroid Build Coastguard Worker# It is not yet used.
184*61c4878aSAndroid Build Coastguard Worker# TODO: pwbug.dev/349853258 - add a GN toolchain for pw_system_async.
185*61c4878aSAndroid Build Coastguard Workerpw_source_set("system_async_example") {
186*61c4878aSAndroid Build Coastguard Worker  sources = [ "system_async_example.cc" ]
187*61c4878aSAndroid Build Coastguard Worker}
188*61c4878aSAndroid Build Coastguard Worker
189*61c4878aSAndroid Build Coastguard Workerpw_doc_group("target_docs") {
190*61c4878aSAndroid Build Coastguard Worker  sources = [
191*61c4878aSAndroid Build Coastguard Worker    "target_docs.rst",
192*61c4878aSAndroid Build Coastguard Worker    "upstream.rst",
193*61c4878aSAndroid Build Coastguard Worker  ]
194*61c4878aSAndroid Build Coastguard Worker  inputs = [ "49-pico.rules" ]
195*61c4878aSAndroid Build Coastguard Worker}
196