Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

RefactorArgs constructable class to static class#202

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
coder137 merged 14 commits intomainfromstatic_args
Mar 28, 2022
Merged
Show file tree
Hide file tree
Changes fromall commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletionsbootstrap/main.buildcc.cpp
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -33,12 +33,13 @@ static void hybrid_simple_example_cb(BaseTarget &target,
const BaseTarget &libbuildcc);

int main(int argc, char **argv) {
Args args;
Args::Init();
ArgToolchain custom_toolchain_arg;
args.AddToolchain("host", "Host Toolchain", custom_toolchain_arg);
args.Parse(argc, argv);
Args::AddToolchain("host", "Host Toolchain", custom_toolchain_arg);
Args::Parse(argc, argv);

Register reg(args);
Register reg;
;
reg.Clean(clean_cb);

BaseToolchain toolchain = custom_toolchain_arg.ConstructToolchain();
Expand Down
1 change: 1 addition & 0 deletionsbuildcc/lib/args/CMakeLists.txt
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,6 +8,7 @@ add_library(mock_args
)
target_include_directories(mock_args PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/mock
)
target_compile_options(mock_args PUBLIC
${TEST_COMPILE_FLAGS} ${BUILD_COMPILE_FLAGS}
Expand Down
45 changes: 18 additions & 27 deletionsbuildcc/lib/args/include/args/args.h
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -88,26 +88,30 @@ struct ArgTarget {
class Args {
public:
public:
Args(){ Initialize(); }
Args()= delete;
Args(const Args &) = delete;
Args(Args &&) = delete;

static void Init();
static void Deinit();

/**
* @brief Parse command line information to CLI11
*
* @param argc from int main(int argc, char ** argv)
* @param argv from int main(int argc, char ** argv)
*/
void Parse(int argc, const char *const *argv);
staticvoid Parse(int argc, const char *const *argv);

/**
* @brief Modifiable reference to CLI::App (CLI11)
*/
CLI::App &Ref() { return app_; }
staticCLI::App &Ref();

/**
* @brief Constant reference to CLI::App (CLI11)
*/
const CLI::App &ConstRef() const { return app_; }
staticconst CLI::App &ConstRef();

// Setters

Expand All@@ -117,9 +121,9 @@ class Args {
* @param out Receive the toolchain information through the CLI
* @param initial Set the default toolchain information as a fallback
*/
void AddToolchain(const std::string &name, const std::string &description,
ArgToolchain &out,
const ArgToolchain &initial = ArgToolchain());
staticvoid AddToolchain(const std::string &name,
const std::string &description,ArgToolchain &out,
const ArgToolchain &initial = ArgToolchain());

/**
* @brief Add Target config commands with a unique name and description
Expand All@@ -129,31 +133,18 @@ class Args {
*
* TODO, Update with other options for TargetConfig
*/
void AddTarget(const std::string &name, const std::string &description,
ArgTarget &out, const ArgTarget &initial = ArgTarget());
staticvoid AddTarget(const std::string &name, const std::string &description,
ArgTarget &out, const ArgTarget &initial = ArgTarget());

// Getters
bool Clean() const { return clean_; }
env::LogLevel GetLogLevel() const { return loglevel_; }

const fs::path &GetProjectRootDir() const { return project_root_dir_; }
const fs::path &GetProjectBuildDir() const { return project_build_dir_; }
static bool Clean();
static env::LogLevel GetLogLevel();

private:
void Initialize();
void RootArgs();
static const fs::path &GetProjectRootDir();
static const fs::path &GetProjectBuildDir();

private:
// Required parameters
bool clean_{false};
env::LogLevel loglevel_{env::LogLevel::Info};
fs::path project_root_dir_{""};
fs::path project_build_dir_{"_internal"};

// Internal
CLI::App app_{"BuildCC buildsystem"};
CLI::App *toolchain_{nullptr};
CLI::App *target_{nullptr};
static void RootArgs();
};

} // namespace buildcc
Expand Down
5 changes: 3 additions & 2 deletionsbuildcc/lib/args/include/args/register.h
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -33,7 +33,8 @@ namespace buildcc {

class Register {
public:
Register(const Args &args) : args_(args) { Initialize(); }
// Register(const Args &args) : args_(args) { Initialize(); }
Register() { Initialize(); }
Register(const Register &) = delete;

/**
Expand DownExpand Up@@ -154,7 +155,7 @@ class Register {
void BuildStoreTask(const std::string &unique_id, const tf::Task &task);

private:
const Args &args_;
//const Args &args_;

// Build
tf::Taskflow build_tf_{"Targets"};
Expand Down
2 changes: 1 addition & 1 deletionbuildcc/lib/args/mock/parse.cpp
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,7 +6,7 @@ namespace buildcc {

void Args::Parse(int argc, const char *const *argv) {
try {
app_.parse(argc, argv);
Ref().parse(argc, argv);
} catch (const CLI::ParseError &e) {
env::assert_fatal<false>(e.what());
}
Expand Down
60 changes: 51 additions & 9 deletionsbuildcc/lib/args/src/args.cpp
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -84,12 +84,56 @@ const std::unordered_map<const char *, buildcc::ToolchainId> kToolchainIdMap{
{"undefined", buildcc::ToolchainId::Undefined},
};

// Static variables
bool clean_{false};
buildcc::env::LogLevel loglevel_{buildcc::env::LogLevel::Info};
fs::path project_root_dir_{""};
fs::path project_build_dir_{"_internal"};

// Internal
// std::unique_ptr<CLI::App> app_;
// CLI::App *toolchain_{nullptr};
// CLI::App *target_{nullptr};

struct ArgsInstance {
CLI::App app_{"BuildCC Buildsystem"};
CLI::App *toolchain_{nullptr};
CLI::App *target_{nullptr};
};

std::unique_ptr<ArgsInstance> args_instance_;

} // namespace

namespace buildcc {

void Args::Init() {
if (!args_instance_) {
args_instance_ = std::make_unique<ArgsInstance>();
args_instance_->toolchain_ =
Ref().add_subcommand(kToolchainSubcommand, kToolchainDesc);
args_instance_->target_ =
Ref().add_subcommand(kTargetSubcommand, kTargetDesc);
RootArgs();
}
}

void Args::Deinit() { args_instance_.reset(nullptr); }

CLI::App &Args::Ref() { return args_instance_->app_; }
const CLI::App &Args::ConstRef() { return args_instance_->app_; }

bool Args::Clean() { return clean_; }
env::LogLevel Args::GetLogLevel() { return loglevel_; }

const fs::path &Args::GetProjectRootDir() { return project_root_dir_; }
const fs::path &Args::GetProjectBuildDir() { return project_build_dir_; }

void Args::AddToolchain(const std::string &name, const std::string &description,
ArgToolchain &out, const ArgToolchain &initial) {
CLI::App *toolchain_ = args_instance_->toolchain_;
env::assert_fatal(toolchain_ != nullptr,
"Initialize Args using the Args::Init API");
CLI::App *t_user =
toolchain_->add_subcommand(name, description)->group(kToolchainGroup);
t_user->add_flag(kToolchainBuildParam, out.state.build);
Expand All@@ -113,6 +157,9 @@ void Args::AddToolchain(const std::string &name, const std::string &description,

void Args::AddTarget(const std::string &name, const std::string &description,
ArgTarget &out, const ArgTarget &initial) {
CLI::App *target_ = args_instance_->target_;
env::assert_fatal(target_ != nullptr,
"Initialize Args using the Args::Init API");
CLI::App *target_user =
target_->add_subcommand(name, description)->group(kTargetGroup);
target_user->add_option(kTargetCompileCommandParam, out.compile_command)
Expand All@@ -123,20 +170,15 @@ void Args::AddTarget(const std::string &name, const std::string &description,

// Private

void Args::Initialize() {
RootArgs();
toolchain_ = app_.add_subcommand(kToolchainSubcommand, kToolchainDesc);
target_ = app_.add_subcommand(kTargetSubcommand, kTargetDesc);
}

void Args::RootArgs() {
app_.set_help_all_flag(kHelpAllParam, kHelpAllDesc);
Ref().set_help_all_flag(kHelpAllParam, kHelpAllDesc);

app_.set_config(kConfigParam, "", kConfigDesc)
Ref()
.set_config(kConfigParam, "", kConfigDesc)
->expected(kMinFiles, kMaxFiles);

// Root flags
auto *root_group =app_.add_option_group(kRootGroup);
auto *root_group =Ref().add_option_group(kRootGroup);

root_group->add_flag(kCleanParam, clean_, kCleanDesc);
root_group->add_option(kLoglevelParam, loglevel_, kLoglevelDesc)
Expand Down
4 changes: 2 additions & 2 deletionsbuildcc/lib/args/src/parse.cpp
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,9 +20,9 @@ namespace buildcc {

void Args::Parse(int argc, const char *const *argv) {
try {
app_.parse(argc, argv);
Ref().parse(argc, argv);
} catch (const CLI::ParseError &e) {
exit(app_.exit(e));
exit(ConstRef().exit(e));
}
}

Expand Down
8 changes: 4 additions & 4 deletionsbuildcc/lib/args/src/register.cpp
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -61,7 +61,7 @@ void DepDetectCyclicDependency(const tf::Task &target_task,
namespace buildcc {

void Register::Clean(const std::function<void(void)> &clean_cb) {
if (args_.Clean()) {
if (Args::Clean()) {
clean_cb();
}
}
Expand DownExpand Up@@ -119,9 +119,9 @@ void Register::BuildStoreTask(const std::string &unique_id,
void Register::Initialize() { Env(); }

void Register::Env() {
Project::Init(fs::current_path() /args_.GetProjectRootDir(),
fs::current_path() /args_.GetProjectBuildDir());
env::set_log_level(args_.GetLogLevel());
Project::Init(fs::current_path() /Args::GetProjectRootDir(),
fs::current_path() /Args::GetProjectBuildDir());
env::set_log_level(Args::GetLogLevel());
}

//
Expand Down
Loading

[8]ページ先頭

©2009-2025 Movatter.jp