aconfig: add c codegen

c codegen can be done at the same time with cpp codegen, the idea is to
create a c compatible header that defines the flag apis, including flag
override apis for test. then in the corresponding cpp file, the
implementation simply calls into cpp api.

c header supports static method interface, and unit test override, but
it does not support injection pattern compared to cpp header

Bug: b/279483801
Test: atest aconfig.test
Change-Id: Ie62b76d6524e443de5d3c2f9000f7f66623ab571
diff --git a/tools/aconfig/templates/c_source_file.template b/tools/aconfig/templates/c_source_file.template
new file mode 100644
index 0000000..18da299
--- /dev/null
+++ b/tools/aconfig/templates/c_source_file.template
@@ -0,0 +1,21 @@
+#include "{header}_c.h"
+#include "{header}.h"
+#include <string>
+
+{{ for item in class_elements}}
+const char* {header}_{item.uppercase_flag_name} = "{item.device_config_flag}";
+{{ endfor - }}
+
+{{ for item in class_elements}}
+bool {header}_{item.flag_name}() \{
+    return {cpp_namespace}::{item.flag_name}();
+}
+{{ endfor }}
+
+void {header}_override_flag(const char* name, bool val) \{
+     {cpp_namespace}::override_flag(std::string(name), val);
+}
+
+void {header}_reset_overrides() \{
+     {cpp_namespace}::reset_overrides();
+}