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

Commit94d62c9

Browse files
authored
RefactorArgs constructable class to static class (#202)
1 parent70ca258 commit94d62c9

File tree

25 files changed

+318
-269
lines changed

25 files changed

+318
-269
lines changed

‎bootstrap/main.buildcc.cpp‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,13 @@ static void hybrid_simple_example_cb(BaseTarget &target,
3333
const BaseTarget &libbuildcc);
3434

3535
intmain(int argc,char **argv) {
36-
Args args;
36+
Args::Init();
3737
ArgToolchain custom_toolchain_arg;
38-
args.AddToolchain("host","Host Toolchain", custom_toolchain_arg);
39-
args.Parse(argc, argv);
38+
Args::AddToolchain("host","Host Toolchain", custom_toolchain_arg);
39+
Args::Parse(argc, argv);
4040

41-
Registerreg(args);
41+
Register reg;
42+
;
4243
reg.Clean(clean_cb);
4344

4445
BaseToolchain toolchain = custom_toolchain_arg.ConstructToolchain();

‎buildcc/lib/args/CMakeLists.txt‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ add_library(mock_args
88
)
99
target_include_directories(mock_argsPUBLIC
1010
${CMAKE_CURRENT_SOURCE_DIR}/include
11+
${CMAKE_CURRENT_SOURCE_DIR}/mock
1112
)
1213
target_compile_options(mock_argsPUBLIC
1314
${TEST_COMPILE_FLAGS}${BUILD_COMPILE_FLAGS}

‎buildcc/lib/args/include/args/args.h‎

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -88,26 +88,30 @@ struct ArgTarget {
8888
classArgs {
8989
public:
9090
public:
91-
Args(){Initialize(); }
91+
Args()=delete;
9292
Args(const Args &) =delete;
93+
Args(Args &&) =delete;
94+
95+
staticvoidInit();
96+
staticvoidDeinit();
9397

9498
/**
9599
* @brief Parse command line information to CLI11
96100
*
97101
* @param argc from int main(int argc, char ** argv)
98102
* @param argv from int main(int argc, char ** argv)
99103
*/
100-
voidParse(int argc,constchar *const *argv);
104+
staticvoidParse(int argc,constchar *const *argv);
101105

102106
/**
103107
* @brief Modifiable reference to CLI::App (CLI11)
104108
*/
105-
CLI::App &Ref() {return app_; }
109+
staticCLI::App &Ref();
106110

107111
/**
108112
* @brief Constant reference to CLI::App (CLI11)
109113
*/
110-
const CLI::App &ConstRef()const {return app_; }
114+
staticconst CLI::App &ConstRef();
111115

112116
// Setters
113117

@@ -117,9 +121,9 @@ class Args {
117121
* @param out Receive the toolchain information through the CLI
118122
* @param initial Set the default toolchain information as a fallback
119123
*/
120-
voidAddToolchain(const std::string &name,const std::string &description,
121-
ArgToolchain &out,
122-
const ArgToolchain &initial = ArgToolchain());
124+
staticvoidAddToolchain(const std::string &name,
125+
const std::string &description,ArgToolchain &out,
126+
const ArgToolchain &initial = ArgToolchain());
123127

124128
/**
125129
* @brief Add Target config commands with a unique name and description
@@ -129,31 +133,18 @@ class Args {
129133
*
130134
* TODO, Update with other options for TargetConfig
131135
*/
132-
voidAddTarget(const std::string &name,const std::string &description,
133-
ArgTarget &out,const ArgTarget &initial = ArgTarget());
136+
staticvoidAddTarget(const std::string &name,const std::string &description,
137+
ArgTarget &out,const ArgTarget &initial = ArgTarget());
134138

135139
// Getters
136-
boolClean()const {return clean_; }
137-
env::LogLevelGetLogLevel()const {return loglevel_; }
138-
139-
const fs::path &GetProjectRootDir()const {return project_root_dir_; }
140-
const fs::path &GetProjectBuildDir()const {return project_build_dir_; }
140+
staticboolClean();
141+
static env::LogLevelGetLogLevel();
141142

142-
private:
143-
voidInitialize();
144-
voidRootArgs();
143+
staticconst fs::path &GetProjectRootDir();
144+
staticconst fs::path &GetProjectBuildDir();
145145

146146
private:
147-
// Required parameters
148-
bool clean_{false};
149-
env::LogLevel loglevel_{env::LogLevel::Info};
150-
fs::path project_root_dir_{""};
151-
fs::path project_build_dir_{"_internal"};
152-
153-
// Internal
154-
CLI::App app_{"BuildCC buildsystem"};
155-
CLI::App *toolchain_{nullptr};
156-
CLI::App *target_{nullptr};
147+
staticvoidRootArgs();
157148
};
158149

159150
}// namespace buildcc

‎buildcc/lib/args/include/args/register.h‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ namespace buildcc {
3333

3434
classRegister {
3535
public:
36-
Register(const Args &args) : args_(args) {Initialize(); }
36+
// Register(const Args &args) : args_(args) { Initialize(); }
37+
Register() {Initialize(); }
3738
Register(const Register &) =delete;
3839

3940
/**
@@ -154,7 +155,7 @@ class Register {
154155
voidBuildStoreTask(const std::string &unique_id,const tf::Task &task);
155156

156157
private:
157-
const Args &args_;
158+
//const Args &args_;
158159

159160
// Build
160161
tf::Taskflow build_tf_{"Targets"};

‎buildcc/lib/args/mock/parse.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace buildcc {
66

77
voidArgs::Parse(int argc,constchar *const *argv) {
88
try {
9-
app_.parse(argc, argv);
9+
Ref().parse(argc, argv);
1010
}catch (const CLI::ParseError &e) {
1111
env::assert_fatal<false>(e.what());
1212
}

‎buildcc/lib/args/src/args.cpp‎

Lines changed: 51 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,56 @@ const std::unordered_map<const char *, buildcc::ToolchainId> kToolchainIdMap{
8484
{"undefined", buildcc::ToolchainId::Undefined},
8585
};
8686

87+
// Static variables
88+
bool clean_{false};
89+
buildcc::env::LogLevel loglevel_{buildcc::env::LogLevel::Info};
90+
fs::path project_root_dir_{""};
91+
fs::path project_build_dir_{"_internal"};
92+
93+
// Internal
94+
// std::unique_ptr<CLI::App> app_;
95+
// CLI::App *toolchain_{nullptr};
96+
// CLI::App *target_{nullptr};
97+
98+
structArgsInstance {
99+
CLI::App app_{"BuildCC Buildsystem"};
100+
CLI::App *toolchain_{nullptr};
101+
CLI::App *target_{nullptr};
102+
};
103+
104+
std::unique_ptr<ArgsInstance> args_instance_;
105+
87106
}// namespace
88107

89108
namespacebuildcc {
90109

110+
voidArgs::Init() {
111+
if (!args_instance_) {
112+
args_instance_ = std::make_unique<ArgsInstance>();
113+
args_instance_->toolchain_ =
114+
Ref().add_subcommand(kToolchainSubcommand,kToolchainDesc);
115+
args_instance_->target_ =
116+
Ref().add_subcommand(kTargetSubcommand,kTargetDesc);
117+
RootArgs();
118+
}
119+
}
120+
121+
voidArgs::Deinit() { args_instance_.reset(nullptr); }
122+
123+
CLI::App &Args::Ref() {return args_instance_->app_; }
124+
const CLI::App &Args::ConstRef() {return args_instance_->app_; }
125+
126+
boolArgs::Clean() {return clean_; }
127+
env::LogLevelArgs::GetLogLevel() {return loglevel_; }
128+
129+
const fs::path &Args::GetProjectRootDir() {return project_root_dir_; }
130+
const fs::path &Args::GetProjectBuildDir() {return project_build_dir_; }
131+
91132
voidArgs::AddToolchain(const std::string &name,const std::string &description,
92133
ArgToolchain &out,const ArgToolchain &initial) {
134+
CLI::App *toolchain_ = args_instance_->toolchain_;
135+
env::assert_fatal(toolchain_ !=nullptr,
136+
"Initialize Args using the Args::Init API");
93137
CLI::App *t_user =
94138
toolchain_->add_subcommand(name, description)->group(kToolchainGroup);
95139
t_user->add_flag(kToolchainBuildParam, out.state.build);
@@ -113,6 +157,9 @@ void Args::AddToolchain(const std::string &name, const std::string &description,
113157

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

124171
// Private
125172

126-
voidArgs::Initialize() {
127-
RootArgs();
128-
toolchain_ = app_.add_subcommand(kToolchainSubcommand,kToolchainDesc);
129-
target_ = app_.add_subcommand(kTargetSubcommand,kTargetDesc);
130-
}
131-
132173
voidArgs::RootArgs() {
133-
app_.set_help_all_flag(kHelpAllParam,kHelpAllDesc);
174+
Ref().set_help_all_flag(kHelpAllParam,kHelpAllDesc);
134175

135-
app_.set_config(kConfigParam,"",kConfigDesc)
176+
Ref()
177+
.set_config(kConfigParam,"",kConfigDesc)
136178
->expected(kMinFiles,kMaxFiles);
137179

138180
// Root flags
139-
auto *root_group =app_.add_option_group(kRootGroup);
181+
auto *root_group =Ref().add_option_group(kRootGroup);
140182

141183
root_group->add_flag(kCleanParam, clean_,kCleanDesc);
142184
root_group->add_option(kLoglevelParam, loglevel_,kLoglevelDesc)

‎buildcc/lib/args/src/parse.cpp‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ namespace buildcc {
2020

2121
voidArgs::Parse(int argc,constchar *const *argv) {
2222
try {
23-
app_.parse(argc, argv);
23+
Ref().parse(argc, argv);
2424
}catch (const CLI::ParseError &e) {
25-
exit(app_.exit(e));
25+
exit(ConstRef().exit(e));
2626
}
2727
}
2828

‎buildcc/lib/args/src/register.cpp‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ void DepDetectCyclicDependency(const tf::Task &target_task,
6161
namespacebuildcc {
6262

6363
voidRegister::Clean(const std::function<void(void)> &clean_cb) {
64-
if (args_.Clean()) {
64+
if (Args::Clean()) {
6565
clean_cb();
6666
}
6767
}
@@ -119,9 +119,9 @@ void Register::BuildStoreTask(const std::string &unique_id,
119119
voidRegister::Initialize() {Env(); }
120120

121121
voidRegister::Env() {
122-
Project::Init(fs::current_path() /args_.GetProjectRootDir(),
123-
fs::current_path() /args_.GetProjectBuildDir());
124-
env::set_log_level(args_.GetLogLevel());
122+
Project::Init(fs::current_path() /Args::GetProjectRootDir(),
123+
fs::current_path() /Args::GetProjectBuildDir());
124+
env::set_log_level(Args::GetLogLevel());
125125
}
126126

127127
//

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp