2828using namespace buildcc ;
2929
3030static void clean_cb ();
31- static void global_flags_cb (TargetInfo &global_info,
32- const BaseToolchain &toolchain);
33-
34- static void setup_buildcc_cb (PersistentStorage &storage, Register ®,
35- const ArgToolchain &custom_toolchain_arg,
36- const BaseToolchain &toolchain);
3731
3832static void hybrid_simple_example_cb (BaseTarget &target,
3933 const BaseTarget &libbuildcc);
@@ -50,11 +44,12 @@ int main(int argc, char **argv) {
5044 BaseToolchain toolchain = custom_toolchain_arg.ConstructToolchain ();
5145
5246 PersistentStorage storage;
53- setup_buildcc_cb (storage, reg, custom_toolchain_arg, toolchain);
54-
55- const StaticTarget_generic &buildcc_lib =
56- storage. ConstRef <StaticTarget_generic>( " libbuildcc " );
47+ BuildBuildCC buildcc (
48+ reg, toolchain,
49+ TargetEnv ( env::get_project_root_dir (), env::get_project_build_dir ()));
50+ buildcc. Setup (custom_toolchain_arg. state );
5751
52+ const auto &buildcc_lib = buildcc.GetBuildcc ();
5853 ExecutableTarget_generic buildcc_hybrid_simple_example (
5954 " buildcc_hybrid_simple_example" , toolchain, " example/hybrid/simple" );
6055 reg.Build (custom_toolchain_arg.state , hybrid_simple_example_cb,
@@ -78,92 +73,9 @@ int main(int argc, char **argv) {
7873
7974static void clean_cb () {}
8075
81- static void global_flags_cb (TargetInfo &global_info,
82- const BaseToolchain &toolchain) {
83- // TODO, Clang
84- switch (toolchain.GetId ()) {
85- case ToolchainId::Gcc:
86- case ToolchainId::MinGW:
87- global_info.AddCppCompileFlag (" -std=c++17" );
88- global_info.AddCppCompileFlag (" -Os" );
89- global_info.AddCppCompileFlag (" -Wall" );
90- global_info.AddCppCompileFlag (" -Wextra" );
91- global_info.AddCppCompileFlag (" -Werror" );
92- break ;
93- case ToolchainId::Msvc:
94- global_info.AddPreprocessorFlag (" /D_CRT_SECURE_NO_WARNINGS" );
95- global_info.AddCppCompileFlag (" /std:c++17" );
96- global_info.AddCppCompileFlag (" /Ot" );
97- global_info.AddCppCompileFlag (" /W4" );
98- global_info.AddCppCompileFlag (" /WX" );
99- default :
100- break ;
101- }
102- }
103-
104- static void setup_buildcc_cb (PersistentStorage &storage, Register ®,
105- const ArgToolchain &custom_toolchain_arg,
106- const BaseToolchain &toolchain) {
107-
108- // Flatc Executable
109- ExecutableTarget_generic &flatc_exe = storage.Add <ExecutableTarget_generic>(
110- " flatc" , " flatc" , toolchain, " third_party/flatbuffers" );
111- reg.CallbackIf (custom_toolchain_arg.state , global_flags_cb, flatc_exe,
112- toolchain);
113- reg.Build (custom_toolchain_arg.state , build_flatc_exe_cb, flatc_exe);
114-
115- // Schema
116- BaseGenerator &schema_gen =
117- storage.Add <BaseGenerator>(" schema_gen" , " schema_gen" , " buildcc/schema" );
118- reg.Build (schema_gen_cb, schema_gen, flatc_exe);
119- reg.Dep (schema_gen, flatc_exe);
120-
121- // Flatbuffers HO lib
122- TargetInfo &flatbuffers_ho_lib =
123- storage.Add <TargetInfo>(" flatbuffers_ho" , " third_party/flatbuffers" );
124- reg.Callback (flatbuffers_ho_cb, flatbuffers_ho_lib);
125-
126- // CLI11 HO lib
127- TargetInfo &cli11_ho_lib =
128- storage.Add <TargetInfo>(" cli11_ho" , " third_party/CLI11" );
129- reg.Callback (cli11_ho_cb, cli11_ho_lib);
130-
131- // fmt HO lib
132- TargetInfo &fmt_ho_lib = storage.Add <TargetInfo>(" fmt_ho" , " third_party/fmt" );
133- reg.Callback (fmt_ho_cb, fmt_ho_lib);
134-
135- // spdlog HO lib
136- TargetInfo &spdlog_ho_lib =
137- storage.Add <TargetInfo>(" spdlog_ho" , " third_party/spdlog" );
138- reg.Callback (spdlog_ho_cb, spdlog_ho_lib);
139-
140- // taskflow HO lib
141- TargetInfo &taskflow_ho_lib =
142- storage.Add <TargetInfo>(" taskflow_ho" , " third_party/taskflow" );
143- reg.Callback (taskflow_ho_cb, taskflow_ho_lib);
144-
145- // Tiny-process-library lib
146- // TODO, Make this a generic selection between StaticTarget and DynamicTarget
147- StaticTarget_generic &tpl_lib = storage.Add <StaticTarget_generic>(
148- " libtpl" , " libtpl" , toolchain, " third_party/tiny-process-library" );
149- reg.CallbackIf (custom_toolchain_arg.state , global_flags_cb, tpl_lib,
150- toolchain);
151- reg.Build (custom_toolchain_arg.state , tpl_cb, tpl_lib);
152-
153- // TODO, Make this a generic selection between StaticTarget and DynamicTarget
154- StaticTarget_generic &buildcc_lib = storage.Add <StaticTarget_generic>(
155- " libbuildcc" , " libbuildcc" , toolchain, " buildcc" );
156- reg.CallbackIf (custom_toolchain_arg.state , global_flags_cb, buildcc_lib,
157- toolchain);
158- reg.Build (custom_toolchain_arg.state , buildcc_cb, buildcc_lib, schema_gen,
159- flatbuffers_ho_lib, fmt_ho_lib, spdlog_ho_lib, cli11_ho_lib,
160- taskflow_ho_lib, tpl_lib);
161- reg.Dep (buildcc_lib, schema_gen);
162- reg.Dep (buildcc_lib, tpl_lib);
163- }
164-
16576static void hybrid_simple_example_cb (BaseTarget &target,
16677 const BaseTarget &libbuildcc) {
78+ target.AddLibDep (libbuildcc);
16779 target.Insert (libbuildcc, {
16880 SyncOption::PreprocessorFlags,
16981 SyncOption::CppCompileFlags,
@@ -174,6 +86,5 @@ static void hybrid_simple_example_cb(BaseTarget &target,
17486 SyncOption::ExternalLibDeps,
17587 });
17688 target.AddSource (" build.cpp" );
177- target.AddLibDep (libbuildcc);
17889 target.Build ();
17990}
0 commit comments