diff options
author | 2023-10-12 19:30:51 +0000 | |
---|---|---|
committer | 2023-10-17 13:58:22 +0000 | |
commit | 7c124e035f6d14a66c830097ece875915ca4faeb (patch) | |
tree | 27e93ebb554e05e277f2e8f1a5695d328ce14a28 | |
parent | fe455d1c0c193622013518c02f6c1ff427538bfe (diff) |
aconfig: support api behind a macro flag in c/cpp
Bug: b/299673148
Test: atest aconfig.test
Change-Id: I54011de7b8eb52c97a84a93aa1cb955a9eb02706
-rw-r--r-- | tools/aconfig/src/codegen_cpp.rs | 24 | ||||
-rw-r--r-- | tools/aconfig/templates/cpp_exported_header.template | 32 | ||||
-rw-r--r-- | tools/aconfig/templates/cpp_source_file.template | 16 |
3 files changed, 59 insertions, 13 deletions
diff --git a/tools/aconfig/src/codegen_cpp.rs b/tools/aconfig/src/codegen_cpp.rs index cf0abb9523..aeb57a3126 100644 --- a/tools/aconfig/src/codegen_cpp.rs +++ b/tools/aconfig/src/codegen_cpp.rs @@ -34,13 +34,17 @@ where let class_elements: Vec<ClassElement> = parsed_flags_iter.map(|pf| create_class_element(package, pf)).collect(); let readwrite = class_elements.iter().any(|item| item.readwrite); + let has_fixed_read_only = class_elements.iter().any(|item| item.is_fixed_read_only); let header = package.replace('.', "_"); + let package_macro = header.to_uppercase(); let cpp_namespace = package.replace('.', "::"); ensure!(codegen::is_valid_name_ident(&header)); let context = Context { header: &header, + package_macro: &package_macro, cpp_namespace: &cpp_namespace, package, + has_fixed_read_only, readwrite, for_test: codegen_mode == CodegenMode::Test, class_elements, @@ -79,8 +83,10 @@ pub struct FileSpec<'a> { #[derive(Serialize)] pub struct Context<'a> { pub header: &'a str, + pub package_macro: &'a str, pub cpp_namespace: &'a str, pub package: &'a str, + pub has_fixed_read_only: bool, pub readwrite: bool, pub for_test: bool, pub class_elements: Vec<ClassElement>, @@ -89,8 +95,10 @@ pub struct Context<'a> { #[derive(Serialize)] pub struct ClassElement { pub readwrite: bool, + pub is_fixed_read_only: bool, pub default_value: String, pub flag_name: String, + pub flag_macro: String, pub device_config_namespace: String, pub device_config_flag: String, } @@ -98,12 +106,14 @@ pub struct ClassElement { fn create_class_element(package: &str, pf: &ProtoParsedFlag) -> ClassElement { ClassElement { readwrite: pf.permission() == ProtoFlagPermission::READ_WRITE, + is_fixed_read_only: pf.is_fixed_read_only(), default_value: if pf.state() == ProtoFlagState::ENABLED { "true".to_string() } else { "false".to_string() }, flag_name: pf.name().to_string(), + flag_macro: pf.name().to_uppercase(), device_config_namespace: pf.namespace().to_string(), device_config_flag: codegen::create_device_config_ident(package, pf.name()) .expect("values checked at flag parse time"), @@ -118,6 +128,14 @@ mod tests { const EXPORTED_PROD_HEADER_EXPECTED: &str = r#" #pragma once +#ifndef COM_ANDROID_ACONFIG_TEST +#define COM_ANDROID_ACONFIG_TEST(FLAG) COM_ANDROID_ACONFIG_TEST_##FLAG +#endif + +#ifndef COM_ANDROID_ACONFIG_TEST_ENABLED_FIXED_RO +#define COM_ANDROID_ACONFIG_TEST_ENABLED_FIXED_RO true +#endif + #ifdef __cplusplus #include <memory> @@ -149,7 +167,7 @@ inline bool disabled_rw() { } inline bool enabled_fixed_ro() { - return true; + return COM_ANDROID_ACONFIG_TEST_ENABLED_FIXED_RO; } inline bool enabled_ro() { @@ -319,7 +337,7 @@ namespace com::android::aconfig::test { } virtual bool enabled_fixed_ro() override { - return true; + return COM_ANDROID_ACONFIG_TEST_ENABLED_FIXED_RO; } virtual bool enabled_ro() override { @@ -348,7 +366,7 @@ bool com_android_aconfig_test_disabled_rw() { } bool com_android_aconfig_test_enabled_fixed_ro() { - return true; + return COM_ANDROID_ACONFIG_TEST_ENABLED_FIXED_RO; } bool com_android_aconfig_test_enabled_ro() { diff --git a/tools/aconfig/templates/cpp_exported_header.template b/tools/aconfig/templates/cpp_exported_header.template index 4d56dbc7f0..6413699ffd 100644 --- a/tools/aconfig/templates/cpp_exported_header.template +++ b/tools/aconfig/templates/cpp_exported_header.template @@ -1,9 +1,25 @@ #pragma once +{{ if not for_test- }} +{{ if has_fixed_read_only- }} +#ifndef {package_macro} +#define {package_macro}(FLAG) {package_macro}_##FLAG +#endif +{{ for item in class_elements- }} +{{ if item.is_fixed_read_only- }} +#ifndef {package_macro}_{item.flag_macro} +#define {package_macro}_{item.flag_macro} {item.default_value} +#endif +{{ endif }} +{{ -endfor }} +{{ -endif }} +{{ -endif }} + #ifdef __cplusplus #include <memory> + namespace {cpp_namespace} \{ class flag_provider_interface \{ @@ -15,7 +31,7 @@ public: {{ if for_test }} virtual void {item.flag_name}(bool val) = 0; {{ -endif }} - {{ endfor }} + {{ -endfor }} {{ if for_test }} virtual void reset_flags() \{} @@ -29,10 +45,14 @@ inline bool {item.flag_name}() \{ {{ if for_test }} return provider_->{item.flag_name}(); {{ -else- }} - {{ if not item.readwrite- }} - return {item.default_value}; - {{ -else- }} + {{ if item.readwrite- }} return provider_->{item.flag_name}(); + {{ -else- }} + {{ if item.is_fixed_read_only }} + return {package_macro}_{item.flag_macro}; + {{ -else- }} + return {item.default_value}; + {{ -endif }} {{ -endif }} {{ -endif }} } @@ -42,7 +62,7 @@ inline void {item.flag_name}(bool val) \{ provider_->{item.flag_name}(val); } {{ -endif }} -{{ endfor }} +{{ -endfor }} {{ if for_test }} inline void reset_flags() \{ @@ -61,7 +81,7 @@ bool {header}_{item.flag_name}(); {{ if for_test }} void set_{header}_{item.flag_name}(bool val); {{ -endif }} -{{ endfor - }} +{{ -endfor }} {{ if for_test }} void {header}_reset_flags(); diff --git a/tools/aconfig/templates/cpp_source_file.template b/tools/aconfig/templates/cpp_source_file.template index 5b71b31770..0f1b845786 100644 --- a/tools/aconfig/templates/cpp_source_file.template +++ b/tools/aconfig/templates/cpp_source_file.template @@ -58,7 +58,11 @@ namespace {cpp_namespace} \{ "{item.device_config_flag}", "{item.default_value}") == "true"; {{ -else- }} - return {item.default_value}; + {{ if item.is_fixed_read_only }} + return {package_macro}_{item.flag_macro}; + {{ -else- }} + return {item.default_value}; + {{ -endif }} {{ -endif }} } {{ endfor }} @@ -79,10 +83,14 @@ bool {header}_{item.flag_name}() \{ {{ if for_test }} return {cpp_namespace}::{item.flag_name}(); {{ -else- }} - {{ if not item.readwrite- }} - return {item.default_value}; - {{ -else- }} + {{ if item.readwrite- }} return {cpp_namespace}::{item.flag_name}(); + {{ -else- }} + {{ if item.is_fixed_read_only }} + return {package_macro}_{item.flag_macro}; + {{ -else- }} + return {item.default_value}; + {{ -endif }} {{ -endif }} {{ -endif }} } |