1*60b67249SAndroid Build Coastguard Worker# Copyright 2020 Google LLC 2*60b67249SAndroid Build Coastguard Worker# 3*60b67249SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not 4*60b67249SAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of 5*60b67249SAndroid Build Coastguard Worker# the License at 6*60b67249SAndroid Build Coastguard Worker# 7*60b67249SAndroid Build Coastguard Worker# https://www.apache.org/licenses/LICENSE-2.0 8*60b67249SAndroid Build Coastguard Worker# 9*60b67249SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*60b67249SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11*60b67249SAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12*60b67249SAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under 13*60b67249SAndroid Build Coastguard Worker# the License. 14*60b67249SAndroid Build Coastguard Worker 15*60b67249SAndroid Build Coastguard Workerimport("//build_overrides/pigweed.gni") 16*60b67249SAndroid Build Coastguard Workerimport("$dir_pigweed/targets/host/target_toolchains.gni") 17*60b67249SAndroid Build Coastguard Workerimport("$dir_pw_toolchain/generate_toolchain.gni") 18*60b67249SAndroid Build Coastguard Worker 19*60b67249SAndroid Build Coastguard Workerconfig("common_config") { 20*60b67249SAndroid Build Coastguard Worker include_dirs = [ "//include" ] 21*60b67249SAndroid Build Coastguard Worker 22*60b67249SAndroid Build Coastguard Worker # No language extensions, to promote portability. 23*60b67249SAndroid Build Coastguard Worker cflags_c = [ 24*60b67249SAndroid Build Coastguard Worker "-Wvla", 25*60b67249SAndroid Build Coastguard Worker "-std=c99", 26*60b67249SAndroid Build Coastguard Worker "-pedantic", 27*60b67249SAndroid Build Coastguard Worker ] 28*60b67249SAndroid Build Coastguard Worker 29*60b67249SAndroid Build Coastguard Worker # Modern C++ for test and tooling. 30*60b67249SAndroid Build Coastguard Worker cflags_cc = [ "-std=c++20" ] 31*60b67249SAndroid Build Coastguard Worker} 32*60b67249SAndroid Build Coastguard Worker 33*60b67249SAndroid Build Coastguard Workerconfig("enable_sanitizers") { 34*60b67249SAndroid Build Coastguard Worker filter_path = rebase_path("sanitize_filter.txt", root_build_dir) 35*60b67249SAndroid Build Coastguard Worker cflags = [ 36*60b67249SAndroid Build Coastguard Worker "-fsanitize=address,undefined,integer", 37*60b67249SAndroid Build Coastguard Worker "-fsanitize-blacklist=$filter_path", # inclusive-language: ignore 38*60b67249SAndroid Build Coastguard Worker ] 39*60b67249SAndroid Build Coastguard Worker ldflags = cflags 40*60b67249SAndroid Build Coastguard Worker inputs = [ "sanitize_filter.txt" ] 41*60b67249SAndroid Build Coastguard Worker} 42*60b67249SAndroid Build Coastguard Worker 43*60b67249SAndroid Build Coastguard Workerconfig("enable_fuzzer") { 44*60b67249SAndroid Build Coastguard Worker cflags = [ 45*60b67249SAndroid Build Coastguard Worker "-fsanitize=fuzzer", 46*60b67249SAndroid Build Coastguard Worker "-O1", 47*60b67249SAndroid Build Coastguard Worker "-fno-omit-frame-pointer", 48*60b67249SAndroid Build Coastguard Worker "-fno-optimize-sibling-calls", 49*60b67249SAndroid Build Coastguard Worker ] 50*60b67249SAndroid Build Coastguard Worker ldflags = cflags 51*60b67249SAndroid Build Coastguard Worker} 52*60b67249SAndroid Build Coastguard Worker 53*60b67249SAndroid Build Coastguard Worker# Define a scope for each toolchain that can be fed into generate_toolchain. 54*60b67249SAndroid Build Coastguard Worker_host_debug = { 55*60b67249SAndroid Build Coastguard Worker # Use Pigweed's host_clang_debug toolchain as a base. 56*60b67249SAndroid Build Coastguard Worker _toolchain_base = pw_target_toolchain_host.clang_debug 57*60b67249SAndroid Build Coastguard Worker 58*60b67249SAndroid Build Coastguard Worker # Forward everything except the defaults scope from that toolchain. 59*60b67249SAndroid Build Coastguard Worker forward_variables_from(_toolchain_base, "*", [ "defaults" ]) 60*60b67249SAndroid Build Coastguard Worker 61*60b67249SAndroid Build Coastguard Worker defaults = { 62*60b67249SAndroid Build Coastguard Worker # Forward everything from the base toolchain's defaults. 63*60b67249SAndroid Build Coastguard Worker forward_variables_from(_toolchain_base.defaults, "*") 64*60b67249SAndroid Build Coastguard Worker 65*60b67249SAndroid Build Coastguard Worker # Extend with custom build arguments for the target. 66*60b67249SAndroid Build Coastguard Worker default_configs += [ 67*60b67249SAndroid Build Coastguard Worker "//toolchains:common_config", 68*60b67249SAndroid Build Coastguard Worker "//toolchains:enable_sanitizers", 69*60b67249SAndroid Build Coastguard Worker ] 70*60b67249SAndroid Build Coastguard Worker } 71*60b67249SAndroid Build Coastguard Worker} 72*60b67249SAndroid Build Coastguard Worker 73*60b67249SAndroid Build Coastguard Worker_host_fuzz = { 74*60b67249SAndroid Build Coastguard Worker # Use Pigweed's host_clang_debug toolchain as a base. 75*60b67249SAndroid Build Coastguard Worker _toolchain_base = pw_target_toolchain_host.clang_debug 76*60b67249SAndroid Build Coastguard Worker 77*60b67249SAndroid Build Coastguard Worker # Forward everything except the defaults scope from that toolchain. 78*60b67249SAndroid Build Coastguard Worker forward_variables_from(_toolchain_base, "*", [ "defaults" ]) 79*60b67249SAndroid Build Coastguard Worker 80*60b67249SAndroid Build Coastguard Worker defaults = { 81*60b67249SAndroid Build Coastguard Worker # Forward everything from the base toolchain's defaults. 82*60b67249SAndroid Build Coastguard Worker forward_variables_from(_toolchain_base.defaults, "*") 83*60b67249SAndroid Build Coastguard Worker 84*60b67249SAndroid Build Coastguard Worker # Extend with custom build arguments for the target. 85*60b67249SAndroid Build Coastguard Worker default_configs += [ 86*60b67249SAndroid Build Coastguard Worker "//toolchains:common_config", 87*60b67249SAndroid Build Coastguard Worker "//toolchains:enable_sanitizers", 88*60b67249SAndroid Build Coastguard Worker "//toolchains:enable_fuzzer", 89*60b67249SAndroid Build Coastguard Worker ] 90*60b67249SAndroid Build Coastguard Worker } 91*60b67249SAndroid Build Coastguard Worker} 92*60b67249SAndroid Build Coastguard Worker 93*60b67249SAndroid Build Coastguard Worker_host_optimized = { 94*60b67249SAndroid Build Coastguard Worker # Use Pigweed's host_clang_size_optimized toolchain as a base. 95*60b67249SAndroid Build Coastguard Worker _toolchain_base = pw_target_toolchain_host.clang_size_optimized 96*60b67249SAndroid Build Coastguard Worker 97*60b67249SAndroid Build Coastguard Worker # Forward everything except the defaults scope from that toolchain. 98*60b67249SAndroid Build Coastguard Worker forward_variables_from(_toolchain_base, "*", [ "defaults" ]) 99*60b67249SAndroid Build Coastguard Worker 100*60b67249SAndroid Build Coastguard Worker defaults = { 101*60b67249SAndroid Build Coastguard Worker # Forward everything from the base toolchain's defaults. 102*60b67249SAndroid Build Coastguard Worker forward_variables_from(_toolchain_base.defaults, "*") 103*60b67249SAndroid Build Coastguard Worker 104*60b67249SAndroid Build Coastguard Worker # Extend with custom build arguments for the target. 105*60b67249SAndroid Build Coastguard Worker default_configs += [ "//toolchains:common_config" ] 106*60b67249SAndroid Build Coastguard Worker } 107*60b67249SAndroid Build Coastguard Worker} 108*60b67249SAndroid Build Coastguard Worker 109*60b67249SAndroid Build Coastguard Worker# Create the actual GN toolchains. 110*60b67249SAndroid Build Coastguard Workergenerate_toolchain("host_debug") { 111*60b67249SAndroid Build Coastguard Worker forward_variables_from(_host_debug, "*") 112*60b67249SAndroid Build Coastguard Worker} 113*60b67249SAndroid Build Coastguard Worker 114*60b67249SAndroid Build Coastguard Workergenerate_toolchain("host_fuzz") { 115*60b67249SAndroid Build Coastguard Worker forward_variables_from(_host_fuzz, "*") 116*60b67249SAndroid Build Coastguard Worker} 117*60b67249SAndroid Build Coastguard Worker 118*60b67249SAndroid Build Coastguard Workergenerate_toolchain("host_optimized") { 119*60b67249SAndroid Build Coastguard Worker forward_variables_from(_host_optimized, "*") 120*60b67249SAndroid Build Coastguard Worker} 121