98 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| Name: R8
 | |
| URL: https://r8.googlesource.com/r8
 | |
| Version: 3.0.33
 | |
| License: BSD 3-Clause
 | |
| License File: NOT_SHIPPED
 | |
| Security Critical: no
 | |
| 
 | |
| Description:
 | |
| lib/r8.jar
 | |
|  - Contains R8 (proguard replacement) as well as D8 (dexer).
 | |
| 3pp
 | |
|  - Contains code for 3pp-linux-amd64-packager to package and upload new versions of r8.
 | |
| desugar_jdk_libs.json
 | |
|  - Configuration for Java library desugaring.
 | |
|  - Taken from
 | |
|    //third_party/android_deps/libs/com_android_tools_desugar_jdk_libs_configuration/
 | |
|    inside the jar file, in META-INF/desugar/d8/desugar.json. License is also BSD
 | |
|    3-Clause (the r8 version).
 | |
| 
 | |
| R8 is a proguard-like optimizer that also has the ability to dex.
 | |
| 
 | |
| Local Modifications:
 | |
| * Refer to commit descriptions within "3pp/patches" directory.
 | |
| * Added "playground" directory for quick "how does this optimize" tests.
 | |
| * Removed references to ConcurrentHashMap and TimeZone#getTimeZone in desugar_jdk_libs.json.
 | |
| * Added "java/src/org/chromium/build/CustomD8.java", custom_d8.jar, and BUILD.gn.
 | |
|   * Used in "build/android/gyp/dex.py" to enable desugar dependencies.
 | |
| 
 | |
| Update Instructions:
 | |
| * For the custom d8 jar:
 | |
|   * This is required only when CustomD8.java changes.
 | |
|   * Uncomment the flag --skip-custom-d8 in internal_rules.gni to avoid depending
 | |
|     on the previously built custom_d8.jar.
 | |
| autoninja -C out/Debug third_party/r8:custom_d8_java
 | |
| cp out/Debug/obj/third_party/r8/custom_d8_java.javac.jar third_party/r8/custom_d8.jar
 | |
| 
 | |
| * For a new version of r8:
 | |
|   * Find the latest successful run of the build bot:
 | |
|     * https://ci.chromium.org/p/chromium/builders/ci/3pp-linux-amd64-packager
 | |
|     * The bot autoruns every 6 hours. Ping a trooper to trigger it if you need it sooner.
 | |
|       * https://luci-scheduler.appspot.com/jobs/chromium/3pp-linux-amd64-packager
 | |
|   * Go to its log page and look under:
 | |
|     * Expand "building chromium/third_party/r8" to see the CIPD instance ID.
 | |
|   * Copy this instance ID to the r8 entry in //DEPS.
 | |
|   * Update this file with the new version string and submit.
 | |
| 
 | |
| * If patching fails:
 | |
| git clone https://r8.googlesource.com/r8
 | |
| cd r8
 | |
|   * Find latest tag:
 | |
| git fetch origin --tags
 | |
| git tag -l  # Often unnecessary as output from the fetch includes recent tags.
 | |
| git checkout $TAG  # e.g. 3.0.25-dev, whichever tag failed patching.
 | |
|   * Apply patches:
 | |
| git checkout -b my_branch
 | |
| git am $CHROMIUM_SRC/third_party/r8/patches/*.patch
 | |
|   * Fix patch conflicts.
 | |
|   * Save new patches. Change number if expecting more or fewer patches:
 | |
| git format-patch -3 -o $CHROMIUM_SRC/third_party/r8/3pp/patches
 | |
|   * Submit these fixed patches and the bot will automatically retry.
 | |
| 
 | |
| * Local development (see above for setting up the r8 repo):
 | |
|   * Build
 | |
| tools/gradle.py r8
 | |
|   * Shrink (improves r8/d8 launch time):
 | |
| java -jar build/libs/r8.jar --debug --classfile --output r8.jar \
 | |
|     --lib $CHROMIUM_SRC/third_party/jdk/current --pg-conf src/main/keep.txt \
 | |
|     --no-minification --no-desugaring build/libs/r8.jar
 | |
| mv $CHROMIUM_SRC/third_party/r8/lib/r8.jar{,.bak}
 | |
| cp r8.jar $CHROMIUM_SRC/third_party/r8/lib/r8.jar
 | |
| 
 | |
| * Update backported methods list:
 | |
| cd $CHROMIUM_SRC
 | |
| java -cp third_party/r8/lib/r8.jar com.android.tools.r8.BackportedMethodList --min-api 16 > third_party/r8/backported_methods.txt
 | |
| 
 | |
| * Update instructions for desugar_jdk_libs.json:
 | |
| unzip -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
 | |
|   * Remove all mentions of ConcurrentHashMap and TimeZone#getTimeZone and remove trailing commas.
 | |
|   * Update //build/config/android/internal_rules.gni to point at the new .jar files:
 | |
|     * desugar_jdk_libs-1.1.1.jar
 | |
|     * desugar_jdk_libs_configuration-1.1.1.jar
 | |
| 
 | |
| How to file bugs against R8:
 | |
| * Copy & paste the failing ninja command (starts with proguard.py), and add --dump-inputs.
 | |
|   * This also works for dex.py, it produces d8inputs.zip
 | |
| * File bug at go/r8bug
 | |
| * Things to include (use discretion if some are not relevant):
 | |
|   * src revision bug reproduces at
 | |
|   * Repro steps (gn gen & autoninja commands)
 | |
|     * Prefer enable_chrome_android_internal=false
 | |
|   * The r8inputs.zip from --dump-inputs
 | |
|   * Any relevant dexdump analysis
 | |
| 
 | |
| How to submit CLs to R8:
 | |
| * Request to be added to their allowlist in order to upload CLs.
 | |
| * After CLs are submitted, check the bots for build breakage.
 | |
|   * https://ci.chromium.org/p/r8/g/main_all/console
 |