You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hmz007 36ed224bac
Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a)
1 year ago
..
testdata Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
README.md Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
android_config_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
android_llvm_next_flags.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
bisect_flag.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
bisect_flag_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
build.py Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
bundle.README Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
bundle.py Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
ccache_flag.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
ccache_flag_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
clang_flags.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
clang_flags_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
clang_syntax_flag.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
clang_syntax_flag_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
clang_tidy_flag.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
clang_tidy_flag_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
command.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
command_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
compile_with_fallback.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
compile_with_fallback_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
compiler_wrapper.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
compiler_wrapper_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
config.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
config_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
crash_builds.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
crash_builds_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
cros_hardened_config_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
cros_host_config_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
cros_llvm_next_flags.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
cros_nonhardened_config_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
disable_werror_flag.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
disable_werror_flag_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
env.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
env_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
errors.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
errors_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
gcc_flags.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
gcc_flags_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
go.mod Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
go_exec.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
goldenutil_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
install_compiler_wrapper.sh Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
iwyu_flag.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
iwyu_flag_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
kernel_bug.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
kernel_bug_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
libc_exec.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
libgcc_flags.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
libgcc_flags_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
main.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
print_cmdline_flag.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
print_cmdline_flag_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
print_config_flag.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
print_config_flag_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
remote_build_flag_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
remote_build_flags.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
reset_compiler_wrapper.sh Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
rusage_flag.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
rusage_flag_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
sanitizer_flags.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
sanitizer_flags_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
stackprotector_flags.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
stackprotector_flags_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
sysroot_flag.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
sysroot_flag_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
testutil_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
thumb_flags.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
thumb_flags_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
unsupported_flags.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
unsupported_flags_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
x64_flags.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
x64_flags_test.go Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago

README.md

Compiler wrapper

See the comments on the top of main.go. Build is split into 2 steps via separate commands:

  • bundle: copies the sources and the build.py file into a folder.
  • build: builds the actual go binary, assuming it is executed from the folder created by bundle.py.

This allows to copy the sources to a ChromeOS / Android package, including the build script, and then build from there without a dependency on toolchain-utils itself.

Testing Inside the Chroot

To test updates to the wrapper locally:

Run install_compiler_wrapper.sh to install the new wrapper in the chroot:

(chroot) ~/trunk/src/third_party/toolchain-utils/compiler_wrapper/install_compiler_wrapper.sh

Then perform the tests, e.g. build with the new compiler.

Updating the Wrapper for ChromeOS

To update the wrapper for everyone, the new wrapper configuration must be copied into chromiumos-overlay, and new revisions of the gcc and llvm ebuilds must be created.

Copy over sources and build.py to chromiumos-overlay:

(chroot) /mnt/host/source/src/third_party/chromiumos-overlay/sys-devel/llvm/files/update_compiler_wrapper.sh

Rename chromiumos-overlay/sys-devel/llvm/llvm-${VERSION}.ebuild to the next revision number. For example, if the current version is 11.0_pre394483_p20200618-r2:

(chroot) cd ~/trunk/src/third_party/chromiumos-overlay
(chroot) git mv llvm-11.0_pre394483_p20200618-r2.ebuild llvm-11.0_pre394483_p20200618-r3.ebuild

Rename chromiumos-overlay/sys-devel/gcc/gcc-${VERSION}.ebuild to the next revision number. For example, if the current version is 10.2.0-r3:

(chroot) cd ~/trunk/src/third_party/chromiumos-overlay
(chroot) git mv sys-devel/gcc/gcc-10.2.0-r3.ebuild sys-devel/gcc/gcc-10.2.0-r4.ebuild

Commit those changes together with the changes made by update_compiler_wrapper.sh.

The changes can then be reviewed and submitted through the normal process.

Paths

build.py is called by these ebuilds:

  • third_party/chromiumos-overlay/sys-devel/llvm/llvm-*.ebuild
  • third_party/chromiumos-overlay/sys-devel/gcc/gcc-*.ebuild

Generated wrappers are stored here:

  • Sysroot wrapper with ccache: /usr/x86_64-pc-linux-gnu/<arch>/gcc-bin/10.2.0/sysroot_wrapper.hardened.ccache
  • Sysroot wrapper without ccache: /usr/x86_64-pc-linux-gnu/<arch>/gcc-bin/10.2.0/sysroot_wrapper.hardened.noccache
  • Clang host wrapper: /usr/bin/clang_host_wrapper
  • Gcc host wrapper: /usr/x86_64-pc-linux-gnu/gcc-bin/10.2.0/host_wrapper

Using the compiler wrapper to crash arbitrary compilations

When Clang crashes, its output can be extremely useful. Often, it will provide the user with a stack trace, and messages like:

clang-15: unable to execute command: Illegal instruction
clang-15: note: diagnostic msg: /tmp/clang_crash_diagnostics/foo-5420d2.c
clang-15: note: diagnostic msg: /tmp/clang_crash_diagnostics/foo-5420d2.sh

Where the artifacts at /tmp/clang_crash_diagnostics/foo-* are a full, self-contained reproducer of the inputs that caused the crash in question. Often, such a reproducer is very valuable to have even for cases where a crash doesn't happen (e.g., maybe Clang is now emitting an error where it used to not do so, and we want to bisect upstream LLVM with that info). Normally, collecting and crafting such a reproducer is a multi-step process, and can be error-prone; compile commands may rely on env vars, they may be done within chroots, they may rely on being executed in a particular directory, they may rely on intermediate state, etc.

Because of the usefulness of these crash reports, our wrapper supports crashing Clang even on files that ordinarily don't cause Clang to crash. For various reasons (b/236736327), this support currently requires rebuilding and redeploying the wrapper in order to work. That said, this could be a valuable tool for devs interested in creating a self-contained reproducer without having to manually reproduce the environment in which a particular build was performed.