255 const char *pattern);
266 const char *content);
625 const char *content);
724#define BuildRoot(ctx) __builtin_build_root(ctx)
729#define BuildOutDir(ctx) __builtin_build_out_dir(ctx)
734#define BuildHost(ctx) __builtin_build_host(ctx)
739#define BuildVerbose(ctx) __builtin_build_verbose(ctx)
747#define Watch(ctx, path) __builtin_build_watch(ctx, path)
754#define WatchGlob(ctx, pat) __builtin_build_watch_glob(ctx, pat)
761#define IgnoreWatch(ctx, pat) __builtin_build_ignore_watch(ctx, pat)
766#define BuildWatching(ctx) __builtin_build_watching(ctx)
772#define CcccPath(ctx) __builtin_build_cccc_path(ctx)
778#define Executable(ctx, name) __builtin_build_executable(ctx, name)
784#define StaticLib(ctx, name) __builtin_build_static_lib(ctx, name)
791#define DynamicLib(ctx, name) __builtin_build_dynamic_lib(ctx, name)
802#define CcccExecutable(ctx, name) __builtin_build_cccc_executable(ctx, name)
810#define CcccObject(ctx, name) __builtin_build_cccc_object(ctx, name)
816#define SetOutput(t, p) __builtin_build_set_output(t, p)
821#define TargetOutput(t) __builtin_build_target_output(t)
827#define DeclareOutput(t, p) __builtin_build_declare_output(t, p)
833#define AddSource(t, p) __builtin_build_add_source(t, p)
840#define AddSourcesGlob(t, pat) __builtin_build_add_sources_glob(t, pat)
847#define AddSourcesGlobDeferred(t, pat) \
848 __builtin_build_add_sources_glob_deferred(t, pat)
856#define AddSourceStr(t, n, c) __builtin_build_add_source_str(t, n, c)
871#define AddInput(t, p) __builtin_build_add_input(t, p)
877#define ExcludeSource(t, pat) __builtin_build_exclude_source(t, pat)
883#define AddInclude(t, p) __builtin_build_add_include(t, p)
890#define AddSystemInclude(t, p) __builtin_build_add_system_include(t, p)
897#define AddDefine(t, n, v) __builtin_build_add_define(t, n, v)
903#define AddUndef(t, n) __builtin_build_add_undef(t, n)
909#define AddCFlag(t, f) __builtin_build_add_cflag(t, f)
915#define AddLdFlag(t, f) __builtin_build_add_ldflag(t, f)
923#define SetTargetEnv(t, n, v) __builtin_build_set_target_env(t, n, v)
929#define LinkWith(t, dep) __builtin_build_link_with(t, dep)
936#define DependsOn(t, dep) __builtin_build_depends_on(t, dep)
942#define AddLib(t, n) __builtin_build_add_lib(t, n)
948#define AddLibPath(t, p) __builtin_build_add_libpath(t, p)
954#define GetEnv(ctx, name) __builtin_build_get_env(ctx, name)
960#define CaptureCommand(ctx, cmd) __builtin_build_capture_command(ctx, cmd)
966#define FileExists(ctx, path) __builtin_build_file_exists(ctx, path)
972#define DirExists(ctx, path) __builtin_build_dir_exists(ctx, path)
978#define GlobFiles(ctx, pattern) __builtin_build_glob_files(ctx, pattern)
984#define ReadFile(ctx, path) __builtin_build_read_file(ctx, path)
991#define WriteFile(ctx, path, c) __builtin_build_write_file(ctx, path, c)
997#define SetCwd(ctx, path) __builtin_build_set_cwd(ctx, path)
1002#define GetCwd(ctx) __builtin_build_get_cwd(ctx)
1009#define CopyFile(ctx, src, dst) __builtin_build_copy_file(ctx, src, dst)
1016#define MoveFile(ctx, src, dst) __builtin_build_move_file(ctx, src, dst)
1022#define DeleteFile(ctx, path) __builtin_build_delete_file(ctx, path)
1029#define MkDir(ctx, path) __builtin_build_mkdir(ctx, path)
1035#define DeleteDir(ctx, path) __builtin_build_delete_dir(ctx, path)
1041#define HaveTool(ctx, name) __builtin_build_have_tool(ctx, name)
1047#define FindTool(ctx, name) __builtin_build_find_tool(ctx, name)
1054#define PkgConfig(t, pkg) __builtin_build_pkg_config(t, pkg)
1062#define RunCustom(ctx, name, cmd) __builtin_build_run_custom(ctx, name, cmd)
1069#define GetBuildOption(ctx, name) __builtin_build_get_build_option(ctx, name)
1075#define HaveBuildOption(ctx, name) __builtin_build_have_build_option(ctx, name)
1081#define AddFramework(t, name) __builtin_build_add_framework(t, name)
1088#define AddFrameworkPath(t, p) __builtin_build_add_framework_path(t, p)
1094#define UseSystemHeaders(t) __builtin_build_use_system_headers(t)
1099#define BuildArgc(ctx) __builtin_build_argc(ctx)
1106#define BuildArgv(ctx, i) __builtin_build_argv(ctx, i)
1112#define SetInstallPrefix(ctx, path) \
1113 __builtin_build_set_install_prefix(ctx, path)
1119#define InstallArtifact(ctx, t) __builtin_build_install_artifact(ctx, t)
1124#define BuildWantsInstall(ctx) __builtin_build_wants_install(ctx)
1132#define SetProfile(t, p) __builtin_build_set_profile(t, p)
1137#define BuildProfile(ctx) __builtin_build_profile(ctx)
1144#define SetToolchain(t, cc) __builtin_build_set_toolchain(t, cc)
1151#define SetTargetTriple(t, triple) __builtin_build_set_target_triple(t, triple)
1156#define BuildTargetTriple(ctx) __builtin_build_target_triple(ctx)
1162#define BuildTargetCount(ctx) __builtin_build_target_count(ctx)
1168#define BuildTargetName(ctx, i) __builtin_build_target_name(ctx, i)
1174#define Build(ctx, t) __builtin_build_run(ctx, t)
1179#define BuildAll(ctx) __builtin_build_run_all(ctx)
1184#define BuildDefault(ctx) __builtin_build_run_default(ctx)
void __builtin_build_add_framework_path(BuildTarget *t, const char *path)
Add a macOS framework search path (-F, or --iframework for a cccc-compiled target).
const char * __builtin_build_target_output(BuildTarget *t)
On-disk output path for t.
const char * __builtin_build_get_cwd(Builder *ctx)
Return the current process working directory.
void __builtin_build_add_cflag(BuildTarget *t, const char *flag)
Add a raw compiler flag (e.g. "-O2").
int __builtin_build_move_file(Builder *ctx, const char *src, const char *dst)
Move (rename) file src to dst.
void __builtin_build_add_lib(BuildTarget *t, const char *name)
Add a system library to link against (-l<name>).
void __builtin_build_add_system_include(BuildTarget *t, const char *path)
Add a system include search path (-isystem) to the target's compiles.
void __builtin_build_ignore_watch(Builder *ctx, const char *pattern)
Drops --watch events for paths matching an fnmatch glob.
const char ** __builtin_build_glob_files(Builder *ctx, const char *pattern)
Expand pattern and return the matching paths.
void __builtin_build_use_system_headers(BuildTarget *t)
Compile a cccc-compiled target against the host's own system headers (--use-system-headers).
void __builtin_build_add_include(BuildTarget *t, const char *path)
Add an include search path (-I) to the target's compiles.
void __builtin_build_watch_glob(Builder *ctx, const char *pattern)
Adds an fnmatch glob to the --watch set.
int __builtin_build_run(Builder *ctx, BuildTarget *t)
Build t and its transitive dependencies.
int __builtin_build_delete_file(Builder *ctx, const char *path)
Delete the file at path (unlink).
int __builtin_build_target_count(Builder *ctx)
Return the number of [[cccc::build_target]] factory functions declared in the current build script.
const char * __builtin_build_out_dir(Builder *ctx)
Output directory for build artifacts (default build/).
void __builtin_build_add_source_str(BuildTarget *t, const char *name, const char *content)
Write content to <out_dir>/gen/<name> and add it as a source.
int __builtin_build_dir_exists(Builder *ctx, const char *path)
Check whether a path exists and is a directory.
int __builtin_build_wants_install(Builder *ctx)
Check whether install was requested.
void __builtin_build_set_output(BuildTarget *t, const char *path)
Override the target's output path (relative to the out dir).
BuildTarget * __builtin_build_cccc_executable(Builder *ctx, const char *name)
Create an executable compiled by the running cccc itself (output bin/<name>).
int __builtin_build_pkg_config(BuildTarget *t, const char *pkg)
Run pkg-config to obtain compile and link flags for pkg and add them to t.
int __builtin_build_copy_file(Builder *ctx, const char *src, const char *dst)
Copy file src to dst.
BuildTarget * __builtin_build_static_lib(Builder *ctx, const char *name)
Create a static-library target (output lib/lib<name>.a).
const char * __builtin_build_get_env(Builder *ctx, const char *name)
Return the value of environment variable name.
void __builtin_build_exclude_source(BuildTarget *t, const char *pattern)
Exclude sources matching pattern from compilation.
void __builtin_build_link_with(BuildTarget *t, BuildTarget *dep)
Declare that t links against (and is built after) dep.
int __builtin_build_set_cwd(Builder *ctx, const char *path)
Change the process working directory to path.
void __builtin_build_add_sources_glob(BuildTarget *t, const char *pattern)
Expand a glob pattern relative to the build root and add each match as a source file,...
void __builtin_build_install_artifact(Builder *ctx, BuildTarget *t)
Register t for installation when --build-install is active.
void __builtin_build_watch(Builder *ctx, const char *path)
Adds a file, or a directory (recursively), to the --watch set.
BuildTarget * __builtin_build_cccc_object(Builder *ctx, const char *name)
Create an object file compiled by the running cccc itself (output obj/<name>.o).
int __builtin_build_run_default(Builder *ctx)
Build every declared target and print a summary.
int __builtin_build_verbose(Builder *ctx)
Non-zero when verbose output was requested.
const char * __builtin_build_target_name(Builder *ctx, int i)
Return the name of the i -th [[cccc::build_target]] factory.
void __builtin_build_add_undef(BuildTarget *t, const char *name)
Add a preprocessor undefine (-U).
const char * __builtin_build_get_build_option(Builder *ctx, const char *name)
Return the value of a --build-option=key=value option passed on the command line.
void __builtin_build_add_input(BuildTarget *t, const char *path)
Record a file path a RunCustom or CcccExecutable target reads.
void __builtin_build_add_ldflag(BuildTarget *t, const char *flag)
Add a raw linker flag.
struct __cccc_Builder Builder
Opaque build context; passed to the entry and forwarded to macros.
Definition building.h:45
void __builtin_build_declare_output(BuildTarget *t, const char *path)
Record a file path a RunCustom target (only) produces.
void __builtin_build_add_define(BuildTarget *t, const char *name, const char *value)
Add a preprocessor define (-D).
BuildTarget * __builtin_build_executable(Builder *ctx, const char *name)
Create an executable target named name (output bin/<name>).
int __builtin_build_watching(Builder *ctx)
Non-zero under --watch.
int __builtin_build_argc(Builder *ctx)
Number of positional arguments forwarded via -- on the CLI.
void __builtin_build_set_target_env(BuildTarget *t, const char *name, const char *value)
Set an environment variable for t's compiler/linker child process only (e.g. AFL_USE_ASAN=1 for an af...
int __builtin_build_write_file(Builder *ctx, const char *path, const char *content)
Write content to path, creating parent directories as needed.
void __builtin_build_add_framework(BuildTarget *t, const char *name)
Add a macOS -framework Name linker flag.
const char * __builtin_build_root(Builder *ctx)
Absolute path of the directory the build was launched from.
int __builtin_build_delete_dir(Builder *ctx, const char *path)
Recursively delete path and all contents (rm -rf semantics).
void __builtin_build_set_install_prefix(Builder *ctx, const char *path)
Override the install prefix for InstallArtifact.
BuildTarget * __builtin_build_dynamic_lib(Builder *ctx, const char *name)
Create a dynamic-library target (output lib/lib<name>.{so,dylib}).
int __builtin_build_file_exists(Builder *ctx, const char *path)
Check whether a path exists.
const char * __builtin_build_host(Builder *ctx)
Host platform name ("darwin", "linux", ...).
const char * __builtin_build_capture_command(Builder *ctx, const char *cmd)
Run cmd via sh -c and return its stdout.
int __builtin_build_mkdir(Builder *ctx, const char *path)
Create path and all intermediate directories (mkdir -p semantics).
const char * __builtin_build_target_triple(Builder *ctx)
Return the global cross-compilation triple.
const char * __builtin_build_cccc_path(Builder *ctx)
Absolute path of the running cccc executable.
const char * __builtin_build_argv(Builder *ctx, int i)
Return the i -th positional argument forwarded via -- on the CLI.
void __builtin_build_add_sources_glob_deferred(BuildTarget *t, const char *pattern)
Like AddSourcesGlob, but expansion happens at build time, after t's dependencies have already been bu...
const char * __builtin_build_profile(Builder *ctx)
Return the global build profile name.
struct __cccc_BuildTarget BuildTarget
Opaque handle to a declared build target.
Definition building.h:48
void __builtin_build_depends_on(BuildTarget *t, BuildTarget *dep)
Ordering-only dependency: t is built after dep but does not add a -l<dep> linker flag.
int __builtin_build_run_all(Builder *ctx)
Build every declared target in topological order.
const char * __builtin_build_read_file(Builder *ctx, const char *path)
Read the file at path into a string.
void __builtin_build_set_toolchain(BuildTarget *t, const char *cc)
Override the compiler binary for t (e.g. "aarch64-linux-gnu-gcc").
void __builtin_build_add_libpath(BuildTarget *t, const char *path)
Add a library search path (-L<path>).
void __builtin_build_add_source(BuildTarget *t, const char *path)
Add a C source file to the target.
const char * __builtin_build_find_tool(Builder *ctx, const char *name)
Return the full path of a named tool.
void __builtin_build_set_target_triple(BuildTarget *t, const char *triple)
Set a clang-style target triple for t (e.g. "aarch64-linux-gnu").
void __builtin_build_set_profile(BuildTarget *t, const char *profile)
Set the build profile for target t, overriding any global --build-profile default.
int __builtin_build_have_build_option(Builder *ctx, const char *name)
Check whether a --build-option was passed on the command line.
int __builtin_build_have_tool(Builder *ctx, const char *name)
Check whether a named tool is available.
BuildTarget * __builtin_build_run_custom(Builder *ctx, const char *name, const char *cmd)
Register a custom shell-command target named name that runs cmd when the target is reached in the bui...