| # Copyright 2020 The Pigweed Authors |
| # |
| # 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_pw_toolchain/clang_tools.gni") |
| |
| declare_args() { |
| # Sets the sanitizer to pass to clang. Valid values are "address", "memory", |
| # "thread", "undefined". |
| pw_toolchain_SANITIZERS = [] |
| |
| # Indicates if this build is a part of OSS-Fuzz, which needs to be able to |
| # provide its own compiler and flags. This violates the build hermeticisim and |
| # should only be used for OSS-Fuzz. |
| pw_toolchain_OSS_FUZZ_ENABLED = false |
| } |
| |
| # Specifies the tools used by host Clang toolchains. |
| _host_clang_toolchain = { |
| if (pw_toolchain_OSS_FUZZ_ENABLED) { |
| # Just use the "llvm-ar" on the system path. |
| ar = "llvm-ar" |
| cc = getenv("CC") |
| cxx = getenv("CXX") |
| } else { |
| forward_variables_from(pw_toolchain_clang_tools, "*") |
| } |
| |
| is_host_toolchain = true |
| |
| # Enable static analysis for host clang based toolchains, |
| # even with OSS-Fuzz enabled. |
| static_analysis = true |
| } |
| |
| # Common default scope shared by all host Clang toolchains. |
| _defaults = { |
| # TODO(b/234888755) amend toolchain declaration process to |
| # remove this hack. |
| default_configs = [] |
| default_configs = [ |
| "$dir_pw_build:extra_debugging", |
| "$dir_pw_toolchain/host_clang:no_system_libcpp", |
| "$dir_pw_toolchain/host_clang:xcode_sysroot", |
| ] |
| |
| # OSS-Fuzz uses -stdlib=libc++, which isn't included in the CIPD-provided |
| # Linux sysroot (it instead provides libstdc++). |
| if (!pw_toolchain_OSS_FUZZ_ENABLED) { |
| default_configs += [ "$dir_pw_toolchain/host_clang:linux_sysroot" ] |
| } |
| } |
| |
| pw_toolchain_host_clang = { |
| debug = { |
| name = "host_clang_debug" |
| forward_variables_from(_host_clang_toolchain, "*") |
| defaults = { |
| forward_variables_from(_defaults, "*") |
| default_configs += [ "$dir_pw_build:optimize_debugging" ] |
| foreach(sanitizer, pw_toolchain_SANITIZERS) { |
| default_configs += |
| [ "$dir_pw_toolchain/host_clang:sanitize_$sanitizer" ] |
| } |
| } |
| } |
| |
| speed_optimized = { |
| name = "host_clang_speed_optimized" |
| forward_variables_from(_host_clang_toolchain, "*") |
| defaults = { |
| forward_variables_from(_defaults, "*") |
| default_configs += [ "$dir_pw_build:optimize_speed" ] |
| foreach(sanitizer, pw_toolchain_SANITIZERS) { |
| default_configs += |
| [ "$dir_pw_toolchain/host_clang:sanitize_$sanitizer" ] |
| } |
| } |
| } |
| |
| size_optimized = { |
| name = "host_clang_size_optimized" |
| forward_variables_from(_host_clang_toolchain, "*") |
| defaults = { |
| forward_variables_from(_defaults, "*") |
| default_configs += [ "$dir_pw_build:optimize_size_clang" ] |
| foreach(sanitizer, pw_toolchain_SANITIZERS) { |
| default_configs += |
| [ "$dir_pw_toolchain/host_clang:sanitize_$sanitizer" ] |
| } |
| } |
| } |
| |
| fuzz = { |
| name = "host_clang_fuzz" |
| forward_variables_from(_host_clang_toolchain, "*") |
| defaults = { |
| forward_variables_from(_defaults, "*") |
| |
| # Fuzz faster. |
| default_configs += [ "$dir_pw_build:optimize_speed" ] |
| |
| if (pw_toolchain_SANITIZERS == []) { |
| # Default to ASan for fuzzing, which is what we typically care about. |
| pw_toolchain_SANITIZERS = [ "address" ] |
| } |
| foreach(sanitizer, pw_toolchain_SANITIZERS) { |
| default_configs += |
| [ "$dir_pw_toolchain/host_clang:sanitize_$sanitizer" ] |
| } |
| |
| if (pw_toolchain_OSS_FUZZ_ENABLED) { |
| default_configs += [ "$dir_pw_fuzzer:oss_fuzz_extra" ] |
| } |
| } |
| } |
| |
| asan = { |
| name = "host_clang_asan" |
| forward_variables_from(_host_clang_toolchain, "*") |
| defaults = { |
| forward_variables_from(_defaults, "*") |
| |
| # Use debug mode to get proper debug information. |
| default_configs += [ "$dir_pw_build:optimize_debugging" ] |
| default_configs += [ "$dir_pw_toolchain/host_clang:sanitize_address" ] |
| } |
| } |
| |
| ubsan = { |
| name = "host_clang_ubsan" |
| forward_variables_from(_host_clang_toolchain, "*") |
| defaults = { |
| forward_variables_from(_defaults, "*") |
| |
| # Use debug mode to get proper debug information. |
| default_configs += [ "$dir_pw_build:optimize_debugging" ] |
| default_configs += [ "$dir_pw_toolchain/host_clang:sanitize_undefined" ] |
| } |
| } |
| |
| ubsan_heuristic = { |
| name = "host_clang_ubsan_heuristic" |
| forward_variables_from(_host_clang_toolchain, "*") |
| defaults = { |
| forward_variables_from(_defaults, "*") |
| |
| # Use debug mode to get proper debug information. |
| default_configs += [ "$dir_pw_build:optimize_debugging" ] |
| default_configs += |
| [ "$dir_pw_toolchain/host_clang:sanitize_undefined_heuristic" ] |
| } |
| } |
| |
| msan = { |
| name = "host_clang_msan" |
| forward_variables_from(_host_clang_toolchain, "*") |
| defaults = { |
| forward_variables_from(_defaults, "*") |
| |
| # Use debug mode to get proper debug information. |
| default_configs += [ "$dir_pw_build:optimize_debugging" ] |
| default_configs += [ "$dir_pw_toolchain/host_clang:sanitize_memory" ] |
| } |
| } |
| |
| tsan = { |
| name = "host_clang_tsan" |
| forward_variables_from(_host_clang_toolchain, "*") |
| defaults = { |
| forward_variables_from(_defaults, "*") |
| |
| # Use debug mode to get proper debug information. |
| default_configs += [ "$dir_pw_build:optimize_debugging" ] |
| default_configs += [ "$dir_pw_toolchain/host_clang:sanitize_thread" ] |
| } |
| } |
| } |
| |
| # Describes host clang toolchains. |
| pw_toolchain_host_clang_list = [ |
| pw_toolchain_host_clang.debug, |
| pw_toolchain_host_clang.speed_optimized, |
| pw_toolchain_host_clang.size_optimized, |
| pw_toolchain_host_clang.fuzz, |
| pw_toolchain_host_clang.asan, |
| pw_toolchain_host_clang.ubsan, |
| pw_toolchain_host_clang.ubsan_heuristic, |
| pw_toolchain_host_clang.msan, |
| pw_toolchain_host_clang.tsan, |
| ] |