Skip to content

Commit dd956eb

Browse files
committed
deploy: f51e232
1 parent 4ced0b8 commit dd956eb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+1000
-705
lines changed

.doctrees/environment.pickle

49.8 KB
Binary file not shown.

.doctrees/examples/hybrid.doctree

83 Bytes
Binary file not shown.
Binary file not shown.
Binary file not shown.

.doctrees/user_api/args.doctree

33 KB
Binary file not shown.

.doctrees/user_api/register.doctree

71.9 KB
Binary file not shown.

_sources/examples/hybrid.rst.txt

Lines changed: 83 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,18 @@ We are only using a single Toolchain - Target pair
1414
:linenos:
1515
1616
int main(int argc, char ** argv) {
17-
// Args module to get data from the command line or .toml file passed in through --config
18-
Args args;
19-
2017
// Register your [toolchain.{name}]
2118
// In this case it will be [toolchain.gcc]
2219
ArgToolchain arg_gcc;
23-
args.AddToolchain("gcc", "Generic gcc toolchain", arg_gcc);
2420
25-
// Parse the arguments from the command line
26-
args.Parse(argc, argv);
21+
// Args module to get data from the command line or .toml file passed in through --config
22+
Args::Init()
23+
.AddToolchain("gcc", "Generic gcc toolchain", arg_gcc)
24+
.Parse(argc, argv);
2725
2826
// Register module
29-
Register reg(args);
30-
reg.Clean(clean_cb);
27+
Reg::Init();
28+
Reg::Call(Args::Clean()).Func(clean_cb);
3129
3230
// TODO, Write your target builds here
3331
// See examples below
@@ -75,14 +73,13 @@ Compile a single source with a single GCC compiler.
7573
ExecutableTarget_gcc hello_world("hello_world", gcc, "");
7674
7775
// Select your builds and tests using the .toml files
78-
reg.Build(arg_gcc.state, hello_world_build_cb, hello_world);
79-
reg.Test(arg_gcc.state, "{executable}", hello_world);
76+
Reg::Toolchain(arg_gcc.state)
77+
.Func([&]() { gcc.Verify(); })
78+
.Build(arg_gcc.state, hello_world_build_cb, hello_world)
79+
.Test(arg_gcc.state, "{executable}", hello_world);
8080
81-
// Build Target
82-
reg.RunBuild();
83-
84-
// Test Target
85-
reg.RunTest();
81+
// Build and Test Target
82+
Reg::Run();
8683
}
8784
8885
static void hello_world_build_cb(BaseTarget &target) {
@@ -100,23 +97,21 @@ We are using multiple Toolchain - Target pairs
10097
:linenos:
10198
10299
int main(int argc, char ** argv) {
103-
// Args module to get data from the command line or .toml file passed in through --config
104-
Args args;
105-
106100
// Register your [toolchain.{name}]
107101
// In this case it will be [toolchain.gcc] and [toolchain.msvc]
108102
ArgToolchain arg_gcc;
109103
ArgToolchain arg_msvc;
110-
args.AddToolchain("gcc", "Generic gcc toolchain", arg_gcc);
111-
args.AddToolchain("msvc", "Generic msvc toolchain", arg_msvc);
112-
// NOTE, You can add more toolchains here as per your project requirement
113104
114-
// Parse the arguments from the command line
115-
args.Parse(argc, argv);
105+
// Args module to get data from the command line or .toml file passed in through --config
106+
Args::Init()
107+
.AddToolchain("gcc", "Generic gcc toolchain", arg_gcc)
108+
.AddToolchain("msvc", "Generic msvc toolchain", arg_msvc)
109+
.Parse(argc, argv);
110+
// NOTE, You can add more toolchains here as per your project requirement
116111
117112
// Register module
118-
Register reg(args);
119-
reg.Clean(clean_cb);
113+
Reg::Init();
114+
Reg::Call(Args::Clean()).Func(clean_cb);
120115
121116
// TODO, Write your target builds here
122117
// See examples below
@@ -167,30 +162,30 @@ Similar to lowlevel GCC Flags example for both the GCC and MSVC compiler
167162
// See Multiple Boilerplate
168163
169164
Toolchain_gcc gcc;
170-
Toolchain_msvc msvc;
171-
172165
ExecutableTarget_gcc g_cppflags("cppflags", gcc, "files");
173-
ExecutableTarget_msvc m_cppflags("cppflags", msvc, "files");
174166
ExecutableTarget_gcc g_cflags("cflags", gcc, "files");
167+
// Select your builds and tests using the .toml files
168+
Reg::Toolchain(arg_gcc.state)
169+
.Func([&](){ gcc.Verify(); })
170+
.Build(cppflags_build_cb, g_cppflags)
171+
.Build(cflags_build_cb, g_cflags)
172+
.Test("{executable}", g_cppflags)
173+
.Test("{executable}", g_cflags);
174+
175+
Toolchain_msvc msvc;
176+
ExecutableTarget_msvc m_cppflags("cppflags", msvc, "files");
175177
ExecutableTarget_msvc m_cflags("cflags", msvc, "files");
178+
Reg::Toolchain(arg_msvc.state)
179+
.Func([&](){ msvc.Verify(); })
180+
.Build(cppflags_build_cb, m_cppflags)
181+
.Build(cflags_build_cb, m_cflags)
182+
.Test("{executable}", m_cppflags)
183+
.Test("{executable}", m_cflags);
176184
177-
// Select your builds and tests using the .toml files
178-
reg.Build(arg_gcc.state, cppflags_build_cb, g_cppflags);
179-
reg.Build(arg_msvc.state, cppflags_build_cb, m_cppflags);
180-
reg.Build(arg_gcc.state, cflags_build_cb, g_cflags);
181-
reg.Build(arg_msvc.state, cflags_build_cb, m_cflags);
182-
183-
// Test steps
184-
reg.Test(arg_gcc.state, "{executable}", g_cppflags);
185-
reg.Test(arg_msvc.state, "{executable}", m_cppflags);
186-
reg.Test(arg_gcc.state, "{executable}", g_cflags);
187-
reg.Test(arg_msvc.state, "{executable}", m_cflags);
188-
189-
// Build Target
190-
reg.RunBuild();
191-
192-
// Test Target
193-
reg.RunTest();
185+
// Build and Test target
186+
Reg::Run();
187+
188+
return 0;
194189
}
195190
196191
static void cppflags_build_cb(BaseTarget &cppflags) {
@@ -301,7 +296,6 @@ For end users consuming third party libraries
301296
302297
.. code-block:: cpp
303298
:linenos:
304-
:emphasize-lines: 18
305299
306300
#include "build.foo.h"
307301
@@ -312,13 +306,16 @@ For end users consuming third party libraries
312306
Toolchain_gcc gcc;
313307
Toolchain_msvc msvc;
314308
315-
ExecutableTarget_gcc g_foolib("foolib", gcc, "");
316-
ExecutableTarget_msvc m_foolib("foolib", msvc, "");
309+
ExecutableTarget_gcc g_foolib("foolib", gcc, TargetEnv("..."));
310+
ExecutableTarget_msvc m_foolib("foolib", msvc, TargetEnv("...");
317311
318-
reg.Build(arg_gcc.state, foolib_build_cb, g_foolib);
319-
reg.Build(arg_msvc.state, foolib_build_cb, m_foolib);
312+
Reg::Toolchain(arg_gcc.state)
313+
.Build(foolib_build_cb, g_foolib);
314+
315+
Reg::Toolchain(arg_msvc.state)
316+
.Build(foolib_build_cb, m_foolib);
320317
321-
reg.RunBuild();
318+
Reg::Run();
322319
}
323320
324321
static void foolib_build_cb(BaseTarget &target) {
@@ -334,48 +331,43 @@ For super customized targets and toolchains
334331

335332
.. code-block:: cpp
336333
:linenos:
337-
:emphasize-lines: 12,13,30,34,35,36
338334
339335
int main(int argc, char ** argv) {
340336
341-
Args args;
342337
ArgToolchain arg_gcc;
343338
ArgToolchain arg_msvc;
344339
ArgToolchain toolchain_clang_gnu;
345340
ArgTarget target_clang_gnu;
346-
args.AddToolchain("gcc", "Generic gcc toolchain", arg_gcc);
347-
args.AddToolchain("msvc", "Generic msvc toolchain", arg_msvc);
348341
349-
// Add your custom toolchain - target to the command line
350-
args.AddToolchain("clang_gnu", "Clang GNU toolchain", toolchain_clang_gnu);
351-
args.AddTarget("clang_gnu", "Clang GNU target", target_clang_gnu);
352-
353-
args.Parse(argc, argv);
342+
Args::Init()
343+
.AddToolchain("gcc", "Generic gcc toolchain", arg_gcc)
344+
.AddToolchain("msvc", "Generic msvc toolchain", arg_msvc)
345+
.AddToolchain("clang_gnu", "Clang GNU toolchain", toolchain_clang_gnu)
346+
.AddTarget("clang_gnu", "Clang GNU target", target_clang_gnu)
347+
.Parse(argc, argv);
354348
355349
// Additional boilerplate
356350
357351
// Supplied at compile time
358352
Toolchain_gcc gcc;
359353
Toolchain_msvc msvc;
360-
361-
ExecutableTarget_gcc g_foolib("foolib", gcc, "");
362-
ExecutableTarget_msvc m_foolib("foolib", msvc, "");
363-
364-
reg.Build(arg_gcc.state, foolib_build_cb, g_foolib);
365-
reg.Build(arg_msvc.state, foolib_build_cb, m_foolib);
366-
367354
// Get custom toolchain from the command line, supplied at run time
368355
BaseToolchain clang = toolchain_clang_gnu.ConstructToolchain();
369356
357+
ExecutableTarget_gcc g_foolib("foolib", gcc, "");
358+
ExecutableTarget_msvc m_foolib("foolib", msvc, "");
370359
// Get compile_command and link_command from the command line
371-
TargetConfig config;
372-
config.compile_command = target_clang_gnu.compile_command;
373-
config.link_command = target_clang_gnu.link_command;
374-
Target_custom c_foolib("CFoolib.exe", TargetType::Executable, clang, "", config);
375-
reg.Build(toolchain_clang_gnu.state, foolib_build_cb, c_foolib);
360+
Target_custom c_foolib("CFoolib.exe", TargetType::Executable, clang, "", target_clang_gnu.GetTargetConfig());
361+
362+
Reg::Toolchain(arg_gcc.state)
363+
.Build(foolib_build_cb, g_foolib);
364+
Reg::Toolchain(arg_msvc.state)
365+
.Build(foolib_build_cb, m_foolib);
366+
Reg::Toolchain(toolchain_clang_gnu.state)
367+
.Build( foolib_build_cb, c_foolib);
376368
377369
// Build targets
378-
reg.RunBuild();
370+
Reg::Run();
379371
}
380372
381373
static void foolib_build_cb(BaseTarget &target) {
@@ -387,7 +379,6 @@ For super customized targets and toolchains
387379
388380
.. code-block:: toml
389381
:linenos:
390-
:emphasize-lines: 4,18
391382
392383
# See Multiple boilerplate .toml file
393384
@@ -418,7 +409,6 @@ Precompile header usage with GCC and MSVC compilers
418409

419410
.. code-block:: cpp
420411
:linenos:
421-
:emphasize-lines: 8,9,10,36,37,38
422412
423413
// Modified Lowlevel GCC Flags example for PCH
424414
@@ -487,7 +477,6 @@ Chain **Generators** and **Targets** using the ``Register`` module
487477

488478
.. code-block:: cpp
489479
:linenos:
490-
:emphasize-lines: 7,8,17,18
491480
492481
int main(int argc, char ** argv) {
493482
// See Multiple Boilerplate
@@ -496,17 +485,19 @@ Chain **Generators** and **Targets** using the ``Register`` module
496485
Toolchain_msvc msvc;
497486
498487
BaseGenerator cpp_generator("cpp_generator", "");
499-
reg.Build(cpp_generator_cb, cpp_generator);
488+
Reg::Call().Build(cpp_generator_cb, cpp_generator);
500489
501490
ExecutableTarget_gcc g_cpptarget("cpptarget", gcc, "");
502-
reg.Build(arg_gcc.state, cpp_target_cb, g_cpptarget, cpp_generator);
491+
Reg::Toolchain(arg_gcc.state)
492+
.Func([&](){ gcc.Verify(); })
493+
.Build(cpp_target_cb, g_cpptarget, cpp_generator)
494+
.Dep(g_cpptarget, cpp_generator);
503495
504496
ExecutableTarget_msvc m_cpptarget("cpptarget", msvc, "");
505-
reg.Build(arg_msvc.state, cpp_target_cb, m_cpptarget, cpp_generator);
506-
507-
// cpp_generator runs before g_cpptarget and m_cpptarget
508-
reg.Dep(g_cpptarget, cpp_generator);
509-
reg.Dep(m_cpptarget, cpp_generator);
497+
Reg::Toolchain(arg_msvc.state)
498+
.Func([&](){ msvc.Verify(); })
499+
.Build(cpp_target_cb, m_cpptarget, cpp_generator)
500+
.Dep(m_cpptarget, cpp_generator);
510501
}
511502
512503
// Use a python generator to create main.cpp
@@ -537,7 +528,6 @@ Target Info
537528

538529
.. code-block:: cpp
539530
:linenos:
540-
:emphasize-lines: 8,9
541531
542532
int main(int argc, char ** argv) {
543533
// See Multiple boilerplate
@@ -546,14 +536,17 @@ Target Info
546536
Toolchain_msvc msvc;
547537
548538
// TargetInfo
549-
TargetInfo genericadd_ho("files");
550-
reg.Callback(genericadd_ho_cb, genericadd_ho);
551-
539+
TargetInfo g_genericadd_ho(gcc, "files");
552540
ExecutableTarget_gcc g_genericadd1("generic_add_1", gcc, "files");
553-
ExecutableTarget_msvc m_genericadd1("generic_add_1", msvc, "files");
541+
Reg::Toolchain(arg_gcc.state)
542+
.Func(genericadd_ho_cb, g_genericadd_ho)
543+
.Build(genericadd1_build_cb, g_genericadd1, g_genericadd_ho);
554544
555-
reg.Build(arg_gcc.state, genericadd1_build_cb, g_genericadd1, genericadd_ho);
556-
reg.Build(arg_msvc.state, genericadd1_build_cb, m_genericadd1, genericadd_ho);
545+
TargetInfo m_genericadd_ho(msvc, "files");
546+
ExecutableTarget_msvc m_genericadd1("generic_add_1", msvc, "files");
547+
Reg::Toolchain(arg_msvc.state)
548+
.Func(genericadd_ho_cb, m_genericadd_ho)
549+
.Build(genericadd1_build_cb, m_genericadd1, m_genericadd_ho);
557550
}
558551
559552
// HO library contains include dirs and header files which are copied into executable target

_sources/getting_started/buildexe_package_manager.rst.txt

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,6 @@ Write your C++ "script"
192192

193193
.. code-block:: cpp
194194
:linenos:
195-
:emphasize-lines: 4,8,38,39,40,43,44,47,48,52,79
196195
197196
#include "buildcc.h"
198197
@@ -210,23 +209,22 @@ Write your C++ "script"
210209
static void hello_world_build_cb(BaseTarget &target, BaseTarget &fmt_lib);
211210
212211
int main(int argc, char **argv) {
213-
// 1. Get arguments
214-
Args args;
212+
// Get arguments
215213
ArgToolchain arg_gcc;
216-
args.AddToolchain("gcc", "Generic gcc toolchain", arg_gcc);
217-
args.Parse(argc, argv);
218214
219-
// 2. Initialize your environment
220-
Register reg(args);
215+
Args::Init()
216+
.AddToolchain("gcc", "Generic gcc toolchain", arg_gcc)
217+
.Parse(argc, argv);
221218
222-
// 3. Pre-build steps
223-
reg.Clean(clean_cb);
219+
// Initialize your environment
220+
Reg::Init();
224221
225-
// 4. Build steps
222+
// Pre-build steps
223+
Reg::Call(Args::Clean().Func(clean_cb);
224+
225+
// Build steps
226226
// Explicit toolchain - target pairs
227227
Toolchain_gcc gcc;
228-
auto verified_toolchains = gcc.Verify();
229-
env::assert_fatal(!verified_toolchains.empty(), "GCC Toolchain not found");
230228
231229
// Setup your [Library]Target_[toolchain] fmtlib instance
232230
// Update your TargetEnv to point to `BuildExeLibDir::fmt` folder
@@ -237,29 +235,24 @@ Write your C++ "script"
237235
238236
// We use the build.fmt.h and build.fmt.cpp APIs to define how we build our fmtlib
239237
FmtConfig fmt_config;
240-
reg.Build(arg_gcc.state, build_fmt_cb, fmt_lib, fmt_config);
241238
242239
// Define our hello world executable
243240
ExecutableTarget_gcc hello_world("hello_world", gcc, "");
244-
reg.Build(arg_gcc.state, hello_world_build_cb, hello_world, fmt_lib);
245-
241+
246242
// Fmt lib is a dependency to the Hello world executable
247243
// This means that fmt lib is guaranteed to be built before the hello world executable
248-
reg.Dep(hello_world, fmt_lib);
249-
250-
// 5. Test steps i.e Hello world is automatically run
251-
reg.Test(arg_gcc.state, "{executable}", hello_world);
244+
Reg::Toolchain(arg_gcc.state)
245+
.Build(arg_gcc.state, build_fmt_cb, fmt_lib, fmt_config)
246+
.Build(hello_world_build_cb, hello_world, fmt_lib)
247+
.Dep(hello_world, fmt_lib)
248+
.Test("{executable}", hello_world);;
249+
252250
253-
// 6. Build Target
251+
// Build and Test Target
254252
// Builds libfmt.a and ./hello_world
255-
reg.RunBuild();
256-
257-
// 7. Test Target
258-
// Executes ./hello_world
259-
// Output -> Hello World
260-
reg.RunTest();
253+
Reg::Run();
261254
262-
// 8. Post Build steps
255+
// Post Build steps
263256
// - Clang Compile Commands
264257
plugin::ClangCompileCommands({&hello_world}).Generate();
265258
// - Graphviz dump

0 commit comments

Comments
 (0)