blob: 6571ad0bec1e5e83521d6e8816ce6660a243093b [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
59 if (!defined(configs)) {
60 configs = []
61 }
62
63 # Add default configs to use for all binary build targets.
64 configs += [
65 "$dir_pw_build:reduced_size",
66 "$dir_pw_build:strict_warnings",
67 ]
68 }
69}
70
71foreach(_target_type,
72 [
73 "source_set",
74 "executable",
75 "shared_library",
76 "static_library",
77 ]) {
78 template(_target_type) {
79 _pw_override_target_with_defaults(target_name) {
80 forward_variables_from(invoker, "*")
81 }
82 }
83}