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