LLVM libc build rules

At the cost of verbosity, we want to keep the build system of LLVM libc as simple as possible. We also want to be highly modular with our build targets. This makes picking and choosing desired pieces a straighforward task.

Targets for entrypoints

Every entrypoint in LLVM-libc has its own build target. This target is listed using the add_entrypoint_object rule. This rule generates a single object file containing the implementation of the entrypoint.

Targets for redirecting entrypoints are also listed using the add_entrypoint_object rule. However, one will have to additionally specify the REDIRECTED option with the rule.

Targets for entrypoint libraries

Standards like POSIX require that a libc provide certain library files like libc.a, libm.a, etc. The targets for such library files are listed in the lib directory as add_entrypoint_library targets. An add_entrypoint_library target takes a list of add_entrypoint_object targets and produces a static library containing the object files corresponding to the add_entrypoint_targets.

Targets for redirectors

Similar to how every entrypoint in LLVM-libc has its own build target, every redirector function also has its own build target. This target is listed using the add_redirector_object rule. This rule generates a single object file which can be packaged along with other redirector objects into shared library of redirectors (see below).

Targets for library of redirectors

Targets for shared libraries of redirectors are listed using the add_redirector_library rule.