# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Define the sysroot directory.
sysroot = "$root_out_dir/sysroot"
sysroot_lib_dir = "${sysroot}/usr/lib"
sysroot_include_dir = "${sysroot}/usr/include"

config("fusl_config") {
  cflags = [
    # Flags from musl
    "-std=c99",
    "-ffreestanding",
    "-nostdinc",

    "-D_XOPEN_SOURCE=700",

    "-Wa,--noexecstack",

    "-fomit-frame-pointer",
    "-fno-unwind-tables",
    "-fno-asynchronous-unwind-tables",
    "-ffunction-sections",
    "-fdata-sections",
    "-Werror=implicit-function-declaration",
    "-Werror=implicit-int",
    "-Werror=pointer-sign",
    "-Werror=pointer-arith",
  ]

  include_dirs = []

  # Arch specific includes, these need to come before the general includes.
  if (current_cpu == "x64") {
    include_dirs += [ "arch/x86_64" ]
  }

  # General includes, these need to come after the arch specific includes.
  # src/internal must come before include.
  include_dirs += [
    "src/internal",
    "include",
  ]
}

config("fusl_no_stack_protector_config") {
  cflags = [ "-fno-stack-protector" ]
}

static_library("libc") {
  configs = []
  configs += [ ":fusl_config" ]

  complete_static_lib = true

  deps = [
    "src/aio",
    "src/complex",
    "src/conf",
    "src/crypt",
    "src/ctype",
    "src/dirent",
    "src/env",
    "src/errno",
    "src/exit",
    "src/fcntl",
    "src/fenv",
    "src/internal",
    "src/ipc",
    "src/ldso",
    "src/legacy",
    "src/linux",
    "src/locale",
    "src/malloc",
    "src/math",
    "src/misc",
    "src/mman",
    "src/mq",
    "src/multibyte",
    "src/network",
    "src/passwd",
    "src/prng",
    "src/process",
    "src/regex",
    "src/sched",
    "src/search",
    "src/select",
    "src/setjmp",
    "src/signal",
    "src/stat",
    "src/stdio",
    "src/stdlib",
    "src/string",
    "src/temp",
    "src/termios",
    "src/thread",
    "src/time",
    "src/unistd",
  ]
}

# For simplicity, musl places all its symbols in libc. To support
# linking against e.g. libm, either implicitly or with an explicit -lm
# flag, we build empty libraries.
static_library("libm") {
  complete_static_lib = true
}

copy("copy_include") {
  sources = [
    "include",
  ]
  outputs = [
    "${sysroot_include_dir}",
  ]
}

copy("copy_include_bits") {
  deps = [
    ":copy_include",
  ]
  if (current_cpu == "x64") {
    sources = [
      "arch/x86_64/bits",
    ]
  }
  outputs = [
    "${sysroot_include_dir}/{{source_name_part}}",
  ]
}

copy("copy_libs") {
  deps = [
    ":libc",
    ":libm",
  ]
  sources = [
    "${target_out_dir}/libc.a",
    "${target_out_dir}/libm.a",
  ]
  outputs = [
    "${sysroot_lib_dir}/{{source_name_part}}.a",
  ]
}

group("copy_sysroot") {
  deps = [
    ":copy_include",
    ":copy_include_bits",
    ":copy_libs",
    "crt:copy_crt_objects",
  ]
}

config("sysroot_config") {
  rebased_sysroot = rebase_path(sysroot)

  cflags = [
    "--sysroot=$rebased_sysroot",
    "-fPIC",
    "-static",
  ]

  ldflags = [
    "--sysroot=$rebased_sysroot",
    "-static",
  ]
}

executable("empty_main") {
  configs = []
  configs += [ ":sysroot_config" ]

  sources = [
    "test/empty_main.c",
  ]

  deps = [
    ":copy_sysroot",
  ]
}

group("fusl") {
  deps = [
    ":empty_main(//build/toolchain/fusl:fusl_$current_cpu)",
    ":libc(//build/toolchain/fusl:fusl_$current_cpu)",
    "crt(//build/toolchain/fusl:fusl_$current_cpu)",
  ]
}
