xref: /aosp_15_r20/external/pigweed/targets/arduino/BUILD.gn (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker# Copyright 2020 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/pigweed.gni")
16*61c4878aSAndroid Build Coastguard Worker
17*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_arduino_build/arduino.gni")
18*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/target_types.gni")
19*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_docgen/docs.gni")
20*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_toolchain/generate_toolchain.gni")
21*61c4878aSAndroid Build Coastguard Workerpw_doc_group("target_docs") {
22*61c4878aSAndroid Build Coastguard Worker  sources = [ "target_docs.rst" ]
23*61c4878aSAndroid Build Coastguard Worker}
24*61c4878aSAndroid Build Coastguard Worker
25*61c4878aSAndroid Build Coastguard Workerif (pw_arduino_build_CORE_PATH != "") {
26*61c4878aSAndroid Build Coastguard Worker  import("target_toolchains.gni")
27*61c4878aSAndroid Build Coastguard Worker
28*61c4878aSAndroid Build Coastguard Worker  generate_toolchains("target_toolchains") {
29*61c4878aSAndroid Build Coastguard Worker    toolchains = pw_target_toolchain_arduino_list
30*61c4878aSAndroid Build Coastguard Worker  }
31*61c4878aSAndroid Build Coastguard Worker
32*61c4878aSAndroid Build Coastguard Worker  if (current_toolchain != default_toolchain) {
33*61c4878aSAndroid Build Coastguard Worker    config("arduino_build") {
34*61c4878aSAndroid Build Coastguard Worker      # Debug: Print out arduinobuilder.py args
35*61c4878aSAndroid Build Coastguard Worker      # print(string_join(" ", [rebase_path(arduino_builder_script, root_build_dir)] + arduino_show_command_args))
36*61c4878aSAndroid Build Coastguard Worker
37*61c4878aSAndroid Build Coastguard Worker      # Run prebuilds
38*61c4878aSAndroid Build Coastguard Worker      # TODO(tonymd) This only needs to be run once but it's happening multiple times.
39*61c4878aSAndroid Build Coastguard Worker      exec_script(arduino_builder_script,
40*61c4878aSAndroid Build Coastguard Worker                  filter_exclude(arduino_run_command_args,
41*61c4878aSAndroid Build Coastguard Worker                                 [ "--save-config" ]) + [ "--run-prebuilds" ],
42*61c4878aSAndroid Build Coastguard Worker                  "string")
43*61c4878aSAndroid Build Coastguard Worker
44*61c4878aSAndroid Build Coastguard Worker      _exclude_flags = [ "-std=gnu++14" ]
45*61c4878aSAndroid Build Coastguard Worker
46*61c4878aSAndroid Build Coastguard Worker      _cflags = exec_script(arduino_builder_script,
47*61c4878aSAndroid Build Coastguard Worker                            arduino_show_command_args + [ "--c-flags" ],
48*61c4878aSAndroid Build Coastguard Worker                            "list lines")
49*61c4878aSAndroid Build Coastguard Worker      cflags = filter_exclude(_cflags, _exclude_flags)
50*61c4878aSAndroid Build Coastguard Worker
51*61c4878aSAndroid Build Coastguard Worker      asmflags = exec_script(arduino_builder_script,
52*61c4878aSAndroid Build Coastguard Worker                             arduino_show_command_args + [ "--s-only-flags" ],
53*61c4878aSAndroid Build Coastguard Worker                             "list lines")
54*61c4878aSAndroid Build Coastguard Worker
55*61c4878aSAndroid Build Coastguard Worker      _cflags_cc =
56*61c4878aSAndroid Build Coastguard Worker          exec_script(arduino_builder_script,
57*61c4878aSAndroid Build Coastguard Worker                      arduino_show_command_args + [ "--cpp-only-flags" ],
58*61c4878aSAndroid Build Coastguard Worker                      "list lines")
59*61c4878aSAndroid Build Coastguard Worker      cflags_cc = filter_exclude(_cflags_cc, _exclude_flags)
60*61c4878aSAndroid Build Coastguard Worker
61*61c4878aSAndroid Build Coastguard Worker      _ldflags = exec_script(arduino_builder_script,
62*61c4878aSAndroid Build Coastguard Worker                             arduino_show_command_args + [ "--ld-flags" ],
63*61c4878aSAndroid Build Coastguard Worker                             "list lines")
64*61c4878aSAndroid Build Coastguard Worker      ldflags =
65*61c4878aSAndroid Build Coastguard Worker          filter_exclude(_ldflags,
66*61c4878aSAndroid Build Coastguard Worker                         [
67*61c4878aSAndroid Build Coastguard Worker                           # Remove arguments ending in 'core.a', for example:
68*61c4878aSAndroid Build Coastguard Worker                           # C:/Users/username/pigweed/out/core.a
69*61c4878aSAndroid Build Coastguard Worker                           "*core.a\b",
70*61c4878aSAndroid Build Coastguard Worker
71*61c4878aSAndroid Build Coastguard Worker                           # Remove .elf output file, for example:
72*61c4878aSAndroid Build Coastguard Worker                           # -o C:/Users/username/pigweed/out/pigweed.elf
73*61c4878aSAndroid Build Coastguard Worker                           "\b-o\b",
74*61c4878aSAndroid Build Coastguard Worker                           "*.elf\b",
75*61c4878aSAndroid Build Coastguard Worker
76*61c4878aSAndroid Build Coastguard Worker                           # Remove the Arduino {object_files} variable
77*61c4878aSAndroid Build Coastguard Worker                           "{object_files}",
78*61c4878aSAndroid Build Coastguard Worker                         ])
79*61c4878aSAndroid Build Coastguard Worker
80*61c4878aSAndroid Build Coastguard Worker      # Teensy4 core recipe uses: '-larm_cortexM7lfsp_math -lm -lstdc++'
81*61c4878aSAndroid Build Coastguard Worker      libs = filter_exclude(
82*61c4878aSAndroid Build Coastguard Worker              exec_script(arduino_builder_script,
83*61c4878aSAndroid Build Coastguard Worker                          arduino_show_command_args + [ "--ld-lib-names" ],
84*61c4878aSAndroid Build Coastguard Worker                          "list lines"),
85*61c4878aSAndroid Build Coastguard Worker              [
86*61c4878aSAndroid Build Coastguard Worker                # Exclude stdc++ and precompiled math libraries which causes
87*61c4878aSAndroid Build Coastguard Worker                # linking errors for teensy cores.
88*61c4878aSAndroid Build Coastguard Worker                "\bstdc++\b",
89*61c4878aSAndroid Build Coastguard Worker                "\barm_cortexM0l_math\b",
90*61c4878aSAndroid Build Coastguard Worker                "\barm_cortexM4lf_math\b",
91*61c4878aSAndroid Build Coastguard Worker                "\barm_cortexM4l_math\b",
92*61c4878aSAndroid Build Coastguard Worker                "\barm_cortexM7lfsp_math\b",
93*61c4878aSAndroid Build Coastguard Worker              ])
94*61c4878aSAndroid Build Coastguard Worker    }
95*61c4878aSAndroid Build Coastguard Worker
96*61c4878aSAndroid Build Coastguard Worker    pw_source_set("pre_init") {
97*61c4878aSAndroid Build Coastguard Worker      sources = [ "init.cc" ]
98*61c4878aSAndroid Build Coastguard Worker      public_deps = [
99*61c4878aSAndroid Build Coastguard Worker        "$dir_pw_sys_io_arduino",
100*61c4878aSAndroid Build Coastguard Worker        "$dir_pw_third_party/arduino:arduino_core_sources",
101*61c4878aSAndroid Build Coastguard Worker      ]
102*61c4878aSAndroid Build Coastguard Worker      deps = [
103*61c4878aSAndroid Build Coastguard Worker        "$dir_pw_arduino_build:arduino_init.facade",
104*61c4878aSAndroid Build Coastguard Worker        "$dir_pw_preprocessor",
105*61c4878aSAndroid Build Coastguard Worker      ]
106*61c4878aSAndroid Build Coastguard Worker    }
107*61c4878aSAndroid Build Coastguard Worker  }
108*61c4878aSAndroid Build Coastguard Worker} else {
109*61c4878aSAndroid Build Coastguard Worker  config("arduino_build") {
110*61c4878aSAndroid Build Coastguard Worker  }
111*61c4878aSAndroid Build Coastguard Worker  group("pre_init") {
112*61c4878aSAndroid Build Coastguard Worker  }
113*61c4878aSAndroid Build Coastguard Worker}
114