| # Copyright 2020 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("//build/config/clang/clang.gni") |
| |
| declare_args() { |
| # Directory where the Clang toolchain binaries ("clang", "llvm-nm", etc.) are |
| # found. If this is "", then the behavior depends on $clang_prefix. |
| # This toolchain is expected to support both Fuchsia targets and the host. |
| clang_tool_dir = "" |
| } |
| |
| # This is a string identifying the particular toolchain version in use. Its |
| # only purpose is to be unique enough that it changes when switching to a new |
| # toolchain, so that recompilations with the new compiler can be triggered. |
| # |
| # When using the prebuilt, the CIPD instance ID of the prebuilt is perfect. |
| # When not using the prebuilt, there isn't a quick way to extract the compiler |
| # version. But at least changing the setting to a different compiler will |
| # change the string. |
| clang_version_string = "" |
| if (clang_tool_dir == "") { |
| if (clang_prefix == default_clang_prefix) { |
| _prebuilt_clang_dir = "//prebuilt/third_party/clang/$host_platform" |
| clang_tool_dir = "${_prebuilt_clang_dir}/bin" |
| _prebuilt_cipd_version = |
| read_file("$_prebuilt_clang_dir/.versions/clang.cipd_version", "json") |
| clang_version_string = _prebuilt_cipd_version.instance_id |
| } else { |
| clang_tool_dir = clang_prefix |
| } |
| } |
| |
| _clang_lib_dir = "$clang_tool_dir/../lib" |
| |
| # Human-readable identifier for the toolchain version. |
| # |
| # clang_version_string is useful for Fuchsia standard prebuilts, since it's |
| # the CIPD instance ID that can be looked up to find the compiler build. |
| # clang_version_description is something that can lead a human to find the |
| # specific toolchain, such as a source repository URL and revision identifier. |
| # |
| # TODO(mcgrathr): Make this the same repo/revision info from `clang --version`. |
| # e.g., clang_version_description = read_file("$_clang_lib_dir/VERSION") |
| clang_version_description = "" |
| |
| # This file is provided by the toolchain to describe the runtime |
| # dependencies implied by linking a binary based on --target and other |
| # compiler switches. The file contains a JSON array of objects that map to |
| # the following GN schema. Each entry matches a single compilation mode |
| # and yields all the runtime dependencies implied by that mode. |
| # |
| # Type: list(scope) |
| # |
| # target |
| # Required: --target tuple a la ${current_target_tuple} |
| # Type: string |
| # |
| # cflags |
| # Optional: List of compilation flags that select this mode, |
| # e.g. "-fsanitizer=..." and the like. |
| # Type: list(string) |
| # Default: [] |
| # |
| # ldflags |
| # Optional: Link-time flags that select this mode. |
| # This is either [ "-static-libstdc++" ] or []. |
| # Type: list(string) |
| # Default: [] |
| # |
| # runtime |
| # Required: List of runtime files needed by binaries in this mode. |
| # Type: list(scope) |
| # |
| # soname |
| # Required: `DT_SONAME` string in the ELF shared library. |
| # Type: string |
| # |
| # dist |
| # Required: File to load to satisfy $soname `DT_NEEDED` entries. |
| # Type: path relative to JSON file's directory |
| # |
| # debug |
| # Optional: Unstripped or separate debug file matching $dist. |
| # Type: path relative to JSON file's directory |
| # |
| _clang_runtime_file = "$_clang_lib_dir/runtime.json" |
| clang_runtime = read_file(_clang_runtime_file, "json") |
| |
| # This is the prefix of labels generated for targets to generate Breakpad |
| # symbols for toolchain-provided debug files. |
| clang_runtime_breakpad_syms_label = |
| "//build/toolchain/zircon/toolchain:_clang.breakpad." |
| |
| # This is where those files go. |
| clang_runtime_breakpad_syms_dir = |
| get_label_info("$clang_runtime_breakpad_syms_label($default_toolchain)", |
| "target_out_dir") + "/clang-runtime.sym" |
| |
| # TODO(digit): toolchain_runtime_deps() |
| |