API Reference
The public API is centered on three opaque handles: ib_context, ib_project, and
ib_target.
Core Types
typedef struct ib_context ib_context;
typedef struct ib_project ib_project;
typedef struct ib_target ib_target;
typedef enum { IB_OK, IB_ERR_INVALID, IB_ERR_IO, IB_ERR_TOOLCHAIN, IB_ERR_BUILD, IB_ERR_NOMEM,
IB_ERR_NOT_FOUND, IB_ERR_DUPLICATE } ib_status;
typedef enum { IB_DIAG_ERROR, IB_DIAG_WARN, IB_DIAG_INFO, IB_DIAG_DEBUG } ib_diag_level;
typedef enum { IB_TARGET_EXECUTABLE, IB_TARGET_STATIC_LIB, IB_TARGET_SHARED_LIB } ib_target_kind;
typedef enum { IB_MODE_DEBUG, IB_MODE_RELEASE, IB_MODE_CUSTOM } ib_build_mode;
Context and Diagnostics
ib_context* ib_context_create(void);
void ib_context_destroy(ib_context* ctx);
void ib_context_set_log_level(ib_context* ctx, ib_diag_level level);
void ib_context_set_verbose(ib_context* ctx, bool verbose);
void ib_context_set_color_output(ib_context* ctx, bool enabled);
void ib_context_clear_diagnostics(ib_context* ctx);
ib_status ib_context_last_status(const ib_context* ctx);
const char* ib_context_last_message(const ib_context* ctx);
size_t ib_context_diagnostic_count(const ib_context* ctx);
ib_diag_level ib_context_diagnostic_level_at(const ib_context* ctx, size_t index);
ib_status ib_context_diagnostic_status_at(const ib_context* ctx, size_t index);
const char* ib_context_diagnostic_message_at(const ib_context* ctx, size_t index);
Project Lifecycle
ib_project* ib_project_create(ib_context* ctx, const char* root_dir);
void ib_project_destroy(ib_project* project);
Project Configuration
ib_status ib_project_set_c_compiler(ib_project* project, const char* compiler);
ib_status ib_project_set_cxx_compiler(ib_project* project, const char* compiler);
ib_status ib_project_set_archiver(ib_project* project, const char* archiver);
ib_status ib_project_set_output_dir(ib_project* project, const char* dir);
ib_status ib_project_set_state_dir(ib_project* project, const char* dir);
ib_status ib_project_set_mode_flags(ib_project* project, ib_build_mode mode,
const char* c_flags, const char* cxx_flags);
ib_status ib_project_add_include_dir(ib_project* project, const char* path);
ib_status ib_project_add_shared_source(ib_project* project, const char* path);
ib_status ib_project_scan_shared_dir(ib_project* project, const char* dir, bool recursive);
Targets
ib_target* ib_project_add_target(ib_project* project, const char* name, ib_target_kind kind);
ib_status ib_target_set_entry(ib_target* target, const char* path);
ib_status ib_target_add_source(ib_target* target, const char* path);
ib_status ib_target_add_include_dir(ib_target* target, const char* path);
ib_status ib_target_add_cflags(ib_target* target, const char* flags);
ib_status ib_target_add_link_flags(ib_target* target, const char* flags);
Target-local compile flags and link flags are applied only to that target. Shared sources are compiled once per target, not globally.
Build Operations
ib_status ib_project_build(ib_project* project, ib_build_mode mode);
ib_status ib_project_clean(ib_project* project);
ib_status ib_project_write_compile_commands(ib_project* project, const char* out_path);
Version
const char* ib_version(void);
Behavior Notes
- All public mutators return
ib_status. - Diagnostics are stored on the context instead of being implicit global state.
compile_commands.jsonis generated from the same compile plan used byib_project_build().- Incremental rebuilds are based on object existence, depfile mtimes, and command-hash manifests.