1*61c4878aSAndroid Build Coastguard Worker.. _module-pw_build_android: 2*61c4878aSAndroid Build Coastguard Worker 3*61c4878aSAndroid Build Coastguard Worker================ 4*61c4878aSAndroid Build Coastguard Workerpw_build_android 5*61c4878aSAndroid Build Coastguard Worker================ 6*61c4878aSAndroid Build Coastguard Worker.. pigweed-module:: 7*61c4878aSAndroid Build Coastguard Worker :name: pw_build_android 8*61c4878aSAndroid Build Coastguard Worker 9*61c4878aSAndroid Build Coastguard Worker``pw_build_android`` provides simple utilities and guidelines for building with 10*61c4878aSAndroid Build Coastguard WorkerSoong. 11*61c4878aSAndroid Build Coastguard Worker 12*61c4878aSAndroid Build Coastguard Worker---------- 13*61c4878aSAndroid Build Coastguard WorkerQuickstart 14*61c4878aSAndroid Build Coastguard Worker---------- 15*61c4878aSAndroid Build Coastguard WorkerUse the ``pw_android_common_backends`` ``cc_defaults`` in the Pigweed module 16*61c4878aSAndroid Build Coastguard Workerlibrary or binary rule to use a preselected set of backends common to most 17*61c4878aSAndroid Build Coastguard WorkerAndroid platform projects. 18*61c4878aSAndroid Build Coastguard Worker 19*61c4878aSAndroid Build Coastguard Worker.. code-block:: androidbp 20*61c4878aSAndroid Build Coastguard Worker 21*61c4878aSAndroid Build Coastguard Worker cc_binary { 22*61c4878aSAndroid Build Coastguard Worker name: "my_app", 23*61c4878aSAndroid Build Coastguard Worker host_supported: true, 24*61c4878aSAndroid Build Coastguard Worker vendor: true, 25*61c4878aSAndroid Build Coastguard Worker defaults: [ 26*61c4878aSAndroid Build Coastguard Worker "pw_android_common_backends", 27*61c4878aSAndroid Build Coastguard Worker ], 28*61c4878aSAndroid Build Coastguard Worker srcs: [ 29*61c4878aSAndroid Build Coastguard Worker "main.cc", 30*61c4878aSAndroid Build Coastguard Worker ], 31*61c4878aSAndroid Build Coastguard Worker } 32*61c4878aSAndroid Build Coastguard Worker 33*61c4878aSAndroid Build Coastguard Worker 34*61c4878aSAndroid Build Coastguard Worker---------------------------- 35*61c4878aSAndroid Build Coastguard WorkerBasic blueprint files format 36*61c4878aSAndroid Build Coastguard Worker---------------------------- 37*61c4878aSAndroid Build Coastguard WorkerAll Pigweed Soong blueprint files must be named ``Android.bp``, and include the 38*61c4878aSAndroid Build Coastguard Workerfolowing copyright header with the year adjusted and package. 39*61c4878aSAndroid Build Coastguard Worker 40*61c4878aSAndroid Build Coastguard Worker.. code-block:: androidbp 41*61c4878aSAndroid Build Coastguard Worker 42*61c4878aSAndroid Build Coastguard Worker // Copyright 2024 The Pigweed Authors 43*61c4878aSAndroid Build Coastguard Worker // 44*61c4878aSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); you may not 45*61c4878aSAndroid Build Coastguard Worker // use this file except in compliance with the License. You may obtain a copy of 46*61c4878aSAndroid Build Coastguard Worker // the License at 47*61c4878aSAndroid Build Coastguard Worker // 48*61c4878aSAndroid Build Coastguard Worker // https://www.apache.org/licenses/LICENSE-2.0 49*61c4878aSAndroid Build Coastguard Worker // 50*61c4878aSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software 51*61c4878aSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 52*61c4878aSAndroid Build Coastguard Worker // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 53*61c4878aSAndroid Build Coastguard Worker // License for the specific language governing permissions and limitations under 54*61c4878aSAndroid Build Coastguard Worker // the License. 55*61c4878aSAndroid Build Coastguard Worker 56*61c4878aSAndroid Build Coastguard Worker package { 57*61c4878aSAndroid Build Coastguard Worker default_applicable_licenses: ["external_pigweed_license"], 58*61c4878aSAndroid Build Coastguard Worker } 59*61c4878aSAndroid Build Coastguard Worker 60*61c4878aSAndroid Build Coastguard WorkerThe ``bpfmt`` tool in Android can be used to format a blueprint file, e.g. 61*61c4878aSAndroid Build Coastguard Worker``bpfmt -w Android.bp``. 62*61c4878aSAndroid Build Coastguard Worker 63*61c4878aSAndroid Build Coastguard Worker.. _module-pw_build_android-common-backends: 64*61c4878aSAndroid Build Coastguard Worker 65*61c4878aSAndroid Build Coastguard Worker----------------------- 66*61c4878aSAndroid Build Coastguard WorkerCommon Android backends 67*61c4878aSAndroid Build Coastguard Worker----------------------- 68*61c4878aSAndroid Build Coastguard WorkerSoong doesn't provide a simple way to select custom Pigweed backends, as is 69*61c4878aSAndroid Build Coastguard Workerfound in other build systems. Fortunately, most Android platform binaries will 70*61c4878aSAndroid Build Coastguard Workerlikely use the same common set of backends. Thus, Pigweed provides a 71*61c4878aSAndroid Build Coastguard Worker``cc_defaults`` rule named ``pw_android_common_backends`` with a selected set of 72*61c4878aSAndroid Build Coastguard Workercommon backends for Android platform binaries. This 73*61c4878aSAndroid Build Coastguard Worker``pw_android_common_backends`` rule will be used in all Pigweed modules and 74*61c4878aSAndroid Build Coastguard Workerbackends defined using Soong. 75*61c4878aSAndroid Build Coastguard Worker 76*61c4878aSAndroid Build Coastguard WorkerThis table lists the backends selected by this rule: 77*61c4878aSAndroid Build Coastguard Worker 78*61c4878aSAndroid Build Coastguard Worker.. list-table:: ``pw_android_common_backends`` 79*61c4878aSAndroid Build Coastguard Worker :align: left 80*61c4878aSAndroid Build Coastguard Worker :header-rows: 1 81*61c4878aSAndroid Build Coastguard Worker 82*61c4878aSAndroid Build Coastguard Worker * - Facade 83*61c4878aSAndroid Build Coastguard Worker - Selected Backend 84*61c4878aSAndroid Build Coastguard Worker * - :ref:`module-pw_assert` 85*61c4878aSAndroid Build Coastguard Worker - :ref:`module-pw_assert_log` 86*61c4878aSAndroid Build Coastguard Worker * - :ref:`module-pw_log` 87*61c4878aSAndroid Build Coastguard Worker - :ref:`module-pw_log_android` 88*61c4878aSAndroid Build Coastguard Worker * - :ref:`module-pw_chrono` 89*61c4878aSAndroid Build Coastguard Worker - :ref:`module-pw_chrono_stl` 90*61c4878aSAndroid Build Coastguard Worker * - :ref:`module-pw_sync` 91*61c4878aSAndroid Build Coastguard Worker - :ref:`module-pw_sync_stl` 92*61c4878aSAndroid Build Coastguard Worker * - :ref:`module-pw_thread` 93*61c4878aSAndroid Build Coastguard Worker - :ref:`module-pw_thread_stl` 94*61c4878aSAndroid Build Coastguard Worker 95*61c4878aSAndroid Build Coastguard Worker.. _module-pw_build_android-module-libraries: 96*61c4878aSAndroid Build Coastguard Worker 97*61c4878aSAndroid Build Coastguard Worker---------------- 98*61c4878aSAndroid Build Coastguard WorkerModule libraries 99*61c4878aSAndroid Build Coastguard Worker---------------- 100*61c4878aSAndroid Build Coastguard WorkerModule libraries are defined as ``cc_library_static`` rules and include the 101*61c4878aSAndroid Build Coastguard Workercommon Android backends via the ``pw_android_common_backends`` defaults. 102*61c4878aSAndroid Build Coastguard Worker 103*61c4878aSAndroid Build Coastguard Worker.. note:: 104*61c4878aSAndroid Build Coastguard Worker 105*61c4878aSAndroid Build Coastguard Worker Every dependency has to be added as ``whole_static_libs`` to avoid dropping 106*61c4878aSAndroid Build Coastguard Worker symbols on transitive dependencies. 107*61c4878aSAndroid Build Coastguard Worker 108*61c4878aSAndroid Build Coastguard Worker.. code-block:: androidbp 109*61c4878aSAndroid Build Coastguard Worker 110*61c4878aSAndroid Build Coastguard Worker cc_library_static { 111*61c4878aSAndroid Build Coastguard Worker name: "pw_<MODULE_NAME>", 112*61c4878aSAndroid Build Coastguard Worker cpp_std: "c++20", 113*61c4878aSAndroid Build Coastguard Worker export_include_dirs: ["public"], 114*61c4878aSAndroid Build Coastguard Worker vendor_available: true, 115*61c4878aSAndroid Build Coastguard Worker host_supported: true, 116*61c4878aSAndroid Build Coastguard Worker defaults: [ 117*61c4878aSAndroid Build Coastguard Worker "pw_android_common_backends", 118*61c4878aSAndroid Build Coastguard Worker ], 119*61c4878aSAndroid Build Coastguard Worker header_libs: [ 120*61c4878aSAndroid Build Coastguard Worker // Header library list for all the libraries in #include directives. 121*61c4878aSAndroid Build Coastguard Worker ], 122*61c4878aSAndroid Build Coastguard Worker export_header_lib_headers: [ 123*61c4878aSAndroid Build Coastguard Worker // Header library list for all the libraries in #include directives 124*61c4878aSAndroid Build Coastguard Worker // in public header files only. 125*61c4878aSAndroid Build Coastguard Worker // These entries must also be present in header_libs. 126*61c4878aSAndroid Build Coastguard Worker ], 127*61c4878aSAndroid Build Coastguard Worker whole_static_libs: [ 128*61c4878aSAndroid Build Coastguard Worker // Static library list for all static library dependencies, listed as 129*61c4878aSAndroid Build Coastguard Worker // whole libraries to avoid dropping symbols in transitive 130*61c4878aSAndroid Build Coastguard Worker // dependencies. 131*61c4878aSAndroid Build Coastguard Worker ], 132*61c4878aSAndroid Build Coastguard Worker export_static_lib_headers: [ 133*61c4878aSAndroid Build Coastguard Worker // Static library list for static libraries in #include directives in 134*61c4878aSAndroid Build Coastguard Worker // public header files only. 135*61c4878aSAndroid Build Coastguard Worker // These entries must also be present in whole_static_libs. 136*61c4878aSAndroid Build Coastguard Worker ], 137*61c4878aSAndroid Build Coastguard Worker srcs: [ 138*61c4878aSAndroid Build Coastguard Worker // List of source (.cc) files. 139*61c4878aSAndroid Build Coastguard Worker ], 140*61c4878aSAndroid Build Coastguard Worker } 141*61c4878aSAndroid Build Coastguard Worker 142*61c4878aSAndroid Build Coastguard WorkerModule libraries with custom backends 143*61c4878aSAndroid Build Coastguard Worker------------------------------------- 144*61c4878aSAndroid Build Coastguard WorkerIf a Pigweed module needs to be used with a backend different than the common 145*61c4878aSAndroid Build Coastguard WorkerAndroid backend, it should be defined as a ``cc_defaults`` rule following the 146*61c4878aSAndroid Build Coastguard Worker``pw_<MODULE_NAME>_no_backends`` name format, with the source files listed in a 147*61c4878aSAndroid Build Coastguard Worker``filegroup`` following the ``pw_<MODULE_NAME>_src_files`` name format and the 148*61c4878aSAndroid Build Coastguard Workerinclude directories defined as a ``cc_library_headers`` following the 149*61c4878aSAndroid Build Coastguard Worker``pw_<MODULE_NAME>_include_dirs`` name format. A ``cc_static_library`` with the 150*61c4878aSAndroid Build Coastguard Workercommon Android backend should still be provided, which uses the mentioned 151*61c4878aSAndroid Build Coastguard Worker``cc_defaults``. 152*61c4878aSAndroid Build Coastguard Worker 153*61c4878aSAndroid Build Coastguard Worker.. note:: 154*61c4878aSAndroid Build Coastguard Worker 155*61c4878aSAndroid Build Coastguard Worker ``filegroup`` captures the absolute paths of the listed source files, so they 156*61c4878aSAndroid Build Coastguard Worker can be addressed properly when the ``cc_defaults`` rule is used. 157*61c4878aSAndroid Build Coastguard Worker 158*61c4878aSAndroid Build Coastguard Worker.. code-block:: androidbp 159*61c4878aSAndroid Build Coastguard Worker 160*61c4878aSAndroid Build Coastguard Worker filegroup { 161*61c4878aSAndroid Build Coastguard Worker name: "pw_<MODULE_NAME>_src_files", 162*61c4878aSAndroid Build Coastguard Worker srcs: [ 163*61c4878aSAndroid Build Coastguard Worker // List of source (.cc) files. 164*61c4878aSAndroid Build Coastguard Worker ], 165*61c4878aSAndroid Build Coastguard Worker } 166*61c4878aSAndroid Build Coastguard Worker 167*61c4878aSAndroid Build Coastguard Worker cc_library_headers { 168*61c4878aSAndroid Build Coastguard Worker name: "pw_<MODULE_NAME>_include_dirs", 169*61c4878aSAndroid Build Coastguard Worker export_include_dirs: [ 170*61c4878aSAndroid Build Coastguard Worker "public", 171*61c4878aSAndroid Build Coastguard Worker ], 172*61c4878aSAndroid Build Coastguard Worker vendor_available: true, 173*61c4878aSAndroid Build Coastguard Worker host_supported: true, 174*61c4878aSAndroid Build Coastguard Worker } 175*61c4878aSAndroid Build Coastguard Worker 176*61c4878aSAndroid Build Coastguard Worker cc_defaults { 177*61c4878aSAndroid Build Coastguard Worker name: "pw_<MODULE_NAME>_no_backends", 178*61c4878aSAndroid Build Coastguard Worker cpp_std: "c++20", 179*61c4878aSAndroid Build Coastguard Worker 180*61c4878aSAndroid Build Coastguard Worker header_libs: [ 181*61c4878aSAndroid Build Coastguard Worker // Header library list for all the libraries in #include directives. 182*61c4878aSAndroid Build Coastguard Worker "pw_<MODULE_NAME>_include_dirs" 183*61c4878aSAndroid Build Coastguard Worker ], 184*61c4878aSAndroid Build Coastguard Worker export_header_lib_headers: [ 185*61c4878aSAndroid Build Coastguard Worker // Header library list for all the libraries in #include directives 186*61c4878aSAndroid Build Coastguard Worker // in public header files only. 187*61c4878aSAndroid Build Coastguard Worker // These entries must also be present in header_libs. 188*61c4878aSAndroid Build Coastguard Worker ], 189*61c4878aSAndroid Build Coastguard Worker whole_static_libs: [ 190*61c4878aSAndroid Build Coastguard Worker // Static library list for all static library dependencies, listed as 191*61c4878aSAndroid Build Coastguard Worker // whole libraries to avoid dropping symbols in transitive 192*61c4878aSAndroid Build Coastguard Worker // dependencies. 193*61c4878aSAndroid Build Coastguard Worker ], 194*61c4878aSAndroid Build Coastguard Worker export_static_lib_headers: [ 195*61c4878aSAndroid Build Coastguard Worker // Static library list for static libraries in #include directives in 196*61c4878aSAndroid Build Coastguard Worker // public header files only. 197*61c4878aSAndroid Build Coastguard Worker // These entries must also be present in whole_static_libs. 198*61c4878aSAndroid Build Coastguard Worker ], 199*61c4878aSAndroid Build Coastguard Worker srcs: [ 200*61c4878aSAndroid Build Coastguard Worker "pw_<MODULE_NAME>_src_files", 201*61c4878aSAndroid Build Coastguard Worker ], 202*61c4878aSAndroid Build Coastguard Worker } 203*61c4878aSAndroid Build Coastguard Worker 204*61c4878aSAndroid Build Coastguard Worker cc_library_static { 205*61c4878aSAndroid Build Coastguard Worker name: "pw_<MODULE_NAME>", 206*61c4878aSAndroid Build Coastguard Worker cpp_std: "c++20", 207*61c4878aSAndroid Build Coastguard Worker export_include_dirs: ["public"], 208*61c4878aSAndroid Build Coastguard Worker defaults: [ 209*61c4878aSAndroid Build Coastguard Worker "pw_android_common_backends", 210*61c4878aSAndroid Build Coastguard Worker "pw_<MODULE_NAME>_no_backends", 211*61c4878aSAndroid Build Coastguard Worker ], 212*61c4878aSAndroid Build Coastguard Worker vendor_available: true, 213*61c4878aSAndroid Build Coastguard Worker host_supported: true, 214*61c4878aSAndroid Build Coastguard Worker } 215*61c4878aSAndroid Build Coastguard Worker 216*61c4878aSAndroid Build Coastguard WorkerModule libraries with configurable build flags 217*61c4878aSAndroid Build Coastguard Worker---------------------------------------------- 218*61c4878aSAndroid Build Coastguard WorkerIf a Pigweed module provides user-configurable build flags it should be defined 219*61c4878aSAndroid Build Coastguard Workeras a ``cc_defaults`` rule following the ``pw_<MODULE_NAME>_defaults`` name 220*61c4878aSAndroid Build Coastguard Workerformat. This hints the user that the rule must be initialized with the desired 221*61c4878aSAndroid Build Coastguard Workerbuild flag values. Source files must be listed in a ``filegroup`` following the 222*61c4878aSAndroid Build Coastguard Worker``pw_<MODULE_NAME>_src_files`` name format and the include directories defined 223*61c4878aSAndroid Build Coastguard Workeras a ``cc_library_headers`` following the ``pw_<MODULE_NAME>_include_dirs`` name 224*61c4878aSAndroid Build Coastguard Workerformat. 225*61c4878aSAndroid Build Coastguard Worker 226*61c4878aSAndroid Build Coastguard Worker.. code-block:: androidbp 227*61c4878aSAndroid Build Coastguard Worker 228*61c4878aSAndroid Build Coastguard Worker filegroup { 229*61c4878aSAndroid Build Coastguard Worker name: "pw_<MODULE_NAME>_src_files", 230*61c4878aSAndroid Build Coastguard Worker srcs: [ 231*61c4878aSAndroid Build Coastguard Worker // List of source (.cc) files. 232*61c4878aSAndroid Build Coastguard Worker ], 233*61c4878aSAndroid Build Coastguard Worker } 234*61c4878aSAndroid Build Coastguard Worker 235*61c4878aSAndroid Build Coastguard Worker cc_library_headers { 236*61c4878aSAndroid Build Coastguard Worker name: "pw_<MODULE_NAME>_include_dirs", 237*61c4878aSAndroid Build Coastguard Worker export_include_dirs: [ 238*61c4878aSAndroid Build Coastguard Worker "public", 239*61c4878aSAndroid Build Coastguard Worker ], 240*61c4878aSAndroid Build Coastguard Worker vendor_available: true, 241*61c4878aSAndroid Build Coastguard Worker host_supported: true, 242*61c4878aSAndroid Build Coastguard Worker } 243*61c4878aSAndroid Build Coastguard Worker 244*61c4878aSAndroid Build Coastguard Worker cc_defaults { 245*61c4878aSAndroid Build Coastguard Worker name: "pw_<MODULE_NAME>_defaults", 246*61c4878aSAndroid Build Coastguard Worker cpp_std: "c++20", 247*61c4878aSAndroid Build Coastguard Worker 248*61c4878aSAndroid Build Coastguard Worker header_libs: [ 249*61c4878aSAndroid Build Coastguard Worker // Header library list for all the libraries in #include directives. 250*61c4878aSAndroid Build Coastguard Worker "pw_<MODULE_NAME>_include_dirs" 251*61c4878aSAndroid Build Coastguard Worker ], 252*61c4878aSAndroid Build Coastguard Worker export_header_lib_headers: [ 253*61c4878aSAndroid Build Coastguard Worker // Header library list for all the libraries in #include directives 254*61c4878aSAndroid Build Coastguard Worker // in public header files only. 255*61c4878aSAndroid Build Coastguard Worker // These entries must also be present in header_libs. 256*61c4878aSAndroid Build Coastguard Worker ], 257*61c4878aSAndroid Build Coastguard Worker whole_static_libs: [ 258*61c4878aSAndroid Build Coastguard Worker // Static library list for all static library dependencies, listed as 259*61c4878aSAndroid Build Coastguard Worker // whole libraries to avoid dropping symbols in transitive 260*61c4878aSAndroid Build Coastguard Worker // dependencies. 261*61c4878aSAndroid Build Coastguard Worker ], 262*61c4878aSAndroid Build Coastguard Worker export_static_lib_headers: [ 263*61c4878aSAndroid Build Coastguard Worker // Static library list for static libraries in #include directives in 264*61c4878aSAndroid Build Coastguard Worker // public header files only. 265*61c4878aSAndroid Build Coastguard Worker // These entries must also be present in whole_static_libs. 266*61c4878aSAndroid Build Coastguard Worker ], 267*61c4878aSAndroid Build Coastguard Worker srcs: [ 268*61c4878aSAndroid Build Coastguard Worker "pw_<MODULE_NAME>_src_files", 269*61c4878aSAndroid Build Coastguard Worker ], 270*61c4878aSAndroid Build Coastguard Worker } 271*61c4878aSAndroid Build Coastguard Worker 272*61c4878aSAndroid Build Coastguard WorkerA downstream user can instantiate the ``pw_<MODULE_NAME>_defaults`` rule as 273*61c4878aSAndroid Build Coastguard Workerfollows. 274*61c4878aSAndroid Build Coastguard Worker 275*61c4878aSAndroid Build Coastguard Worker.. note:: 276*61c4878aSAndroid Build Coastguard Worker 277*61c4878aSAndroid Build Coastguard Worker To avoid collisions the rule using the ``cc_defaults`` must have a unique 278*61c4878aSAndroid Build Coastguard Worker name that distinguishes it from other rule names in Pigweed and other 279*61c4878aSAndroid Build Coastguard Worker projects. It is recommended to suffix the project name. 280*61c4878aSAndroid Build Coastguard Worker 281*61c4878aSAndroid Build Coastguard Worker.. code-block:: androidbp 282*61c4878aSAndroid Build Coastguard Worker 283*61c4878aSAndroid Build Coastguard Worker cc_library_static { 284*61c4878aSAndroid Build Coastguard Worker name: "pw_<MODULE_NAME>_<PROJECT_NAME>", 285*61c4878aSAndroid Build Coastguard Worker cflags: [ 286*61c4878aSAndroid Build Coastguard Worker "-DPW_<MODULE_NAME>_<FLAG_NAME>=<FLAG_VALUE>", 287*61c4878aSAndroid Build Coastguard Worker ], 288*61c4878aSAndroid Build Coastguard Worker defaults: [ 289*61c4878aSAndroid Build Coastguard Worker "pw_<MODULE_NAME>_defaults", 290*61c4878aSAndroid Build Coastguard Worker ], 291*61c4878aSAndroid Build Coastguard Worker } 292*61c4878aSAndroid Build Coastguard Worker 293*61c4878aSAndroid Build Coastguard Worker------- 294*61c4878aSAndroid Build Coastguard WorkerFacades 295*61c4878aSAndroid Build Coastguard Worker------- 296*61c4878aSAndroid Build Coastguard WorkerAll facades must be defined as ``cc_library_headers`` if they don’t have 297*61c4878aSAndroid Build Coastguard Worker``srcs`` list. The facade names follow the ``pw_<MODULE_NAME>.<FACADE_NAME>``. 298*61c4878aSAndroid Build Coastguard WorkerIn the case there is only one facade in the module or ``<MODULE_NAME>`` is 299*61c4878aSAndroid Build Coastguard Workerthe same as ``<FACADE_NAME>`` follow ``pw_<MODULE_NAME>``, e.g. ``pw_log``. 300*61c4878aSAndroid Build Coastguard Worker 301*61c4878aSAndroid Build Coastguard Worker.. note:: 302*61c4878aSAndroid Build Coastguard Worker Facade names should not be suffixed with ``_headers``. 303*61c4878aSAndroid Build Coastguard Worker 304*61c4878aSAndroid Build Coastguard Worker.. code-block:: androidbp 305*61c4878aSAndroid Build Coastguard Worker 306*61c4878aSAndroid Build Coastguard Worker cc_library_headers { 307*61c4878aSAndroid Build Coastguard Worker name: "pw_<MODULE_NAME>.<FACADE_NAME>", 308*61c4878aSAndroid Build Coastguard Worker cpp_std: "c++20", 309*61c4878aSAndroid Build Coastguard Worker vendor_available: true, 310*61c4878aSAndroid Build Coastguard Worker host_supported: true, 311*61c4878aSAndroid Build Coastguard Worker export_include_dirs: ["public"], 312*61c4878aSAndroid Build Coastguard Worker } 313*61c4878aSAndroid Build Coastguard Worker 314*61c4878aSAndroid Build Coastguard WorkerIf a facade requires a ``srcs`` list, it must be defined as a ``cc_defaults`` 315*61c4878aSAndroid Build Coastguard Workerrule instead, with the source files listed in a ``filegroup`` following the 316*61c4878aSAndroid Build Coastguard Worker``pw_<MODULE_NAME>.<FACADE_NAME>_files`` name format or 317*61c4878aSAndroid Build Coastguard Worker``pw_<MODULE_NAME>_files`` if applicable. 318*61c4878aSAndroid Build Coastguard Worker 319*61c4878aSAndroid Build Coastguard Worker.. note:: 320*61c4878aSAndroid Build Coastguard Worker 321*61c4878aSAndroid Build Coastguard Worker ``filegroup`` captures the absolute paths of the listed source files, so they 322*61c4878aSAndroid Build Coastguard Worker can be addressed properly when the ``cc_defaults`` rule is used. 323*61c4878aSAndroid Build Coastguard Worker 324*61c4878aSAndroid Build Coastguard Worker.. note:: 325*61c4878aSAndroid Build Coastguard Worker 326*61c4878aSAndroid Build Coastguard Worker Facades cannot be defined as ``cc_static_library`` because it wouldn’t be 327*61c4878aSAndroid Build Coastguard Worker possible to build the facade without a backend. 328*61c4878aSAndroid Build Coastguard Worker 329*61c4878aSAndroid Build Coastguard Worker.. code-block:: androidbp 330*61c4878aSAndroid Build Coastguard Worker 331*61c4878aSAndroid Build Coastguard Worker filegroup { 332*61c4878aSAndroid Build Coastguard Worker name: "pw_<MODULE_NAME>.<FACADE_NAME>_files", 333*61c4878aSAndroid Build Coastguard Worker srcs: [ 334*61c4878aSAndroid Build Coastguard Worker // List of source (.cc) files. 335*61c4878aSAndroid Build Coastguard Worker ], 336*61c4878aSAndroid Build Coastguard Worker } 337*61c4878aSAndroid Build Coastguard Worker 338*61c4878aSAndroid Build Coastguard Worker cc_defaults { 339*61c4878aSAndroid Build Coastguard Worker name: "pw_<MODULE_NAME>.<FACADE_NAME>", 340*61c4878aSAndroid Build Coastguard Worker cpp_std: "c++20", 341*61c4878aSAndroid Build Coastguard Worker export_include_dirs: ["public"], 342*61c4878aSAndroid Build Coastguard Worker srcs: [ 343*61c4878aSAndroid Build Coastguard Worker "pw_<MODULE_NAME>.<FACADE_NAME>_files", 344*61c4878aSAndroid Build Coastguard Worker ], 345*61c4878aSAndroid Build Coastguard Worker } 346*61c4878aSAndroid Build Coastguard Worker 347*61c4878aSAndroid Build Coastguard WorkerTo assign a backend to a facade defined as ``cc_defaults`` the ``cc_defaults`` 348*61c4878aSAndroid Build Coastguard Workerrule can be placed in the ``defaults`` list of a ``cc_static_library`` rule or 349*61c4878aSAndroid Build Coastguard Workerbinary rule that lists the facade's backend as a dependency. 350*61c4878aSAndroid Build Coastguard Worker 351*61c4878aSAndroid Build Coastguard Worker.. code-block:: androidbp 352*61c4878aSAndroid Build Coastguard Worker 353*61c4878aSAndroid Build Coastguard Worker cc_static_library { 354*61c4878aSAndroid Build Coastguard Worker name: "user_of_pw_<MODULE_NAME>.<FACADE_NAME>", 355*61c4878aSAndroid Build Coastguard Worker cpp_std: "c++20", 356*61c4878aSAndroid Build Coastguard Worker vendor_available: true, 357*61c4878aSAndroid Build Coastguard Worker host_supported: true, 358*61c4878aSAndroid Build Coastguard Worker defaults: [ 359*61c4878aSAndroid Build Coastguard Worker "pw_<MODULE_NAME>.<FACADE_NAME>", 360*61c4878aSAndroid Build Coastguard Worker ], 361*61c4878aSAndroid Build Coastguard Worker static_libs: [ 362*61c4878aSAndroid Build Coastguard Worker "backend_of_pw_<MODULE_NAME>.<FACADE_NAME>", 363*61c4878aSAndroid Build Coastguard Worker ], 364*61c4878aSAndroid Build Coastguard Worker } 365*61c4878aSAndroid Build Coastguard Worker 366*61c4878aSAndroid Build Coastguard WorkerAlternatively, the ``cc_defaults`` rule can be placed in the ``defaults`` list 367*61c4878aSAndroid Build Coastguard Workerof another ``cc_defaults`` rule where the latter rule may or may not list the 368*61c4878aSAndroid Build Coastguard Workerfacade's backend. ``cc_defaults`` rules can be inherited many times. Facades 369*61c4878aSAndroid Build Coastguard Workercan be used as long as the backends are assigned in ``cc_static_library`` or 370*61c4878aSAndroid Build Coastguard Workerbinary rules using the final ``cc_defaults`` as explained above. 371*61c4878aSAndroid Build Coastguard Worker 372*61c4878aSAndroid Build Coastguard Worker-------- 373*61c4878aSAndroid Build Coastguard WorkerBackends 374*61c4878aSAndroid Build Coastguard Worker-------- 375*61c4878aSAndroid Build Coastguard WorkerBackends are defined the same way as 376*61c4878aSAndroid Build Coastguard Worker:ref:`module-pw_build_android-module-libraries`. They must follow the 377*61c4878aSAndroid Build Coastguard Worker``pw_<MODULE_NAME>.<FACADE_NAME>_<BACKEND_NAME>`` name format or 378*61c4878aSAndroid Build Coastguard Worker``pw_<MODULE_NAME>_<BACKEND_NAME>`` if applicable. 379*61c4878aSAndroid Build Coastguard Worker 380*61c4878aSAndroid Build Coastguard Worker----------- 381*61c4878aSAndroid Build Coastguard WorkerBuild flags 382*61c4878aSAndroid Build Coastguard Worker----------- 383*61c4878aSAndroid Build Coastguard WorkerSome build flags should be set for all Android targets; these flags are 384*61c4878aSAndroid Build Coastguard Workerspecified in ``pw_android_common_backends``. These flags are as follows: 385*61c4878aSAndroid Build Coastguard Worker 386*61c4878aSAndroid Build Coastguard Worker``PW_FUNCTION_ENABLE_DYNAMIC_ALLOCATION`` 387*61c4878aSAndroid Build Coastguard Worker----------------------------------------- 388*61c4878aSAndroid Build Coastguard WorkerAs discussed in :ref:`module-pw_function-dynamic-allocation`, this flag enables 389*61c4878aSAndroid Build Coastguard Workerdynamic allocation of :cpp:type:`pw::Function`, allowing it to exceed the 390*61c4878aSAndroid Build Coastguard Workerinline size limit. 391*61c4878aSAndroid Build Coastguard Worker 392*61c4878aSAndroid Build Coastguard WorkerAndroid targets support dynamic allocation since the Android environment is not 393*61c4878aSAndroid Build Coastguard Workermemory constrained. Thus, ``PW_FUNCTION_ENABLE_DYNAMIC_ALLOCATION`` is enabled 394*61c4878aSAndroid Build Coastguard Workerin ``pw_android_common_backends``. Components built with dynamic allocation 395*61c4878aSAndroid Build Coastguard Workerdisabled cannot be linked against components with dynamic allocation enabled. 396