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