Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6cd99e6a authored by Ivan Lozano's avatar Ivan Lozano
Browse files

Add Rust fuzzing support.

Add a rust_fuzz module which builds a libfuzzer binary that enabes
asan+sancov. This relies on the libfuzzer-sys crate.

Bug: 147140513
Test: Local rust_fuzz example builds, fuzzes with asan+sancov.
Change-Id: I57db3b8d25869791824ccfab768d13b0bb9d42fa
parent f98384ad
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ bootstrap_go_package {
        "clippy.go",
        "compiler.go",
        "coverage.go",
        "fuzz.go",
        "image.go",
        "library.go",
        "prebuilt.go",
@@ -22,6 +23,7 @@ bootstrap_go_package {
        "project_json.go",
        "protobuf.go",
        "rust.go",
        "sanitize.go",
        "strip.go",
        "source_provider.go",
        "test.go",
@@ -34,6 +36,7 @@ bootstrap_go_package {
        "clippy_test.go",
        "compiler_test.go",
        "coverage_test.go",
        "fuzz_test.go",
        "image_test.go",
        "library_test.go",
        "project_json_test.go",
+3 −3
Original line number Diff line number Diff line
@@ -86,7 +86,7 @@ func init() {

func TransformSrcToBinary(ctx ModuleContext, mainSrc android.Path, deps PathDeps, flags Flags,
	outputFile android.WritablePath, linkDirs []string) buildOutput {
	flags.RustFlags = append(flags.RustFlags, "-C lto")
	flags.GlobalRustFlags = append(flags.GlobalRustFlags, "-C lto")

	return transformSrctoCrate(ctx, mainSrc, deps, flags, outputFile, "bin", linkDirs)
}
@@ -103,13 +103,13 @@ func TransformSrctoDylib(ctx ModuleContext, mainSrc android.Path, deps PathDeps,

func TransformSrctoStatic(ctx ModuleContext, mainSrc android.Path, deps PathDeps, flags Flags,
	outputFile android.WritablePath, linkDirs []string) buildOutput {
	flags.RustFlags = append(flags.RustFlags, "-C lto")
	flags.GlobalRustFlags = append(flags.GlobalRustFlags, "-C lto")
	return transformSrctoCrate(ctx, mainSrc, deps, flags, outputFile, "staticlib", linkDirs)
}

func TransformSrctoShared(ctx ModuleContext, mainSrc android.Path, deps PathDeps, flags Flags,
	outputFile android.WritablePath, linkDirs []string) buildOutput {
	flags.RustFlags = append(flags.RustFlags, "-C lto")
	flags.GlobalRustFlags = append(flags.GlobalRustFlags, "-C lto")
	return transformSrctoCrate(ctx, mainSrc, deps, flags, outputFile, "cdylib", linkDirs)
}

+1 −0
Original line number Diff line number Diff line
@@ -146,6 +146,7 @@ type baseCompiler struct {
	relative string
	path     android.InstallPath
	location installLocation
	sanitize *sanitize

	coverageOutputZipFile android.OptionalPath
	distFile              android.OptionalPath
+6 −2
Original line number Diff line number Diff line
@@ -71,6 +71,10 @@ func (t *toolchainArm64) Supported() bool {
	return true
}

func (toolchainArm64) LibclangRuntimeLibraryArch() string {
	return "aarch64"
}

func Arm64ToolchainFactory(arch android.Arch) Toolchain {
	archVariant := arch.ArchVariant
	if archVariant == "" {
+4 −0
Original line number Diff line number Diff line
@@ -72,6 +72,10 @@ func (t *toolchainArm) Supported() bool {
	return true
}

func (toolchainArm) LibclangRuntimeLibraryArch() string {
	return "arm"
}

func ArmToolchainFactory(arch android.Arch) Toolchain {
	toolchainRustFlags := []string{
		"${config.ArmToolchainRustFlags}",
Loading