Skip to content

Commit 55cd0ea

Browse files
committed
feat: Validate recipe plugins on build and bundles
1 parent 3b19c59 commit 55cd0ea

File tree

4 files changed

+64
-22
lines changed

4 files changed

+64
-22
lines changed

ecsact/cli/commands/BUILD.bazel

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,14 @@ cc_library(
3434
hdrs = ["common.hh"],
3535
copts = copts,
3636
deps = [
37-
"@docopt.cpp//:docopt",
3837
"//ecsact/cli:report",
3938
"//ecsact/cli:report_message",
4039
"//ecsact/cli/detail:json_report",
4140
"//ecsact/cli/detail:text_report",
41+
"@docopt.cpp//:docopt",
4242
],
4343
)
4444

45-
4645
cc_library(
4746
name = "codegen",
4847
srcs = ["codegen.cc"],
@@ -51,15 +50,15 @@ cc_library(
5150
deps = [
5251
":command",
5352
":common",
54-
"//ecsact/cli/commands/codegen:codegen",
55-
"@magic_enum",
56-
"@docopt.cpp//:docopt",
53+
"//ecsact/cli/commands/codegen",
5754
"@boost.dll",
58-
"@ecsact_interpret",
55+
"@docopt.cpp//:docopt",
5956
"@ecsact_codegen//:plugin",
6057
"@ecsact_codegen//:plugin_validate",
58+
"@ecsact_interpret",
6159
"@ecsact_runtime//:dylib",
6260
"@ecsact_runtime//:meta",
61+
"@magic_enum",
6362
],
6463
)
6564

@@ -86,13 +85,14 @@ cc_library(
8685
":common",
8786
"//ecsact/cli:report",
8887
"//ecsact/cli:report_message",
89-
"//ecsact/cli/commands/build/recipe:taste",
90-
"//ecsact/cli/commands/build/recipe:cook",
91-
"//ecsact/cli/commands/build:cc_compiler",
9288
"//ecsact/cli/commands/build:build_recipe",
89+
"//ecsact/cli/commands/build:cc_compiler",
90+
"//ecsact/cli/commands/build/recipe:cook",
91+
"//ecsact/cli/commands/build/recipe:taste",
9392
"//ecsact/cli/commands/recipe-bundle:build_recipe_bundle",
94-
"@ecsact_interpret",
9593
"@docopt.cpp//:docopt",
94+
"@ecsact_codegen//:plugin_validate",
95+
"@ecsact_interpret",
9696
"@magic_enum",
9797
],
9898
)
@@ -110,8 +110,9 @@ cc_library(
110110
"//ecsact/cli/commands/build:build_recipe",
111111
"//ecsact/cli/commands/recipe-bundle:build_recipe_bundle",
112112
"//ecsact/cli/detail:argv0",
113-
"@ecsact_interpret",
114113
"@docopt.cpp//:docopt",
114+
"@ecsact_codegen//:plugin_validate",
115+
"@ecsact_interpret",
115116
"@magic_enum",
116117
],
117118
)

ecsact/cli/commands/build.cc

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "ecsact/cli/commands/build/recipe/cook.hh"
2222
#include "ecsact/cli/commands/build/recipe/taste.hh"
2323
#include "ecsact/cli/commands/recipe-bundle/build_recipe_bundle.hh"
24+
#include "ecsact/codegen/plugin_validate.hh"
2425

2526
namespace fs = std::filesystem;
2627

@@ -173,6 +174,24 @@ auto ecsact::cli::detail::build_command( //
173174
}
174175

175176
auto recipe = std::move(std::get<build_recipe>(recipe_result));
177+
178+
for(auto& source : recipe.sources()) {
179+
auto result = std::get_if<build_recipe::source_codegen>(&source);
180+
if(result) {
181+
if(result->plugins.empty()) {
182+
ecsact::cli::report_error(
183+
"Recipe source has no plugins {}",
184+
recipe_path_str
185+
);
186+
return 1;
187+
}
188+
189+
for(auto plugin : result->plugins) {
190+
ecsact::codegen::plugin_validate(plugin);
191+
}
192+
}
193+
}
194+
176195
if(!recipe_composite) {
177196
recipe_composite.emplace(std::move(recipe));
178197
} else {

ecsact/cli/commands/build/recipe/cook.cc

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -584,16 +584,7 @@ auto cl_compile(compile_options options) -> int {
584584
cl_args.push_back("/diagnostics:column");
585585
cl_args.push_back("/DECSACT_BUILD");
586586

587-
// TODO(zaucy): Add debug mode
588-
// if(options.debug) {
589-
// compile_proc_args.push_back("/DEBUG:FULL");
590-
// compile_proc_args.push_back("/MDd");
591-
// compile_proc_args.push_back("/Z7");
592-
// compile_proc_args.push_back("/EHsc");
593-
// compile_proc_args.push_back("/bigobj");
594-
// }
595-
596-
// cl_args.push_back("/we4530"); // treat exceptions as errors
587+
cl_args.push_back("/we4530"); // treat exceptions as errors
597588
cl_args.push_back("/wd4530"); // ignore use of exceptions warning
598589
cl_args.push_back("/MD");
599590
cl_args.push_back("/DNDEBUG");
@@ -605,6 +596,18 @@ auto cl_compile(compile_options options) -> int {
605596
std::format("{}\\", fs::path{options.work_dir}.lexically_normal().string())
606597
);
607598

599+
if(!options.debug) {
600+
cl_args.push_back("/MD");
601+
cl_args.push_back("/DNDEBUG");
602+
} else {
603+
cl_args.push_back("/FC"); // full source paths
604+
cl_args.push_back("/MD");
605+
cl_args.push_back("/Z7");
606+
cl_args.push_back("/EHsc");
607+
cl_args.push_back("/bigobj");
608+
cl_args.push_back("/Od");
609+
}
610+
608611
auto generated_defines =
609612
ecsact::cli::cc_defines_gen(options.imports, options.exports);
610613

ecsact/cli/commands/recipe-bundle.cc

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "ecsact/cli/commands/common.hh"
1818
#include "ecsact/cli/commands/build/build_recipe.hh"
1919
#include "ecsact/cli/commands/recipe-bundle/build_recipe_bundle.hh"
20+
#include "ecsact/codegen/plugin_validate.hh"
2021

2122
namespace fs = std::filesystem;
2223

@@ -82,7 +83,7 @@ auto ecsact::cli::detail::recipe_bundle_command( //
8283

8384
auto recipe_composite = std::optional<build_recipe>{};
8485
auto recipe_paths = args.at("<recipe>").asStringList();
85-
for(auto recipe_path : args.at("<recipe>").asStringList()) {
86+
for(auto recipe_path : recipe_paths) {
8687
auto recipe_result = build_recipe::from_yaml_file(recipe_path);
8788

8889
if(std::holds_alternative<build_recipe_parse_error>(recipe_result)) {
@@ -95,6 +96,24 @@ auto ecsact::cli::detail::recipe_bundle_command( //
9596
}
9697

9798
auto recipe = std::move(std::get<build_recipe>(recipe_result));
99+
100+
for(auto& source : recipe.sources()) {
101+
auto result = std::get_if<build_recipe::source_codegen>(&source);
102+
if(result) {
103+
if(result->plugins.empty()) {
104+
ecsact::cli::report_error(
105+
"Recipe source has no plugins {}",
106+
recipe_path
107+
);
108+
return 1;
109+
}
110+
111+
for(auto plugin : result->plugins) {
112+
ecsact::codegen::plugin_validate(plugin);
113+
}
114+
}
115+
}
116+
98117
if(!recipe_composite) {
99118
recipe_composite.emplace(std::move(recipe));
100119
} else {

0 commit comments

Comments
 (0)