50 lines
2.5 KiB
Plaintext
50 lines
2.5 KiB
Plaintext
# 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.
|
|
|