• Home
Name Date Size #Lines LOC

..--

lib/03-May-2024-

playground/03-May-2024-5125

BUILD.gnD03-May-2024597 1612

DIR_METADATAD03-May-202468 54

LICENSED03-May-20241.5 KiB2722

OWNERSD03-May-202460 43

README.chromiumD03-May-20244.2 KiB9886

backported_methods.txtD03-May-202410.2 KiB163162

cipd.yamlD03-May-2024391 125

desugar_jdk_libs.jsonD03-May-202411.9 KiB250249

README.chromium

1Name: R8
2URL: https://r8.googlesource.com/r8
3Version: 3.0.33
4License: BSD 3-Clause
5License File: NOT_SHIPPED
6Security Critical: no
7
8Description:
9lib/r8.jar
10 - Contains R8 (proguard replacement) as well as D8 (dexer).
113pp
12 - Contains code for 3pp-linux-amd64-packager to package and upload new versions of r8.
13desugar_jdk_libs.json
14 - Configuration for Java library desugaring.
15 - Taken from
16   //third_party/android_deps/libs/com_android_tools_desugar_jdk_libs_configuration/
17   inside the jar file, in META-INF/desugar/d8/desugar.json. License is also BSD
18   3-Clause (the r8 version).
19
20R8 is a proguard-like optimizer that also has the ability to dex.
21
22Local Modifications:
23* Refer to commit descriptions within "3pp/patches" directory.
24* Added "playground" directory for quick "how does this optimize" tests.
25* Removed references to ConcurrentHashMap and TimeZone#getTimeZone in desugar_jdk_libs.json.
26* Added "java/src/org/chromium/build/CustomD8.java", custom_d8.jar, and BUILD.gn.
27  * Used in "build/android/gyp/dex.py" to enable desugar dependencies.
28
29Update Instructions:
30* For the custom d8 jar:
31  * This is required only when CustomD8.java changes.
32  * Uncomment the flag --skip-custom-d8 in internal_rules.gni to avoid depending
33    on the previously built custom_d8.jar.
34autoninja -C out/Debug third_party/r8:custom_d8_java
35cp out/Debug/obj/third_party/r8/custom_d8_java.javac.jar third_party/r8/custom_d8.jar
36
37* For a new version of r8:
38  * Find the latest successful run of the build bot:
39    * https://ci.chromium.org/p/chromium/builders/ci/3pp-linux-amd64-packager
40    * The bot autoruns every 6 hours. Ping a trooper to trigger it if you need it sooner.
41      * https://luci-scheduler.appspot.com/jobs/chromium/3pp-linux-amd64-packager
42  * Go to its log page and look under:
43    * Expand "building chromium/third_party/r8" to see the CIPD instance ID.
44  * Copy this instance ID to the r8 entry in //DEPS.
45  * Update this file with the new version string and submit.
46
47* If patching fails:
48git clone https://r8.googlesource.com/r8
49cd r8
50  * Find latest tag:
51git fetch origin --tags
52git tag -l  # Often unnecessary as output from the fetch includes recent tags.
53git checkout $TAG  # e.g. 3.0.25-dev, whichever tag failed patching.
54  * Apply patches:
55git checkout -b my_branch
56git am $CHROMIUM_SRC/third_party/r8/patches/*.patch
57  * Fix patch conflicts.
58  * Save new patches. Change number if expecting more or fewer patches:
59git format-patch -3 -o $CHROMIUM_SRC/third_party/r8/3pp/patches
60  * Submit these fixed patches and the bot will automatically retry.
61
62* Local development (see above for setting up the r8 repo):
63  * Build
64tools/gradle.py r8
65  * Shrink (improves r8/d8 launch time):
66java -jar build/libs/r8.jar --debug --classfile --output r8.jar \
67    --lib $CHROMIUM_SRC/third_party/jdk/current --pg-conf src/main/keep.txt \
68    --no-minification --no-desugaring build/libs/r8.jar
69mv $CHROMIUM_SRC/third_party/r8/lib/r8.jar{,.bak}
70cp r8.jar $CHROMIUM_SRC/third_party/r8/lib/r8.jar
71
72* Update backported methods list:
73cd $CHROMIUM_SRC
74java -cp third_party/r8/lib/r8.jar com.android.tools.r8.BackportedMethodList --min-api 16 > third_party/r8/backported_methods.txt
75
76* Update instructions for desugar_jdk_libs.json:
77unzip -p third_party/android_deps/libs/com_android_tools_desugar_jdk_libs_configuration/*.jar META-INF/desugar/d8/desugar.json > third_party/r8/desugar_jdk_libs.json
78  * Remove all mentions of ConcurrentHashMap and TimeZone#getTimeZone and remove trailing commas.
79  * Update //build/config/android/internal_rules.gni to point at the new .jar files:
80    * desugar_jdk_libs-1.1.1.jar
81    * desugar_jdk_libs_configuration-1.1.1.jar
82
83How to file bugs against R8:
84* Copy & paste the failing ninja command (starts with proguard.py), and add --dump-inputs.
85  * This also works for dex.py, it produces d8inputs.zip
86* File bug at go/r8bug
87* Things to include (use discretion if some are not relevant):
88  * src revision bug reproduces at
89  * Repro steps (gn gen & autoninja commands)
90    * Prefer enable_chrome_android_internal=false
91  * The r8inputs.zip from --dump-inputs
92  * Any relevant dexdump analysis
93
94How to submit CLs to R8:
95* Request to be added to their allowlist in order to upload CLs.
96* After CLs are submitted, check the bots for build breakage.
97  * https://ci.chromium.org/p/r8/g/main_all/console
98