#include "build.h"

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