| # Copyright 2020 The Fuchsia Authors |
| # |
| # Use of this source code is governed by a MIT-style |
| # license that can be found in the LICENSE file or at |
| # https://opensource.org/licenses/MIT |
| |
| import("//build/config/zircon/standard.gni") |
| import("//build/toolchain/zircon/zircon_toolchain_suite.gni") |
| import("//build/unification/global_variables.gni") |
| import("//zircon/kernel/arch/$zircon_cpu/phys/phys.gni") |
| import("zbi_executable.gni") |
| |
| if (current_toolchain == default_toolchain) { |
| # Default toolchain (current_cpu == "") just defines the phys environment. |
| # Note: see //zircon/kernel/arch/x86/phys:kernel.phys32 too. |
| foreach(cpu, standard_fuchsia_cpus) { |
| kernel_cpu = cpu |
| if (kernel_cpu == "x64") { |
| kernel_cpu = "x86" |
| } |
| |
| zircon_toolchain_suite("kernel.phys_$cpu") { |
| cpu = cpu |
| os = "fuchsia" |
| environment = "kernel.phys" |
| with_shared = false |
| |
| toolchain_tags = [ "kernel" ] |
| |
| configs = [ "//zircon/kernel/phys:phys_config" ] + phys_configs |
| |
| # Always enable frame pointers. This works because frame_pointers |
| # is added as part of :phys_config below. |
| remove_common_configs = [ "//build/config/zircon:default_frame_pointers" ] |
| |
| exclude_variant_tags = [ |
| # There is no possibility of fancy runtimes like ASan for phys. |
| "instrumentation-runtime", |
| |
| # TOOD(51994): Remove this when profile is supported. |
| "instrumented", |
| ] |
| |
| # Append the arch-specific lists. The phys/phys.gni file in each |
| # arch subdirectory defines phys_* lists to append to the parameters. |
| toolchain_tags += phys_tags |
| exclude_variant_tags += phys_exclude_variant_tags |
| } |
| } |
| } else if (toolchain.environment == "kernel.phys") { |
| kernel_cpu = current_cpu |
| if (current_cpu == "x64") { |
| kernel_cpu = "x86" |
| } |
| |
| config("phys_config") { |
| configs = [ |
| "//zircon/kernel:standalone", |
| "//zircon/kernel:warnings", |
| "//zircon/kernel/arch/$kernel_cpu:abi", |
| ":defines", |
| |
| # Don't emit extra code making static initializers thread-safe (we don't |
| # have threads or any of the corresponding library support.) |
| "//build/config/zircon:no_threadsafe_statics", |
| |
| # All physmem code is inherently sensitive and in a position for |
| # any bug to be unusually dangerous. So compile with minimal |
| # undefined behavior checking in all builds, regardless of variant. |
| "//build/config/zircon/instrumentation:ubsan-trap", |
| ] |
| |
| # Always enable frame pointers. |
| configs += [ "//build/config/zircon:frame_pointers" ] |
| |
| include_dirs = [ "include" ] |
| } |
| |
| group("phys_config_deps") { |
| } |
| } |
| |
| if (toolchain.environment == "kernel.phys" || |
| toolchain.environment == "kernel.phys32") { |
| # All the code gets built here in the phys environment. |
| |
| config("defines") { |
| # Always enable tests and asserts in phys code. |
| defines = [ "LK_DEBUGLEVEL=2" ] |
| } |
| |
| config("includes") { |
| include_dirs = [ "include" ] |
| } |
| |
| source_set("symbolize") { |
| public = [ |
| "include/phys/frame-pointer.h", |
| "include/phys/stack.h", |
| "include/phys/symbolize.h", |
| ] |
| |
| sources = [ |
| "frame-pointer.cc", |
| "panic.cc", |
| "stack.cc", |
| "symbolize.cc", |
| ] |
| |
| deps = [ |
| "//zircon/kernel/arch/$zircon_cpu/phys", |
| "//zircon/kernel/lib/ktl", |
| "//zircon/kernel/lib/libc", |
| ] |
| |
| public_deps = [ |
| # "symbolize.h" has #include <phys/main.h>. |
| ":main", |
| ] |
| |
| public_configs = [ ":includes" ] |
| } |
| |
| # This is used implicitly by phys_executable() targets, |
| # including zbi_executable() targets. |
| source_set("phys_executable.deps") { |
| deps = [ ":symbolize" ] |
| } |
| |
| # This is used implicitly by zbi_executable() targets. |
| source_set("zbi_executable.deps") { |
| sources = [ |
| "zbi-header.S", |
| "zbi-main.cc", |
| ] |
| deps = [ |
| ":arch-header", |
| ":main", |
| ":zbi-memory", |
| "//zircon/kernel/arch/$zircon_cpu/phys", |
| "//zircon/kernel/lib/arch", |
| "//zircon/kernel/lib/boot-options", |
| "//zircon/system/ulib/uart", |
| "//zircon/system/ulib/zbitl", |
| ] |
| public_configs = |
| [ "//zircon/kernel/arch/$zircon_cpu/phys:zbi_executable.config" ] |
| } |
| |
| # Transitive dependencies for the <phys/main.h> header. |
| source_set("main") { |
| public = [ "include/phys/main.h" ] |
| |
| public_configs = [ ":includes" ] |
| |
| public_deps = [ |
| # "main.h" has #include <lib/arch/ticks.h>. |
| "//zircon/kernel/lib/arch", |
| ] |
| |
| # If the toolchain is compiling a PIE executable, include required libraries. |
| if (toolchain.tags + [ "static-pie" ] - [ "static-pie" ] != |
| toolchain.tags) { |
| public_deps += [ |
| # "main.h" has #include <lib/static-pie/static-pie.h> |
| "//zircon/system/ulib/static-pie", |
| ] |
| } |
| } |
| |
| # Transitive dependencies for the <phys/arch.h> header. |
| source_set("arch-header") { |
| public = [ "include/phys/arch.h" ] |
| |
| public_configs = [ ":includes" ] |
| |
| public_deps = [ |
| "//zircon/kernel/lib/libc", |
| "//zircon/kernel/phys/lib/memalloc", |
| "//zircon/system/ulib/zbitl", |
| ] |
| } |
| |
| # This is linked into the special-case phys_executable() tests that |
| # are run directly as QEMU kernels. |
| source_set("qemu-header") { |
| sources = [ "qemu-header.S" ] |
| public_configs = [ "//zircon/kernel/arch/$zircon_cpu/phys:qemu.config" ] |
| } |
| |
| source_set("allocation") { |
| public = [ "include/phys/allocation.h" ] |
| sources = [ "allocation.cc" ] |
| deps = [ |
| ":main", |
| "//zircon/kernel/phys/lib/memalloc", |
| ] |
| public_deps = [ |
| "//zircon/kernel/lib/ktl", |
| "//zircon/kernel/lib/libc", |
| |
| # allocation.h has #include <fbl/alloc_checker.h>. |
| "//zircon/system/ulib/fbl", |
| |
| # allocation.h has #include <lib/fitx/result.h>. |
| "//zircon/system/ulib/zxc", |
| ] |
| public_configs = [ ":includes" ] |
| } |
| |
| source_set("zbitl-allocation") { |
| public = [ "include/phys/zbitl-allocation.h" ] |
| sources = [ "zbitl-allocation.cc" ] |
| deps = [ |
| ":allocation", |
| "//zircon/system/ulib/fbl", |
| ] |
| public_deps = [ |
| "//zircon/kernel/lib/ktl", |
| "//zircon/kernel/lib/libc", |
| |
| # zbitl-allocation.h has #include <lib/fitx/result.h>. |
| "//zircon/system/ulib/zxc", |
| ] |
| public_configs = [ ":includes" ] |
| } |
| |
| # This is a little library instead of a source_set() so it can be included |
| # implicitly by zbi_executable() without adding bloat to the tiny tests that |
| # don't use it. |
| static_library("zbi-memory") { |
| sources = [ "zbi-memory.cc" ] |
| deps = [ |
| ":allocation", |
| ":arch-header", |
| ":main", |
| "//zircon/kernel/arch/$zircon_cpu/phys:address-space", |
| "//zircon/kernel/lib/arch", |
| "//zircon/kernel/phys/lib/memalloc", |
| "//zircon/kernel/phys/lib/page-table", |
| "//zircon/system/ulib/zbitl", |
| ] |
| public_deps = [ |
| "//zircon/kernel/lib/ktl", |
| "//zircon/kernel/lib/libc", |
| |
| # allocation.h has #include <fbl/alloc_checker.h>. |
| "//zircon/system/ulib/fbl", |
| ] |
| } |
| |
| source_set("boot-zbi") { |
| public = [ "include/phys/boot-zbi.h" ] |
| sources = [ "boot-zbi.cc" ] |
| deps = [ "//zircon/kernel/lib/arch" ] |
| public_deps = [ |
| ":allocation", |
| "//zircon/kernel/lib/ktl", |
| "//zircon/kernel/lib/libc", |
| "//zircon/system/ulib/zbitl", |
| "//zircon/system/ulib/zxc", |
| ] |
| } |
| } |
| |
| group("tests") { |
| testonly = true |
| deps = [ |
| "boot-shim:tests", |
| "lib:tests", |
| "test", |
| ] |
| } |
| |
| zbi_executable("physboot") { |
| sources = [ "physboot.cc" ] |
| deps = [ |
| ":allocation", |
| ":boot-zbi", |
| ":main", |
| ":symbolize", |
| ":zbitl-allocation", |
| "//zircon/kernel/lib/arch", |
| "//zircon/kernel/lib/boot-options", |
| "//zircon/kernel/lib/ktl", |
| "//zircon/kernel/lib/libc", |
| "//zircon/system/ulib/pretty", |
| "//zircon/system/ulib/zbitl", |
| ] |
| } |