8#include "utils/StringPrintf.cxx"
11bool raw_render =
false;
17template <
int N>
void render_all_cdi()
19 printf(
"// skipping config %d\n", N);
20 render_all_cdi<N - 1>();
23template <
typename CdiType>
24void render_cdi_helper(
const CdiType &t,
string ns,
string name)
27 t.config_renderer().render_cdi(&payload);
33 string filename = name +
".xmlout";
34 printf(
"Writing %d bytes to %s\n", (
int)payload.size(),
40 printf(
"namespace %s {\n\nextern const char %s_DATA[];\n", ns.c_str(),
42 printf(
"// This is a C++11 raw string.\n");
43 printf(
"const char %s_DATA[] = R\"xmlpayload(%s)xmlpayload\";\n",
44 name.c_str(), payload.c_str());
45 printf(
"extern const size_t %s_SIZE;\n", name.c_str());
46 printf(
"extern const size_t %s_SIZE = sizeof(%s_DATA);\n", name.c_str(),
48 printf(
"extern const size_t %s_END_OFFSET = %u;\n", name.c_str(),
49 (
unsigned)t.end_offset());
50 printf(
"\n} // namespace %s\n\n", ns.c_str());
54int main(
int argc,
char *argv[])
56 if (argc > 1 &&
string(argv[1]) ==
"-r")
63/* Generated code based off of config.hxx */
74 std::vector<unsigned> event_offsets;
75 openlcb::ConfigDef def(0);
76 def.handle_events([&event_offsets](
unsigned o)
78 event_offsets.push_back(o);
80 printf(
"namespace openlcb {\nextern const uint16_t CDI_EVENT_OFFSETS[] = {\n ");
81 for (
unsigned o : event_offsets)
85 printf(
"0};\n} // namespace openlcb\n");
#define RENDER_CDI(NS, TYPE, NAME, N)
Use this macro if additional CDI entries need to be rendered, in addition to the openlcb::ConfigDef.
void write_string_to_file(const string &filename, const string &data)
Opens (or creates) a file, truncates it and overwrites the contents with what is given in a string.