/* * Copyright 2017 Google Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef FLATBUFFERS_FLATC_H_ #define FLATBUFFERS_FLATC_H_ #include #include #include #include #include #include "flatbuffers/code_generator.h" #include "flatbuffers/flatbuffers.h" #include "flatbuffers/idl.h" #include "flatbuffers/util.h" namespace flatbuffers { extern void LogCompilerWarn(const std::string &warn); extern void LogCompilerError(const std::string &err); struct FlatCOptions { IDLOptions opts; std::string program_name; std::string output_path; std::vector filenames; std::list include_directories_storage; std::vector include_directories; std::vector conform_include_directories; std::vector generator_enabled; size_t binary_files_from = std::numeric_limits::max(); std::string conform_to_schema; std::string annotate_schema; bool annotate_include_vector_contents = true; bool any_generator = false; bool print_make_rules = false; bool raw_binary = false; bool schema_binary = false; bool grpc_enabled = false; bool requires_bfbs = false; bool file_names_only = false; std::vector> generators; }; struct FlatCOption { std::string short_opt; std::string long_opt; std::string parameter; std::string description; }; class FlatCompiler { public: typedef void (*WarnFn)(const FlatCompiler *flatc, const std::string &warn, bool show_exe_name); typedef void (*ErrorFn)(const FlatCompiler *flatc, const std::string &err, bool usage, bool show_exe_name); // Parameters required to initialize the FlatCompiler. struct InitParams { InitParams() : warn_fn(nullptr), error_fn(nullptr) {} WarnFn warn_fn; ErrorFn error_fn; }; explicit FlatCompiler(const InitParams ¶ms) : params_(params) {} bool RegisterCodeGenerator(const FlatCOption &option, std::shared_ptr code_generator); int Compile(const FlatCOptions &options); std::string GetShortUsageString(const std::string &program_name) const; std::string GetUsageString(const std::string &program_name) const; // Parse the FlatC options from command line arguments. FlatCOptions ParseFromCommandLineArguments(int argc, const char **argv); private: void ParseFile(flatbuffers::Parser &parser, const std::string &filename, const std::string &contents, const std::vector &include_directories) const; void LoadBinarySchema(Parser &parser, const std::string &filename, const std::string &contents); void Warn(const std::string &warn, bool show_exe_name = true) const; void Error(const std::string &err, bool usage = true, bool show_exe_name = true) const; void AnnotateBinaries(const uint8_t *binary_schema, uint64_t binary_schema_size, const FlatCOptions &options); void ValidateOptions(const FlatCOptions &options); Parser GetConformParser(const FlatCOptions &options); std::unique_ptr GenerateCode(const FlatCOptions &options, Parser &conform_parser); std::map> code_generators_; InitParams params_; }; } // namespace flatbuffers #endif // FLATBUFFERS_FLATC_H_