xref: /aosp_15_r20/external/flatbuffers/src/flatc_main.cpp (revision 890232f25432b36107d06881e0a25aaa6b473652)
1*890232f2SAndroid Build Coastguard Worker /*
2*890232f2SAndroid Build Coastguard Worker  * Copyright 2017 Google Inc. All rights reserved.
3*890232f2SAndroid Build Coastguard Worker  *
4*890232f2SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*890232f2SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*890232f2SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*890232f2SAndroid Build Coastguard Worker  *
8*890232f2SAndroid Build Coastguard Worker  *     http://www.apache.org/licenses/LICENSE-2.0
9*890232f2SAndroid Build Coastguard Worker  *
10*890232f2SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*890232f2SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*890232f2SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*890232f2SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*890232f2SAndroid Build Coastguard Worker  * limitations under the License.
15*890232f2SAndroid Build Coastguard Worker  */
16*890232f2SAndroid Build Coastguard Worker 
17*890232f2SAndroid Build Coastguard Worker #include <cstdio>
18*890232f2SAndroid Build Coastguard Worker #include <memory>
19*890232f2SAndroid Build Coastguard Worker 
20*890232f2SAndroid Build Coastguard Worker #include "bfbs_gen_lua.h"
21*890232f2SAndroid Build Coastguard Worker #include "flatbuffers/base.h"
22*890232f2SAndroid Build Coastguard Worker #include "flatbuffers/flatc.h"
23*890232f2SAndroid Build Coastguard Worker #include "flatbuffers/util.h"
24*890232f2SAndroid Build Coastguard Worker 
25*890232f2SAndroid Build Coastguard Worker static const char *g_program_name = nullptr;
26*890232f2SAndroid Build Coastguard Worker 
Warn(const flatbuffers::FlatCompiler * flatc,const std::string & warn,bool show_exe_name)27*890232f2SAndroid Build Coastguard Worker static void Warn(const flatbuffers::FlatCompiler *flatc,
28*890232f2SAndroid Build Coastguard Worker                  const std::string &warn, bool show_exe_name) {
29*890232f2SAndroid Build Coastguard Worker   (void)flatc;
30*890232f2SAndroid Build Coastguard Worker   if (show_exe_name) { printf("%s: ", g_program_name); }
31*890232f2SAndroid Build Coastguard Worker   fprintf(stderr, "\nwarning:\n  %s\n\n", warn.c_str());
32*890232f2SAndroid Build Coastguard Worker }
33*890232f2SAndroid Build Coastguard Worker 
Error(const flatbuffers::FlatCompiler * flatc,const std::string & err,bool usage,bool show_exe_name)34*890232f2SAndroid Build Coastguard Worker static void Error(const flatbuffers::FlatCompiler *flatc,
35*890232f2SAndroid Build Coastguard Worker                   const std::string &err, bool usage, bool show_exe_name) {
36*890232f2SAndroid Build Coastguard Worker   if (show_exe_name) { printf("%s: ", g_program_name); }
37*890232f2SAndroid Build Coastguard Worker   if (usage && flatc) {
38*890232f2SAndroid Build Coastguard Worker     fprintf(stderr, "%s\n", flatc->GetShortUsageString(g_program_name).c_str());
39*890232f2SAndroid Build Coastguard Worker   }
40*890232f2SAndroid Build Coastguard Worker   fprintf(stderr, "\nerror:\n  %s\n\n", err.c_str());
41*890232f2SAndroid Build Coastguard Worker   exit(1);
42*890232f2SAndroid Build Coastguard Worker }
43*890232f2SAndroid Build Coastguard Worker 
44*890232f2SAndroid Build Coastguard Worker namespace flatbuffers {
LogCompilerWarn(const std::string & warn)45*890232f2SAndroid Build Coastguard Worker void LogCompilerWarn(const std::string &warn) {
46*890232f2SAndroid Build Coastguard Worker   Warn(static_cast<const flatbuffers::FlatCompiler *>(nullptr), warn, true);
47*890232f2SAndroid Build Coastguard Worker }
LogCompilerError(const std::string & err)48*890232f2SAndroid Build Coastguard Worker void LogCompilerError(const std::string &err) {
49*890232f2SAndroid Build Coastguard Worker   Error(static_cast<const flatbuffers::FlatCompiler *>(nullptr), err, false,
50*890232f2SAndroid Build Coastguard Worker         true);
51*890232f2SAndroid Build Coastguard Worker }
52*890232f2SAndroid Build Coastguard Worker }  // namespace flatbuffers
53*890232f2SAndroid Build Coastguard Worker 
main(int argc,const char * argv[])54*890232f2SAndroid Build Coastguard Worker int main(int argc, const char *argv[]) {
55*890232f2SAndroid Build Coastguard Worker   // Prevent Appveyor-CI hangs.
56*890232f2SAndroid Build Coastguard Worker   flatbuffers::SetupDefaultCRTReportMode();
57*890232f2SAndroid Build Coastguard Worker 
58*890232f2SAndroid Build Coastguard Worker   const std::string flatbuffers_version(flatbuffers::FLATBUFFERS_VERSION());
59*890232f2SAndroid Build Coastguard Worker 
60*890232f2SAndroid Build Coastguard Worker   std::unique_ptr<flatbuffers::BfbsGenerator> bfbs_gen_lua =
61*890232f2SAndroid Build Coastguard Worker       flatbuffers::NewLuaBfbsGenerator(flatbuffers_version);
62*890232f2SAndroid Build Coastguard Worker 
63*890232f2SAndroid Build Coastguard Worker   g_program_name = argv[0];
64*890232f2SAndroid Build Coastguard Worker 
65*890232f2SAndroid Build Coastguard Worker   const flatbuffers::FlatCompiler::Generator generators[] = {
66*890232f2SAndroid Build Coastguard Worker     { flatbuffers::GenerateBinary, "binary", false, nullptr,
67*890232f2SAndroid Build Coastguard Worker       flatbuffers::IDLOptions::kBinary,
68*890232f2SAndroid Build Coastguard Worker       flatbuffers::FlatCOption{
69*890232f2SAndroid Build Coastguard Worker           "b", "binary", "",
70*890232f2SAndroid Build Coastguard Worker           "Generate wire format binaries for any data definitions" },
71*890232f2SAndroid Build Coastguard Worker       flatbuffers::BinaryMakeRule, nullptr, nullptr },
72*890232f2SAndroid Build Coastguard Worker     { flatbuffers::GenerateTextFile, "text", false, nullptr,
73*890232f2SAndroid Build Coastguard Worker       flatbuffers::IDLOptions::kJson,
74*890232f2SAndroid Build Coastguard Worker       flatbuffers::FlatCOption{
75*890232f2SAndroid Build Coastguard Worker           "t", "json", "", "Generate text output for any data definitions" },
76*890232f2SAndroid Build Coastguard Worker 
77*890232f2SAndroid Build Coastguard Worker       flatbuffers::TextMakeRule, nullptr, nullptr },
78*890232f2SAndroid Build Coastguard Worker     { flatbuffers::GenerateCPP, "C++", true, flatbuffers::GenerateCppGRPC,
79*890232f2SAndroid Build Coastguard Worker       flatbuffers::IDLOptions::kCpp,
80*890232f2SAndroid Build Coastguard Worker       flatbuffers::FlatCOption{ "c", "cpp", "",
81*890232f2SAndroid Build Coastguard Worker                                 "Generate C++ headers for tables/structs" },
82*890232f2SAndroid Build Coastguard Worker       flatbuffers::CPPMakeRule, nullptr, nullptr },
83*890232f2SAndroid Build Coastguard Worker     { flatbuffers::GenerateGo, "Go", true, flatbuffers::GenerateGoGRPC,
84*890232f2SAndroid Build Coastguard Worker       flatbuffers::IDLOptions::kGo,
85*890232f2SAndroid Build Coastguard Worker       flatbuffers::FlatCOption{ "g", "go", "",
86*890232f2SAndroid Build Coastguard Worker                                 "Generate Go files for tables/structs" },
87*890232f2SAndroid Build Coastguard Worker       nullptr, nullptr, nullptr },
88*890232f2SAndroid Build Coastguard Worker     { flatbuffers::GenerateJava, "Java", true, flatbuffers::GenerateJavaGRPC,
89*890232f2SAndroid Build Coastguard Worker       flatbuffers::IDLOptions::kJava,
90*890232f2SAndroid Build Coastguard Worker       flatbuffers::FlatCOption{ "j", "java", "",
91*890232f2SAndroid Build Coastguard Worker                                 "Generate Java classes for tables/structs" },
92*890232f2SAndroid Build Coastguard Worker       flatbuffers::JavaMakeRule, nullptr, nullptr },
93*890232f2SAndroid Build Coastguard Worker     { flatbuffers::GenerateDart, "Dart", true, nullptr,
94*890232f2SAndroid Build Coastguard Worker       flatbuffers::IDLOptions::kDart,
95*890232f2SAndroid Build Coastguard Worker       flatbuffers::FlatCOption{ "d", "dart", "",
96*890232f2SAndroid Build Coastguard Worker                                 "Generate Dart classes for tables/structs" },
97*890232f2SAndroid Build Coastguard Worker       flatbuffers::DartMakeRule, nullptr, nullptr },
98*890232f2SAndroid Build Coastguard Worker     { flatbuffers::GenerateTS, "TypeScript", true, flatbuffers::GenerateTSGRPC,
99*890232f2SAndroid Build Coastguard Worker       flatbuffers::IDLOptions::kTs,
100*890232f2SAndroid Build Coastguard Worker       flatbuffers::FlatCOption{ "T", "ts", "",
101*890232f2SAndroid Build Coastguard Worker                                 "Generate TypeScript code for tables/structs" },
102*890232f2SAndroid Build Coastguard Worker       flatbuffers::TSMakeRule, nullptr, nullptr },
103*890232f2SAndroid Build Coastguard Worker     { flatbuffers::GenerateCSharp, "C#", true, nullptr,
104*890232f2SAndroid Build Coastguard Worker       flatbuffers::IDLOptions::kCSharp,
105*890232f2SAndroid Build Coastguard Worker       flatbuffers::FlatCOption{ "n", "csharp", "",
106*890232f2SAndroid Build Coastguard Worker                                 "Generate C# classes for tables/structs" },
107*890232f2SAndroid Build Coastguard Worker       flatbuffers::CSharpMakeRule, nullptr, nullptr },
108*890232f2SAndroid Build Coastguard Worker     { flatbuffers::GeneratePython, "Python", true,
109*890232f2SAndroid Build Coastguard Worker       flatbuffers::GeneratePythonGRPC, flatbuffers::IDLOptions::kPython,
110*890232f2SAndroid Build Coastguard Worker       flatbuffers::FlatCOption{ "p", "python", "",
111*890232f2SAndroid Build Coastguard Worker                                 "Generate Python files for tables/structs" },
112*890232f2SAndroid Build Coastguard Worker       nullptr, nullptr, nullptr },
113*890232f2SAndroid Build Coastguard Worker     { flatbuffers::GenerateLobster, "Lobster", true, nullptr,
114*890232f2SAndroid Build Coastguard Worker       flatbuffers::IDLOptions::kLobster,
115*890232f2SAndroid Build Coastguard Worker       flatbuffers::FlatCOption{ "", "lobster", "",
116*890232f2SAndroid Build Coastguard Worker                                 "Generate Lobster files for tables/structs" },
117*890232f2SAndroid Build Coastguard Worker       nullptr, nullptr, nullptr },
118*890232f2SAndroid Build Coastguard Worker     { flatbuffers::GenerateLua, "Lua", true, nullptr,
119*890232f2SAndroid Build Coastguard Worker       flatbuffers::IDLOptions::kLua,
120*890232f2SAndroid Build Coastguard Worker       flatbuffers::FlatCOption{ "l", "lua", "",
121*890232f2SAndroid Build Coastguard Worker                                 "Generate Lua files for tables/structs" },
122*890232f2SAndroid Build Coastguard Worker       nullptr, bfbs_gen_lua.get(), nullptr },
123*890232f2SAndroid Build Coastguard Worker     { flatbuffers::GenerateRust, "Rust", true, nullptr,
124*890232f2SAndroid Build Coastguard Worker       flatbuffers::IDLOptions::kRust,
125*890232f2SAndroid Build Coastguard Worker       flatbuffers::FlatCOption{ "r", "rust", "",
126*890232f2SAndroid Build Coastguard Worker                                 "Generate Rust files for tables/structs" },
127*890232f2SAndroid Build Coastguard Worker       flatbuffers::RustMakeRule, nullptr,
128*890232f2SAndroid Build Coastguard Worker       flatbuffers::GenerateRustModuleRootFile },
129*890232f2SAndroid Build Coastguard Worker     { flatbuffers::GeneratePhp, "PHP", true, nullptr,
130*890232f2SAndroid Build Coastguard Worker       flatbuffers::IDLOptions::kPhp,
131*890232f2SAndroid Build Coastguard Worker       flatbuffers::FlatCOption{ "", "php", "",
132*890232f2SAndroid Build Coastguard Worker                                 "Generate PHP files for tables/structs" },
133*890232f2SAndroid Build Coastguard Worker       nullptr, nullptr, nullptr },
134*890232f2SAndroid Build Coastguard Worker     { flatbuffers::GenerateKotlin, "Kotlin", true, nullptr,
135*890232f2SAndroid Build Coastguard Worker       flatbuffers::IDLOptions::kKotlin,
136*890232f2SAndroid Build Coastguard Worker       flatbuffers::FlatCOption{ "", "kotlin", "",
137*890232f2SAndroid Build Coastguard Worker                                 "Generate Kotlin classes for tables/structs" },
138*890232f2SAndroid Build Coastguard Worker       nullptr, nullptr, nullptr },
139*890232f2SAndroid Build Coastguard Worker     { flatbuffers::GenerateJsonSchema, "JsonSchema", true, nullptr,
140*890232f2SAndroid Build Coastguard Worker       flatbuffers::IDLOptions::kJsonSchema,
141*890232f2SAndroid Build Coastguard Worker       flatbuffers::FlatCOption{ "", "jsonschema", "", "Generate Json schema" },
142*890232f2SAndroid Build Coastguard Worker       nullptr, nullptr, nullptr },
143*890232f2SAndroid Build Coastguard Worker     { flatbuffers::GenerateSwift, "swift", true, flatbuffers::GenerateSwiftGRPC,
144*890232f2SAndroid Build Coastguard Worker       flatbuffers::IDLOptions::kSwift,
145*890232f2SAndroid Build Coastguard Worker       flatbuffers::FlatCOption{ "", "swift", "",
146*890232f2SAndroid Build Coastguard Worker                                 "Generate Swift files for tables/structs" },
147*890232f2SAndroid Build Coastguard Worker       nullptr, nullptr, nullptr },
148*890232f2SAndroid Build Coastguard Worker   };
149*890232f2SAndroid Build Coastguard Worker 
150*890232f2SAndroid Build Coastguard Worker   flatbuffers::FlatCompiler::InitParams params;
151*890232f2SAndroid Build Coastguard Worker   params.generators = generators;
152*890232f2SAndroid Build Coastguard Worker   params.num_generators = sizeof(generators) / sizeof(generators[0]);
153*890232f2SAndroid Build Coastguard Worker   params.warn_fn = Warn;
154*890232f2SAndroid Build Coastguard Worker   params.error_fn = Error;
155*890232f2SAndroid Build Coastguard Worker 
156*890232f2SAndroid Build Coastguard Worker   flatbuffers::FlatCompiler flatc(params);
157*890232f2SAndroid Build Coastguard Worker   return flatc.Compile(argc, argv);
158*890232f2SAndroid Build Coastguard Worker }
159