blob: fd625f59664ac778ce927fd726ac506ce1255413 [file] [log] [blame]
Wyatt Hepler21192402020-01-15 15:40:51 -08001# Copyright 2020 The Pigweed Authors
Alexei Frolov1a82c142019-10-31 17:37:12 -07002#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4# use this file except in compliance with the License. You may obtain a copy of
5# the License at
6#
7# https://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations under
13# the License.
14
Armando Montanez0ef17a72020-01-07 13:17:04 -080015# This BUILDCONFIG file tells GN how to build upstream Pigweed. When starting a
16# new project, you'll need to copy this file to your project and then modify it
17# to fit your needs. Due to the way Pigweed handles file imports, you won't be
18# able to simply import this file in your own BUILDCONFIG.gn.
19#
20# Keep in mind when importing .gni files that `gn format` will try to
21# alphabetically sort imports unless they're separated by comments. For this
22# file, import order matters (modules.gni MUST be imported first).
Alexei Frolov1a82c142019-10-31 17:37:12 -070023
24declare_args() {
Armando Montanez0ef17a72020-01-07 13:17:04 -080025 # Location of the Pigweed modules directory (defaults to the directory of
26 # this file). When copying this buildconfig into a new project, this should
27 # be modified to point to the location of the Pigweed repository.
28 dir_pigweed = get_path_info(get_path_info("BUILDCONFIG.gn", "abspath"), "dir")
29
Alexei Frolove899dcf2019-11-13 14:49:14 -080030 # Path to the Pigweed variables config file for the build target.
Alexei Frolov02dfcc42019-11-08 15:51:51 -080031 #
Alexei Frolove899dcf2019-11-13 14:49:14 -080032 # When this is changed, you must run `ninja -t clean` to remove any files from
33 # the previous target's build before building again.
34 pw_target_config = "$dir_pigweed/targets/host/host.gni"
Alexei Frolov1a82c142019-10-31 17:37:12 -070035}
36
Armando Montanez0ef17a72020-01-07 13:17:04 -080037# Import variables that provide paths to modules. Pigweed's GN build requires
38# that this file is imported, and it MUST be imported before any other Pigweed
39# .gni files (as they depend on the dir_[module] variables).
40import("$dir_pigweed/modules.gni")
41
Armando Montanez0ef17a72020-01-07 13:17:04 -080042# Import target configuration. This is what "completes" a Pigweed configuration.
43# This file should set a default toolchain, configure pw_executable, select
44# backends to build against, and provide target-specific build arguments.
Alexei Frolove899dcf2019-11-13 14:49:14 -080045import(pw_target_config)
46
Armando Montanez0ef17a72020-01-07 13:17:04 -080047# Ensure some sort of default toolchain was provided by the target, and then
48# set the default toolchain.
Alexei Frolove899dcf2019-11-13 14:49:14 -080049assert(pw_target_toolchain != "",
50 "Build target must provide its own toolchain.")
Alexei Frolov02dfcc42019-11-08 15:51:51 -080051set_default_toolchain(pw_target_toolchain)
Wyatt Hepler21192402020-01-15 15:40:51 -080052
53# Override the built-in build targets to add default compilation options.
54# TODO(pwbug/72): Move this code to a .gni file for easier reuse.
55template("_pw_override_target_with_defaults") {
56 target(invoker._target_type, target_name) {
57 forward_variables_from(invoker, "*", [ "_target_type" ])
58
Wyatt Heplerc542a5d2020-01-15 15:43:10 -080059 # Add a dependency on pw_polyfill, unless this is pw_polyfill.
60 if (rebase_path(".") != rebase_path("$dir_pw_polyfill")) {
61 if (!defined(public_deps)) {
62 public_deps = []
63 }
64 public_deps += [ "$dir_pw_polyfill:overrides" ]
65 }
66
Wyatt Hepler21192402020-01-15 15:40:51 -080067 if (!defined(configs)) {
68 configs = []
69 }
70
71 # Add default configs to use for all binary build targets.
Wyatt Heplerb9db09f2020-01-27 17:40:08 -080072 configs += [ "$dir_pw_build:default" ]
Wyatt Hepler21192402020-01-15 15:40:51 -080073 }
74}
75
76foreach(_target_type,
77 [
78 "source_set",
79 "executable",
80 "shared_library",
81 "static_library",
82 ]) {
83 template(_target_type) {
84 _pw_override_target_with_defaults(target_name) {
85 forward_variables_from(invoker, "*")
86 }
87 }
88}