| # Notes specific to building ICU in Fuchsia tree |
| |
| This note is specific to compiling ICU for Fuchsia as a target, but only within |
| the Fuchsia git source code repository. |
| |
| On Fuchsia we need to compile ICU at 3 separate but not always different ICU |
| commit IDs. I call these ICU "flavors", and Fuchsia has "default", "stable", |
| and "latest" flavors defined today. |
| |
| This setup fights a bit with the way the default ICU build works, since all of |
| the above flavors end up wanting to place some of their outputs in |
| `$root_build_dir` under the same name (e.g. `icudtl.dat`). Such a setup causes |
| GN to complain about multiple build rules defining the same output, and fail |
| the build. So the vanilla setup does not work for us. |
| |
| To have 3 possibly different ICUs coexist in peace in the Fuchsia tree, the |
| following changes are needed in the ICU library proper: |
| |
| - We introduced a file `//build/icu.gni` which will live in the Fuchsia git |
| tree, and contains the shared configuration to be used instead of |
| `config.gni`. Without it, compilation will fail saying that multiple config |
| files define the same args. Since providing this config file to all |
| downstream deps would be tedious, and error prone, there is a |
| Fuchsia-specific branch in `config.gni` which will look for `//build/icu.gni` |
| only if the configuration indicates we are building Fuchsia, and building in |
| the Fuchsia git source tree. |
| |
| - Added some flags and conditionals to avoid |
| putting key artifacts into `$root_build_dir`. Without it, compilation will |
| fail because all ICU flavors we compile will want to put same-named artifacts |
| into the same spot in `$root_build_dir`. |
| |
| - The above conditionals caused some of the variables to become unused in some |
| code paths, so I marked those as `not_needed`. This should not adversely |
| affect any builds, Fuchsia or otherwise. |
| |
| - Started storing the major version of the library in a JSON file at the root |
| directory. This allows tools other than GN to read the file, and use |
| standardized tools for parsing the value. Without this, we'd need to rely on |
| possibly brittle parsing to achieve the same effect, which seemed unnecessary. |
| |
| - I modified [scripts/update.sh] to transition to updating the JSON file, so |
| the update process to update the above JSON file instead of the `.gni` file |
| directly so the ICU update process does not change for the human operator. |
| |
| These settings should only take effect in the Fuchsia in-tree build of ICU. |
| While there might be some value in having `//build/icu.gni` defined in each |
| downstream build, this seemed like an overkill at this time. |
| |