| How to rebuild the ICU data files. |
| |
| This is based off of section B in the README.chromium file. |
| |
| 1. 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`. |
| |
| 2. Create a build directory outside of the Cobalt codebase, and make that your |
| current working directory. Set ICU_DATA_ROOT to this directory. |
| |
| 3. 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. |
| |
| Run |
| |
| ``` |
| ICU_DATA_FILTER_FILE="$ICU_ROOT/filters/cobalt.json" \ |
| env CPPFLAGS="-DUCONFIG_NO_LEGACY_CONVERSION=1 -DU_CHARSET_IS_UTF8=1 \ |
| -DUCONFIG_ONLY_HTML_CONVERSION=1 -DUCONFIG_NO_TRANSLITERATION=1 \ |
| -DUCONFIG_NO_COLLATION=1" \ |
| "$ICU_ROOT/source/runConfigureICU" --enable-debug --disable-release \ |
| Linux/gcc --disable-tests --disable-layoutex |
| |
| ``` |
| |
| 4. Run `$ICU_ROOT/cast/patch_locale.sh && make -j 120` |
| |
| 5. 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`. |
| |
| Cobalt uses a packaged ICU data file instead of individual files, but |
| instructions for both options have been included. |
| |
| ***Option 1: Rebuild packaged ICU data file |
| |
| 6. Replace the files in this directory with the new files that you have built. |
| |
| Run: |
| |
| ``` |
| cd $COBALT_SRC_ROOT/src/cobalt/content/icu |
| rm -rf * |
| cp $ICU_DATA_ROOT/data/out/tmp/icudt68l.dat . |
| cp $ICU_DATA_ROOT/data/out/tmp/icudt68b.dat . |
| ``` |
| |
| Note that at the time of this writing, the final resulting contents had a size |
| of 4.6MB, from running the command |
| `du -sh $COBALT_SRC_ROOT/src/cobalt/content/icu/icudt68l.dat`. |
| |
| ***Option 2: Rebuild individual ICU data files |
| |
| 6. 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. |
| |
| 7. Change directory to $ICU_PKG_ROOT. |
| |
| 8. Run |
| ``` |
| $ICU_ROOT/source/runConfigureICU --enable-debug --disable-release \ |
| Linux/gcc --disable-tests --disable-layoutex |
| ``` |
| |
| 9. Run `make -j 120` |
| |
| 10. Run `export LD_LIBRARY_PATH=$ICU_PKG_ROOT/lib` |
| |
| 11. 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. |
| |
| 12. 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 icudt68l icudt68b |
| $ICU_PKG_ROOT/bin/icupkg --ignore-deps -tl -x '*' -d icudt68l $ICU_DATA_ROOT/data/out/tmp/icudt68l.dat |
| $ICU_PKG_ROOT/bin/icupkg --ignore-deps -tb -x '*' -d icudt68b $ICU_DATA_ROOT/data/out/tmp/icudt68l.dat |
| ``` |
| |
| Note that at the time of this writing, the final resulting contents had a size |
| of 6.7MB, from running the command |
| `du -sh $COBALT_SRC_ROOT/src/cobalt/content/icu/icudt68l`. |
| |
| ******************************************************************************** |
| |
| 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. |