| How to rebuild the ICU data files. |
| |
| This is based off of section B in the README.chromium file. |
| |
| 1. First revert to the non-Starboardized version of ICU in the Cobalt source |
| tree. This is necessary because regenerating the data files requires building |
| ICU, and this is best done with a non-Starboardized version of the library. |
| |
| You can do this by looking at the git log for third_party/icu and tracing |
| it back until you find the first non-Cobalt change, and then checking out |
| that commit. |
| |
| 2. Set ICU_ROOT to the directory of the ICU source code in the Cobalt source |
| tree, e.g. `$COBALT_SRC_ROOT/src/third_party/icu`. |
| |
| 3. Create a build directory outside of the Cobalt codebase, and make that your |
| current working directory. Set ICU_DATA_ROOT to this directory. |
| |
| 4. Configure the ICU build. Note that we setup our compiler defines in the same |
| way that they are set when building ICU within Cobalt, according to our |
| icu.gyp file. Note that below, `-DUCONFIG_NO_LEGACY_CONVERSION=1` is left |
| out on purpose even though it is used when building ICU for Cobalt because |
| it causes an issue when converting to big endian |
| ( https://unicode-org.atlassian.net/browse/ICU-11046 ). In addition, |
| `-DU_CHARSET_IS_UTF8=1` is also left out for the same reason as it was found |
| to produce a similar error. |
| |
| ``` |
| env CPPFLAGS="-DUCONFIG_ONLY_HTML_CONVERSION=1 -DUCONFIG_NO_TRANSLITERATION=1 -DUCONFIG_NO_COLLATION=1" $ICU_ROOT/source/runConfigureICU Linux --disable-layout |
| |
| ``` |
| |
| 5. Run make. |
| |
| ``` |
| make -j8 |
| ``` |
| |
| Note that it's okay for it to end in an error around `css3transform.res`, |
| enough of it should have built successfully for us to complete the remaining |
| instructions. |
| |
| 6. Revert your ICU source checkout back to the tip, there have been local |
| modifications to it (specifically `source/data/mappings/convrtrs.txt`) that |
| we want to pick up here. |
| |
| ``` |
| cd $ICU_ROOT |
| git checkout origin/COBALT |
| cd $ICU_DATA_ROOT |
| ``` |
| |
| 7. Run `$ICU_ROOT/scripts/trim_data.sh` |
| |
| 8. Run `$ICU_ROOT/android/patch_locale.sh`. |
| |
| 9. Run `$ICU_ROOT/scripts/make_data.sh`. |
| |
| 10. Run `$ICU_ROOT/scripts/clean_up_data_source.sh` to clean up the changes |
| made to $ICU_ROOT from the call to `patch_locale.sh`. |
| |
| 11. Create a new directory where we will rebuild ICU with different options |
| because the options used above will produce a version of the tool `icupkg` ( |
| which we need to use to translate from little to big endian) that does not |
| work. Call this new directory $ICU_PKG_ROOT. |
| |
| 12. Change directory to $ICU_PKG_ROOT. |
| |
| 13. Run `$ICU_ROOT/source/runConfigureICU Linux --disable-layout && make -j8` |
| |
| 14. Run `$ICU_ROOT/scripts/make_data.sh` |
| |
| 15. Run `export LD_LIBRARY_PATH=$ICU_PKG_ROOT/lib` |
| |
| 16. Run `sudo apt install icu-devtools` to obtain the `icupkg` command and its |
| dependencies. Even though you will be running a locally-built version of |
| `icupkg`, you will need the shared libraries installed by this command. |
| |
| 17. Replace the files in this directory with the new files that you have built. |
| They will exist as a little-endian package file, but you can use the |
| `icupkg` tool to both unpack the files out of the package (which Cobalt |
| prefers), and switch from little-endian to big-endian. |
| |
| Run: |
| |
| ``` |
| cd $COBALT_SRC_ROOT/src/cobalt/content/icu |
| rm -rf * |
| mkdir icudt56l icudt56b |
| $ICU_PKG_ROOT/bin/icupkg -tl -x '*' -d icudt56l $ICU_DATA_ROOT/data/out/tmp/icudt56l.dat |
| $ICU_PKG_ROOT/bin/icupkg -tb -x '*' -d icudt56b $ICU_DATA_ROOT/data/out/tmp/icudt56l.dat |
| ``` |
| |
| |
| You should now have the ICU data files generated and ready to go in the Cobalt |
| source tree, and you can clean up any outstanding files. If there are any |
| leftover changes in your $ICU_ROOT directory, you can revert them. At this |
| point you can re-gyp, re-ninja, and run Cobalt and it should work. |
| |
| Note that at the time of this writing, the final resulting contents had a size |
| of 6.9MB, from running the command |
| `du -sh $COBALT_SRC_ROOT/src/cobalt/content/icu/icudt56l`. |