Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(28)

Unified Diff: fusl/BUILD.gn

Issue 1649133002: Start to fusl toolchain (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « build/toolchain/fusl/BUILD.gn ('k') | fusl/test/empty_main.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: fusl/BUILD.gn
diff --git a/fusl/BUILD.gn b/fusl/BUILD.gn
index a352bcbc19e88b8e6c358b7889dbe09ab84f0390..268f30f8b018d803974e7ce34fece1463b8242a5 100644
--- a/fusl/BUILD.gn
+++ b/fusl/BUILD.gn
@@ -2,6 +2,9 @@
# 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"
+
config("fusl_config") {
cflags = [
# Flags from musl
@@ -39,6 +42,8 @@ config("fusl_config") {
]
}
+# See the discussion below about what these files are, and their
+# relationship to other C runtime files.
source_set("crt") {
cflags = []
@@ -1467,10 +1472,12 @@ static_library("libc") {
deps += [ ":libc_${current_cpu}" ]
}
-# Build a sysroot.
-sysroot = "${target_out_dir}/sysroot/"
-sysroot_lib_dir = "${sysroot}/usr/lib"
-sysroot_include_dir = "${sysroot}/usr/include"
+# 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
+}
template("copy_objects") {
assert(defined(invoker.input_dir), "input_dir must be defined")
@@ -1504,6 +1511,9 @@ template("copy_objects") {
}
}
+sysroot_lib_dir = "${sysroot}/usr/lib"
+sysroot_include_dir = "${sysroot}/usr/include"
+
copy_objects("copy_crt_objects") {
sources = [
"Scrt1.o",
@@ -1548,34 +1558,126 @@ copy("copy_include_bits") {
]
}
-copy("copy_libc") {
+copy("copy_libs") {
deps = [
":libc",
+ ":libm",
]
sources = [
"${target_out_dir}/libc.a",
+ "${target_out_dir}/libm.a",
]
outputs = [
- "${sysroot_lib_dir}/libc.a",
+ "${sysroot_lib_dir}/{{source_name_part}}.a",
]
}
-group("sysroot") {
+group("copy_sysroot") {
deps = [
":copy_crt_objects",
":copy_include",
":copy_include_bits",
- ":copy_libc",
+ ":copy_libs",
]
if (current_cpu == "x64") {
deps += [ ":copy_crt_x64_objects" ]
}
}
+# The crtXXX.o files that are copied elsewhere in this file define
+# _start, and the machinery to implement calling into the init and
+# fini sections. These things are libc dependent and hence part of
+# libc.
+#
+# Unlike the other crtXXX.o files, crtbegin and crtend, are provided
+# by the toolchain, not the libc. So we steal them from the host.
+#
+# crtbegin and crtend know how to call constructors and destructors.
+#
+# libgcc provides runtime support, and so also comes from the
+# compiler. Things in here are stack unwinding, arithmetic not
+# supported on the target architecture, and so on.
+#
+# The best document I am aware of describing the different variants of
+# these files (and crtXXX.o above) is
+# https://dev.gentoo.org/~vapier/crt.txt
+#
+# S and _s mean shared or PIE
+# T and _eh mean static
+action("finish_sysroot") {
+ script = "tools/populate_crt.py"
+
+ clang = "//third_party/llvm-build/Release+Asserts/bin/clang"
+ target = "$sysroot/usr/lib"
+
+ files = [
+ "crtbegin.o",
+ "crtbeginS.o",
+ "crtbeginT.o",
+ "crtend.o",
+ "crtendS.o",
+
+ "libgcc.a",
+ "libgcc_eh.a",
+ "libgcc_s.so",
+ ]
+
+ args = [
+ rebase_path(clang),
+ rebase_path(target),
+ ]
+ args += files
+
+ outputs = [
+ "$target/crtbegin.o",
+ "$target/crtbeginSo.o",
+ "$target/crtbeginT.o",
+ "$target/crtend.o",
+ "$target/crtendS.o",
+
+ "$target/libgcc.a",
+ "$target/libgcc_eh.a",
+ "$target/libgcc_s.so",
+ ]
+
+ deps = [
+ ":copy_sysroot",
+ ]
+}
+
+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 = [
+ ":finish_sysroot",
+ ]
+}
+
group("fusl") {
deps = [
- ":crt",
- ":libc",
- ":sysroot",
+ ":crt(//build/toolchain/fusl:fusl_$current_cpu)",
+ ":empty_main(//build/toolchain/fusl:fusl_$current_cpu)",
+ ":finish_sysroot(//build/toolchain/fusl:fusl_$current_cpu)",
+ ":libc(//build/toolchain/fusl:fusl_$current_cpu)",
]
}
« no previous file with comments | « build/toolchain/fusl/BUILD.gn ('k') | fusl/test/empty_main.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698