121 lines
3.4 KiB
Plaintext
121 lines
3.4 KiB
Plaintext
# Copyright 2020 Google LLC
|
|
#
|
|
# 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_pigweed/targets/host/target_toolchains.gni")
|
|
import("$dir_pw_toolchain/generate_toolchain.gni")
|
|
|
|
config("common_config") {
|
|
include_dirs = [ "//include" ]
|
|
|
|
# No language extensions, to promote portability.
|
|
cflags_c = [
|
|
"-Wvla",
|
|
"-std=c99",
|
|
"-pedantic",
|
|
]
|
|
|
|
# Modern C++ for test and tooling.
|
|
cflags_cc = [ "-std=c++20" ]
|
|
}
|
|
|
|
config("enable_sanitizers") {
|
|
filter_path = rebase_path("sanitize_filter.txt", root_build_dir)
|
|
cflags = [
|
|
"-fsanitize=address,undefined,integer",
|
|
"-fsanitize-blacklist=$filter_path",
|
|
]
|
|
ldflags = cflags
|
|
inputs = [ "sanitize_filter.txt" ]
|
|
}
|
|
|
|
config("enable_fuzzer") {
|
|
cflags = [
|
|
"-fsanitize=fuzzer",
|
|
"-O1",
|
|
"-fno-omit-frame-pointer",
|
|
"-fno-optimize-sibling-calls",
|
|
]
|
|
ldflags = cflags
|
|
}
|
|
|
|
# Define a scope for each toolchain that can be fed into generate_toolchain.
|
|
_host_debug = {
|
|
# Use Pigweed's host_clang_debug toolchain as a base.
|
|
_toolchain_base = pw_target_toolchain_host.clang_debug
|
|
|
|
# Forward everything except the defaults scope from that toolchain.
|
|
forward_variables_from(_toolchain_base, "*", [ "defaults" ])
|
|
|
|
defaults = {
|
|
# Forward everything from the base toolchain's defaults.
|
|
forward_variables_from(_toolchain_base.defaults, "*")
|
|
|
|
# Extend with custom build arguments for the target.
|
|
default_configs += [
|
|
"//toolchains:common_config",
|
|
"//toolchains:enable_sanitizers",
|
|
]
|
|
}
|
|
}
|
|
|
|
_host_fuzz = {
|
|
# Use Pigweed's host_clang_debug toolchain as a base.
|
|
_toolchain_base = pw_target_toolchain_host.clang_debug
|
|
|
|
# Forward everything except the defaults scope from that toolchain.
|
|
forward_variables_from(_toolchain_base, "*", [ "defaults" ])
|
|
|
|
defaults = {
|
|
# Forward everything from the base toolchain's defaults.
|
|
forward_variables_from(_toolchain_base.defaults, "*")
|
|
|
|
# Extend with custom build arguments for the target.
|
|
default_configs += [
|
|
"//toolchains:common_config",
|
|
"//toolchains:enable_sanitizers",
|
|
"//toolchains:enable_fuzzer",
|
|
]
|
|
}
|
|
}
|
|
|
|
_host_optimized = {
|
|
# Use Pigweed's host_clang_size_optimized toolchain as a base.
|
|
_toolchain_base = pw_target_toolchain_host.clang_size_optimized
|
|
|
|
# Forward everything except the defaults scope from that toolchain.
|
|
forward_variables_from(_toolchain_base, "*", [ "defaults" ])
|
|
|
|
defaults = {
|
|
# Forward everything from the base toolchain's defaults.
|
|
forward_variables_from(_toolchain_base.defaults, "*")
|
|
|
|
# Extend with custom build arguments for the target.
|
|
default_configs += [ "//toolchains:common_config" ]
|
|
}
|
|
}
|
|
|
|
# Create the actual GN toolchains.
|
|
generate_toolchain("host_debug") {
|
|
forward_variables_from(_host_debug, "*")
|
|
}
|
|
|
|
generate_toolchain("host_fuzz") {
|
|
forward_variables_from(_host_fuzz, "*")
|
|
}
|
|
|
|
generate_toolchain("host_optimized") {
|
|
forward_variables_from(_host_optimized, "*")
|
|
}
|