@@ -14,20 +14,18 @@ We are only using a single Toolchain - Target pair
14
14
:linenos:
15
15
16
16
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
-
20
17
// Register your [toolchain.{name}]
21
18
// In this case it will be [toolchain.gcc]
22
19
ArgToolchain arg_gcc;
23
- args.AddToolchain("gcc", "Generic gcc toolchain", arg_gcc);
24
20
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);
27
25
28
26
// Register module
29
- Register reg(args );
30
- reg. Clean(clean_cb);
27
+ Reg::Init( );
28
+ Reg::Call(Args:: Clean()).Func (clean_cb);
31
29
32
30
// TODO, Write your target builds here
33
31
// See examples below
@@ -75,14 +73,13 @@ Compile a single source with a single GCC compiler.
75
73
ExecutableTarget_gcc hello_world("hello_world", gcc, "");
76
74
77
75
// 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);
80
80
81
- // Build Target
82
- reg.RunBuild();
83
-
84
- // Test Target
85
- reg.RunTest();
81
+ // Build and Test Target
82
+ Reg::Run();
86
83
}
87
84
88
85
static void hello_world_build_cb(BaseTarget &target) {
@@ -100,23 +97,21 @@ We are using multiple Toolchain - Target pairs
100
97
:linenos:
101
98
102
99
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
-
106
100
// Register your [toolchain.{name}]
107
101
// In this case it will be [toolchain.gcc] and [toolchain.msvc]
108
102
ArgToolchain arg_gcc;
109
103
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
113
104
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
116
111
117
112
// Register module
118
- Register reg(args );
119
- reg. Clean(clean_cb);
113
+ Reg::Init( );
114
+ Reg::Call(Args:: Clean()).Func (clean_cb);
120
115
121
116
// TODO, Write your target builds here
122
117
// See examples below
@@ -167,30 +162,30 @@ Similar to lowlevel GCC Flags example for both the GCC and MSVC compiler
167
162
// See Multiple Boilerplate
168
163
169
164
Toolchain_gcc gcc;
170
- Toolchain_msvc msvc;
171
-
172
165
ExecutableTarget_gcc g_cppflags("cppflags", gcc, "files");
173
- ExecutableTarget_msvc m_cppflags("cppflags", msvc, "files");
174
166
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");
175
177
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);
176
184
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;
194
189
}
195
190
196
191
static void cppflags_build_cb(BaseTarget &cppflags) {
@@ -301,7 +296,6 @@ For end users consuming third party libraries
301
296
302
297
.. code-block :: cpp
303
298
:linenos:
304
- :emphasize-lines: 18
305
299
306
300
#include "build.foo.h"
307
301
@@ -312,13 +306,16 @@ For end users consuming third party libraries
312
306
Toolchain_gcc gcc;
313
307
Toolchain_msvc msvc;
314
308
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("... ");
317
311
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);
320
317
321
- reg.RunBuild ();
318
+ Reg::Run ();
322
319
}
323
320
324
321
static void foolib_build_cb(BaseTarget &target) {
@@ -334,48 +331,43 @@ For super customized targets and toolchains
334
331
335
332
.. code-block :: cpp
336
333
:linenos:
337
- :emphasize-lines: 12,13,30,34,35,36
338
334
339
335
int main(int argc, char ** argv) {
340
336
341
- Args args;
342
337
ArgToolchain arg_gcc;
343
338
ArgToolchain arg_msvc;
344
339
ArgToolchain toolchain_clang_gnu;
345
340
ArgTarget target_clang_gnu;
346
- args.AddToolchain("gcc", "Generic gcc toolchain", arg_gcc);
347
- args.AddToolchain("msvc", "Generic msvc toolchain", arg_msvc);
348
341
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);
354
348
355
349
// Additional boilerplate
356
350
357
351
// Supplied at compile time
358
352
Toolchain_gcc gcc;
359
353
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
-
367
354
// Get custom toolchain from the command line, supplied at run time
368
355
BaseToolchain clang = toolchain_clang_gnu.ConstructToolchain();
369
356
357
+ ExecutableTarget_gcc g_foolib("foolib", gcc, "");
358
+ ExecutableTarget_msvc m_foolib("foolib", msvc, "");
370
359
// 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);
376
368
377
369
// Build targets
378
- reg.RunBuild ();
370
+ Reg::Run ();
379
371
}
380
372
381
373
static void foolib_build_cb(BaseTarget &target) {
@@ -387,7 +379,6 @@ For super customized targets and toolchains
387
379
388
380
.. code-block :: toml
389
381
:linenos:
390
- :emphasize-lines: 4,18
391
382
392
383
# See Multiple boilerplate .toml file
393
384
@@ -418,7 +409,6 @@ Precompile header usage with GCC and MSVC compilers
418
409
419
410
.. code-block :: cpp
420
411
:linenos:
421
- :emphasize-lines: 8,9,10,36,37,38
422
412
423
413
// Modified Lowlevel GCC Flags example for PCH
424
414
@@ -487,7 +477,6 @@ Chain **Generators** and **Targets** using the ``Register`` module
487
477
488
478
.. code-block :: cpp
489
479
:linenos:
490
- :emphasize-lines: 7,8,17,18
491
480
492
481
int main(int argc, char ** argv) {
493
482
// See Multiple Boilerplate
@@ -496,17 +485,19 @@ Chain **Generators** and **Targets** using the ``Register`` module
496
485
Toolchain_msvc msvc;
497
486
498
487
BaseGenerator cpp_generator("cpp_generator", "");
499
- reg .Build(cpp_generator_cb, cpp_generator);
488
+ Reg::Call() .Build(cpp_generator_cb, cpp_generator);
500
489
501
490
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);
503
495
504
496
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);
510
501
}
511
502
512
503
// Use a python generator to create main.cpp
@@ -537,7 +528,6 @@ Target Info
537
528
538
529
.. code-block :: cpp
539
530
:linenos:
540
- :emphasize-lines: 8,9
541
531
542
532
int main(int argc, char ** argv) {
543
533
// See Multiple boilerplate
@@ -546,14 +536,17 @@ Target Info
546
536
Toolchain_msvc msvc;
547
537
548
538
// TargetInfo
549
- TargetInfo genericadd_ho("files");
550
- reg.Callback(genericadd_ho_cb, genericadd_ho);
551
-
539
+ TargetInfo g_genericadd_ho(gcc, "files");
552
540
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);
554
544
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);
557
550
}
558
551
559
552
// HO library contains include dirs and header files which are copied into executable target
0 commit comments