blob: 0b71a27c8a1f652e275537ec0cd24bed4b98e687 [file] [log] [blame]
# Copyright 2021 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# https:#www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
import("//build_overrides/pigweed.gni")
import("$dir_pw_arduino_build/arduino.gni")
import("$dir_pw_build/target_types.gni")
# Declare a teensy arduino library target
#
# teensy_library_source_set creates a pw_source_set target for a specified library
# under $pw_arduino_build_CORE_PATH/teensy/hardware/teensy/avr/libraries. It gathers
# the c/cpp source files and include directories for the library. Caller of the
# template can provide additional attributes of a regular pw_source_set into the
# target.
#
# Example:
#
# The following defines a pw_source_set target for
# $pw_arduino_build_CORE_PATH/teensy/hardware/teensy/avr/libraries/NativeEthernet
#
# teensy_library_source_set("native_ethernet") {
# library_name = "NativeEthernet"
# # Additional values to pass
# public_deps = [ ... ]
# public_configs = [ ... ]
# }
#
# The template is only valid for arduino teensy.
assert(
pw_arduino_build_CORE_PATH != "" && pw_arduino_build_CORE_NAME == "teensy")
template("teensy_library_source_set") {
assert(defined(invoker.library_name) && invoker.library_name != "")
_library_args = [
"--library-path",
rebase_path(
"$pw_arduino_build_CORE_PATH/teensy/hardware/teensy/avr/libraries"),
"--library-names",
invoker.library_name,
]
show_command_args = arduino_show_command_args + _library_args
# Gather the c files.
_library_c_files = exec_script(arduino_builder_script,
show_command_args + [ "--library-c-files" ],
"list lines")
# Gather the cpp files.
_library_cpp_files =
exec_script(arduino_builder_script,
show_command_args + [ "--library-cpp-files" ],
"list lines")
# Gather the include directories.
_library_include_dirs =
exec_script(arduino_builder_script,
show_command_args + [ "--library-include-dirs" ],
"list lines")
public_config_name = target_name + "_public_config"
config(public_config_name) {
include_dirs = _library_include_dirs
}
# Define the target
pw_source_set(target_name) {
# Gather values provided by inovker.
forward_variables_from(invoker, "*", [ "library_name" ])
if (!defined(deps)) {
deps = []
}
deps += [ "$dir_pw_third_party/arduino:arduino_core_sources" ]
if (!defined(sources)) {
sources = []
}
sources += _library_c_files + _library_cpp_files
if (!defined(include_dirs)) {
include_dirs = []
}
include_dirs += _library_include_dirs
if (!defined(remove_configs)) {
remove_configs = []
}
remove_configs = [ "$dir_pw_build:strict_warnings" ]
if (!defined(public_configs)) {
public_configs = []
}
public_configs += [ ":$public_config_name" ]
}
}