103 lines
3.3 KiB
Plaintext
103 lines
3.3 KiB
Plaintext
template("xOS_static_library") {
|
|
assert(defined(invoker.sources),
|
|
"Need sources in $target_name to build static library")
|
|
|
|
lib_name = target_name
|
|
lib_build_name = lib_name + "_build"
|
|
lib_include_config_name = lib_name + "_include_config"
|
|
compiled_lib_output_name_base = "$root_out_dir/tmp/libs/"
|
|
compiled_lib_output_name = compiled_lib_output_name_base + lib_name
|
|
final_lib_output_name = "$root_out_dir/base/libs/" + lib_name + ".a"
|
|
building_deplib_bulders_list = []
|
|
linking_deplib_bulders_list = []
|
|
linking_deplib_list = []
|
|
includes = []
|
|
|
|
if (defined(invoker.include_dirs)) {
|
|
includes = invoker.include_dirs
|
|
}
|
|
|
|
if (defined(invoker.deplibs)) {
|
|
foreach(i, invoker.deplibs) {
|
|
fullname = "//libs/" + i + ":" + i
|
|
|
|
# To speed up compilation we have separate deps for builing and linking stages.
|
|
# The only library which is required to be a dependancy for building stage is libfreetype,
|
|
# since its header files might not be available initially (they are archived).
|
|
if (i == "libfreetype") {
|
|
building_deplib_bulders_list += [ fullname + "_build" ]
|
|
}
|
|
|
|
linking_deplib_bulders_list += [ fullname + "_build" ]
|
|
linking_deplib_list += [ compiled_lib_output_name_base +
|
|
get_label_info(fullname, "name") + ".a" ]
|
|
includes += [ "//libs/" + i + "/include" ]
|
|
|
|
# Also adding libc includes.
|
|
# Note to add libc after libcxx.
|
|
if (i == "libcxx") {
|
|
includes += [ "//libs/libc/include" ]
|
|
}
|
|
|
|
# LibAPI is a lightweight library to use shared headers with API between libs and apps.
|
|
if (i == "libui") {
|
|
includes += [ "//libs/libapi/include" ]
|
|
}
|
|
}
|
|
}
|
|
includes += [ "//libs/" + lib_name + "/include" ]
|
|
|
|
# The output library is passed at the end.
|
|
linking_deplib_list += [ compiled_lib_output_name + ".a" ]
|
|
linking_deplib_bulders_list += [ "//libs/" + lib_name + ":" + lib_build_name ]
|
|
|
|
# Use a strange __EMPTY_PATH_, empty string can't be passed as an arg.
|
|
path_to_bins = "__EMPTY_PATH_"
|
|
if (host == "llvm") {
|
|
path_to_bins = llvm_bin_path
|
|
}
|
|
|
|
script_args = [
|
|
"$target_arch",
|
|
"$host",
|
|
"$path_to_bins",
|
|
rebase_path("$final_lib_output_name", root_build_dir),
|
|
]
|
|
|
|
foreach(i, linking_deplib_list) {
|
|
script_args += [ rebase_path(i, root_build_dir) ]
|
|
}
|
|
|
|
config(lib_include_config_name) {
|
|
include_dirs = includes
|
|
}
|
|
|
|
# Create a build rule to compile only a lib with unresolved references from other libs
|
|
static_library(lib_build_name) {
|
|
output_name = "tmp/libs/" + lib_name
|
|
sources = invoker.sources
|
|
include_dirs = includes
|
|
deps = building_deplib_bulders_list
|
|
forward_variables_from(invoker,
|
|
[
|
|
"configs",
|
|
"cflags",
|
|
"cflags_c",
|
|
"cflags_cc",
|
|
"cflags_objc",
|
|
"cflags_objcc",
|
|
"asmflags",
|
|
"deps",
|
|
"public_deps",
|
|
])
|
|
}
|
|
|
|
action(lib_name) {
|
|
script = "//build/libs/merge_libs.py"
|
|
inputs = linking_deplib_list
|
|
outputs = [ "$final_lib_output_name" ]
|
|
deps = linking_deplib_bulders_list
|
|
args = script_args
|
|
}
|
|
}
|