# 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, "*") }