| # This build configuration extends GN's cross-compilation concepts of "target", |
| # "host" and "current" with "arch" which is used to refer to the embedded |
| # architecture that the bare metal images are being built for. |
| # |
| # The concepts of "target", "host" and "current" are used when bulding tests |
| # and utilities for the non-embedded device. Note that there hasn't been any |
| # thought given to support building for anything other than the host so it |
| # probably won't work. |
| # |
| # In summary: |
| # - host{_os,_cpu,_toolchain} is for the system running the build |
| # - target{_os,_cpu,_toolchain} is for the system that will run utilities and tests |
| # - arch{,_toolchain} is for the embedded system that will run the bare metal images |
| |
| # Configuration of the build toolchain. |
| declare_args() { |
| # Enable extra debugging. |
| is_debug = true |
| |
| # Set to true to build with gcc (default is clang). |
| use_gcc = false |
| |
| # The architecture to build the bare metal images for. |
| arch = "" |
| |
| # Set by arch toolchain. Prefix for binutils tools. |
| arch_tool_prefix = "" |
| } |
| |
| # Check that we support the attempted build |
| assert(host_os == "linux", "Only linux builds are currently supported") |
| |
| # Check that the requested architecture is supported |
| assert(arch == "aarch64" || arch == "mock", "Unsupported arch: $arch") |
| |
| # Setup the standard variables |
| if (target_os == "") { |
| target_os = host_os |
| } |
| if (target_cpu == "") { |
| target_cpu = host_cpu |
| } |
| if (current_os == "") { |
| current_os = target_os |
| } |
| if (current_cpu == "") { |
| current_cpu = target_cpu |
| } |
| |
| assert(target_os == host_os, "Cross compiles not yet supported") |
| assert(target_cpu == host_cpu, "Cross compiles not yet supported") |
| |
| # All binary targets will get this list of configs by default |
| _shared_binary_target_configs = [ |
| "//build:compiler_defaults", |
| "//build:sections", |
| "//build:lto", |
| ] |
| |
| # Apply that default list to the binary target types. |
| set_defaults("executable") { |
| configs = _shared_binary_target_configs |
| # Executables get this additional configuration |
| configs += [ "//build:executable_ldconfig" ] |
| } |
| set_defaults("static_library") { |
| configs = _shared_binary_target_configs |
| } |
| set_defaults("shared_library") { |
| configs = _shared_binary_target_configs |
| } |
| set_defaults("source_set") { |
| configs = _shared_binary_target_configs |
| } |
| |
| # Select host, target and arch toolchains |
| if (use_gcc) { |
| host_toolchain = "//build/toolchain/host:gcc" |
| target_toolchain = "//build/toolchain/host:gcc" |
| mock_toolchain = "//build/toolchain/host:gcc_mock_arch" |
| arch_toolchain = "//build/toolchain/arch:gcc_${arch}" |
| } else { |
| host_toolchain = "//build/toolchain/host:clang" |
| target_toolchain = "//build/toolchain/host:clang" |
| mock_toolchain = "//build/toolchain/host:clang_mock_arch" |
| arch_toolchain = "//build/toolchain/arch:clang_${arch}" |
| } |
| |
| # The default toolchain is the target toolchain for building utilities and tests |
| set_default_toolchain(target_toolchain) |