Args

args.h

class Args

Public Functions

Args() = delete
Args(const Args&) = delete
Args(Args&&) = delete

Public Static Functions

static Instance &Init()
static void Deinit()
static bool IsInit()
static bool IsParsed()
static bool Clean()
static env::LogLevel GetLogLevel()
static const fs::path &GetProjectRootDir()
static const fs::path &GetProjectBuildDir()
class Instance

Public Functions

Instance &AddToolchain(const std::string &name, const std::string &description, ArgToolchain &out, const ArgToolchain &initial = ArgToolchain())

Add toolchain with a unique name and description.

Parameters:
  • out – Receive the toolchain information through the CLI

  • initial – Set the default toolchain information as a fallback

Instance &AddTarget(const std::string &name, const std::string &description, ArgTarget &out, const ArgTarget &initial = ArgTarget())

Add toolchain with a unique name and description.

Parameters:
  • out – Receive the toolchain information through the CLI

  • initial – Set the default toolchain information as a fallback

Instance &AddCustomCallback(const std::function<void(CLI::App&)> &add_cb)

Custom callback for data.

Parameters:

add_cb – Add callback that exposes underlying CLI::App

Instance &AddCustomData(ArgCustom &data)

Add custom data.

Parameters:

data – Derive from buildcc::ArgCustom and override the Add API

Public Static Functions

static void Parse(int argc, const char *const *argv)

Parse command line information to CLI11.

Parameters:
  • argc – from int main(int argc, char ** argv)

  • argv – from int main(int argc, char ** argv)

struct Internal

Public Members

Instance instance
CLI::App app = {"BuildCC Buildsystem"}
CLI::App *toolchain = {nullptr}
CLI::App *target = {nullptr}
struct ArgCustom

Public Functions

virtual void Add(CLI::App &app) = 0
struct ArgToolchainState

Toolchain State used to selectively build and test targets.

Public Functions

inline ArgToolchainState(bool b = false, bool t = false)

Public Members

bool build
bool test
class ArgToolchain

Toolchain Arg used to receive toolchain information through the command line Bundled with Toolchain State.

Public Functions

inline ArgToolchain()
inline ArgToolchain(ToolchainId initial_id, const std::string &initial_name, const ToolchainExecutables &initial_executables, const ToolchainConfig &initial_config)
inline Toolchain &ConstructToolchain()

Public Members

ArgToolchainState state
ToolchainId id
std::string name
ToolchainExecutables executables
ToolchainConfig config
struct ArgTarget

Public Functions

inline ArgTarget()
inline TargetConfig GetTargetConfig()

Public Members

std::string compile_command

Example

 1using namespace buildcc;
 2
 3struct CustomData : ArgCustom {
 4    void Add(CLI::App & app) override {
 5        // setup your app from data1, data2, data3, data...
 6        // NOTE: The Add method should not be invoked by the user
 7        // NOTE: The Add method is only expected to be invoked once, not multiple times.
 8    }
 9
10    std::string data1;
11    int data2;
12    float data3;
13    // etc
14};
15
16int main(int argc, char ** argv) {
17    ArgToolchain arg_gcc_toolchain;
18    ArgCustomData custom_data;
19    Args::Init()
20        .AddToolchain("gcc", "Generic GCC toolchain", arg_gcc_toolchain)
21        .AddCustomCallback([](CLI::App &app) {});
22        .AddCustomData(custom_data);
23        .Parse(argc, argv);
24
25    // Root
26    Args::GetProjectRootDir(); // Contains ``root_dir`` value
27    Args::GetProjectBuildDir(); // Contains ``build_dir`` value
28    Args::GetLogLevel(); // Contains ``loglevel`` enum
29    Args::Clean(); // Contains ``clean`` value
30
31    // Toolchain
32    // .build, .test
33    arg_gcc_toolchain.state;
34    // .id, .name, .asm_compiler, .c_compiler, .cpp_compiler, .archiver, .linker -> BaseToolchain
35    auto &gcc_toolchain = arg_gcc_toolchain;
36    gcc_toolchain.SetToolchainInfoFunc(GlobalToolchainInfo::Get(gcc_toolchain.id));
37    return 0;
38}
 1# Root
 2root_dir = ""
 3build_dir = "_build"
 4loglevel = "trace"
 5clean = true
 6
 7# Toolchain
 8[toolchain.gcc]
 9build = true
10test = true
11
12id = "gcc"
13name = "x86_64-linux-gnu"
14asm_compiler = "as"
15c_compiler = "gcc"
16cpp_compiler = "g++"
17archiver = "ar"
18linker = "ld"