android_packages_modules_Co.../common/Android.bp
Maciej Żenczykowski 1c59188cf0 NetBpfLoad: use libbpf based on mainline beta flag, part 2
Disable shared version of libtetheringflags
  - since the flags are readonly there is no real content to this,
    and it should be statically linked for compile/link time optimization
    (which should basically optimize the entire library out)

Use C++ magic to compile time verify the macro and flag are in sync.

The way this works:

constexpr auto useLibBpf = COM_ANDROID_TETHERING_READONLY_FLAGS_USE_LIBBPF;

^ this basically requires the macro to resolve to true/false, so that 'auto' resolves to 'const bool'

static_assert(std::is_same<decltype(useLibBpf), const bool>::value, "useLibBpf must be a boolean.");

^ which we check here

static_assert(useLibBpf == com::android::tethering::readonly:🎏:use_libbpf(), "useLibBpf flag mismatch");

^ and this then requires the macro and flag to be identical *and* compile time known

Test: TreeHugger
Flag: EXEMPT PURE_REFACTOR
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Id5cd8c7d91b424765d6f469806434b3e9587f074
2025-09-12 04:04:39 -07:00

190 lines
6 KiB
Text

//
// Copyright (C) 2022 The Android Open Source Project
//
// 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.
//
package {
default_team: "trendy_team_fwk_core_networking",
// See: http://go/android-license-faq
default_applicable_licenses: ["Android-Apache-2.0"],
}
aconfig_declarations {
name: "tethering.beta.test.flags",
package: "com.android.tethering.beta.test",
container: "com.android.tethering",
srcs: ["mainline_beta_end_to_end_test.aconfig"],
}
java_aconfig_library {
name: "com.android.tethering.beta.test.flags-aconfig-java",
aconfig_declarations: "tethering.beta.test.flags",
defaults: ["framework-minus-apex-aconfig-java-defaults"],
min_sdk_version: "30",
apex_available: [
"com.android.tethering",
],
}
aconfig_declarations {
name: "tethering.mainline.beta.flags",
package: "com.android.tethering.mainline.beta",
container: "com.android.tethering",
srcs: ["mainline_beta.aconfig"],
}
java_aconfig_library {
name: "com.android.tethering.mainline.beta.flags-aconfig-java",
aconfig_declarations: "tethering.mainline.beta.flags",
defaults: ["framework-minus-apex-aconfig-java-defaults"],
min_sdk_version: "30",
apex_available: [
"com.android.tethering",
],
}
aconfig_declarations {
name: "tethering.readonly.flags",
package: "com.android.tethering.readonly.flags",
container: "com.android.tethering",
srcs: ["mainline_beta_readonly.aconfig"],
}
cc_aconfig_library {
name: "libtetheringflags",
aconfig_declarations: "tethering.readonly.flags",
mode: "force-read-only",
shared: { enabled: false },
min_sdk_version: "30",
apex_available: [
"com.android.tethering",
],
}
aconfig_declarations {
name: "com.android.net.flags-aconfig",
package: "com.android.net.flags",
exportable: true,
container: "com.android.tethering",
srcs: ["flags.aconfig"],
visibility: ["//packages/modules/Connectivity:__subpackages__"],
}
java_aconfig_library {
name: "com.android.net.flags-aconfig-java",
aconfig_declarations: "com.android.net.flags-aconfig",
defaults: ["framework-minus-apex-aconfig-java-defaults"],
min_sdk_version: "30",
apex_available: [
"com.android.tethering",
],
}
// This library MUST NOT be available to platform. This is because if the
// platform depends on a flag, it will not be able to delete that flag until
// that platform version is no longer supported by mainline. Additionally,
// there is no any safety mechanism that prevents the module from
// deleting the flag by mistake, regressing on previous platform versions.
java_aconfig_library {
name: "com.android.net.flags-aconfig-java-export",
aconfig_declarations: "com.android.net.flags-aconfig",
defaults: ["framework-minus-apex-aconfig-java-defaults"],
min_sdk_version: "30",
apex_available: [
"com.android.wifi",
],
mode: "exported",
}
aconfig_declarations {
name: "com.android.net.thread.flags-aconfig",
package: "com.android.net.thread.flags",
container: "com.android.tethering",
srcs: ["thread_flags.aconfig"],
visibility: ["//packages/modules/Connectivity:__subpackages__"],
}
java_aconfig_library {
name: "com.android.net.thread.flags-aconfig-java",
aconfig_declarations: "com.android.net.thread.flags-aconfig",
defaults: ["framework-minus-apex-aconfig-java-defaults"],
min_sdk_version: "30",
apex_available: [
"com.android.tethering",
],
}
aconfig_declarations {
name: "nearby_flags",
package: "com.android.nearby.flags",
container: "com.android.tethering",
srcs: ["nearby_flags.aconfig"],
visibility: ["//packages/modules/Connectivity:__subpackages__"],
}
java_aconfig_library {
name: "com.android.nearby.flags-aconfig-java",
aconfig_declarations: "nearby_flags",
defaults: ["framework-minus-apex-aconfig-java-defaults"],
min_sdk_version: "30",
apex_available: [
"com.android.tethering",
],
}
aconfig_declarations {
name: "com.android.networksecurity.flags-aconfig",
package: "com.android.net.ct.flags",
container: "com.android.tethering",
srcs: ["networksecurity_flags.aconfig"],
visibility: ["//packages/modules/Connectivity:__subpackages__"],
}
java_aconfig_library {
name: "networksecurity_flags_java_lib",
aconfig_declarations: "com.android.networksecurity.flags-aconfig",
min_sdk_version: "30",
defaults: ["framework-minus-apex-aconfig-java-defaults"],
apex_available: ["com.android.tethering"],
visibility: ["//packages/modules/Connectivity:__subpackages__"],
}
// The library requires the final artifact to contain net-utils-device-common-struct-base.
java_library {
name: "connectivity-net-module-utils-bpf",
srcs: [
"src/com/android/net/module/util/bpf/*.java",
],
sdk_version: "module_current",
min_sdk_version: "30",
visibility: [
// Do not add any lib. This library is only shared inside connectivity module
// and its tests.
"//packages/modules/Connectivity:__subpackages__",
],
libs: [
"androidx.annotation_annotation",
"framework-connectivity.stubs.module_lib",
// For libraries which are statically linked in framework-connectivity, do not
// statically link here because callers of this library might already have a static
// version linked.
"net-utils-device-common-struct-base",
],
apex_available: [
"com.android.tethering",
],
lint: {
strict_updatability_linting: true,
},
}