libclang_rt* libs are now specified in Android.bp
Bug: 63053790
Test: BOARD_VNDK_VERSION=current m -j libstagefright_foundation.vendor
Test: repo init to aosp-llvm branch, then run python
external/clang/build.py --no-multi-stage --no-debug-clang
Test: SANITIZE_TARGET=address m -j <a_module>
Change-Id: I37e6209a82ffe9f62f76a0c533ff81b0e3290894
diff --git a/Android.bp b/Android.bp
index 9981e4d..a46a765 100644
--- a/Android.bp
+++ b/Android.bp
@@ -21,6 +21,138 @@
},
}
+libclang_rt_prebuilt_library_shared {
+ name: "libclang_rt.asan-arm-android",
+ enabled: false,
+ vendor_available: true,
+ arch: {
+ arm: {
+ enabled: true,
+ },
+ },
+}
+
+libclang_rt_prebuilt_library_shared {
+ name: "libclang_rt.asan-aarch64-android",
+ enabled: false,
+ vendor_available: true,
+ arch: {
+ arm64: {
+ enabled: true,
+ },
+ },
+}
+
+libclang_rt_prebuilt_library_shared {
+ name: "libclang_rt.asan-mips-android",
+ enabled: false,
+ vendor_available: true,
+ arch: {
+ mips: {
+ enabled: true,
+ },
+ },
+}
+
+libclang_rt_prebuilt_library_shared {
+ name: "libclang_rt.asan-mips64-android",
+ enabled: false,
+ vendor_available: true,
+ arch: {
+ mips64: {
+ enabled: true,
+ },
+ },
+}
+
+libclang_rt_prebuilt_library_shared {
+ name: "libclang_rt.asan-i686-android",
+ enabled: false,
+ vendor_available: true,
+ arch: {
+ x86: {
+ enabled: true,
+ },
+ },
+}
+
+libclang_rt_prebuilt_library_shared {
+ name: "libclang_rt.asan-x86_64-android",
+ enabled: false,
+ vendor_available: true,
+ arch: {
+ x86_64: {
+ enabled: true,
+ },
+ },
+}
+
+libclang_rt_prebuilt_library_shared {
+ name: "libclang_rt.ubsan_standalone-arm-android",
+ enabled: false,
+ vendor_available: true,
+ arch: {
+ arm: {
+ enabled: true,
+ },
+ },
+}
+
+libclang_rt_prebuilt_library_shared {
+ name: "libclang_rt.ubsan_standalone-aarch64-android",
+ enabled: false,
+ vendor_available: true,
+ arch: {
+ arm64: {
+ enabled: true,
+ },
+ },
+}
+
+libclang_rt_prebuilt_library_shared {
+ name: "libclang_rt.ubsan_standalone-mips-android",
+ enabled: false,
+ vendor_available: true,
+ arch: {
+ mips: {
+ enabled: true,
+ },
+ },
+}
+
+libclang_rt_prebuilt_library_shared {
+ name: "libclang_rt.ubsan_standalone-mips64-android",
+ enabled: false,
+ vendor_available: true,
+ arch: {
+ mips64: {
+ enabled: true,
+ },
+ },
+}
+
+libclang_rt_prebuilt_library_shared {
+ name: "libclang_rt.ubsan_standalone-i686-android",
+ enabled: false,
+ vendor_available: true,
+ arch: {
+ x86: {
+ enabled: true,
+ },
+ },
+}
+
+libclang_rt_prebuilt_library_shared {
+ name: "libclang_rt.ubsan_standalone-x86_64-android",
+ enabled: false,
+ vendor_available: true,
+ arch: {
+ x86_64: {
+ enabled: true,
+ },
+ },
+}
+
subdirs = [
"soong",
]
diff --git a/Android.mk b/Android.mk
index 89758b2..1cf3f5c 100644
--- a/Android.mk
+++ b/Android.mk
@@ -22,138 +22,6 @@
libclang_dir := $(LLVM_PREBUILTS_VERSION)/lib64/clang/$(LLVM_RELEASE_VERSION)
-include $(CLEAR_VARS)
-LOCAL_MODULE := libclang_rt.asan-arm-android
-LOCAL_SRC_FILES := $(libclang_dir)/lib/linux/$(LOCAL_MODULE).so
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-LOCAL_MODULE_SUFFIX := .so
-LOCAL_MODULE_TARGET_ARCH := arm
-LOCAL_MODULE_PATH := $(TARGET_OUT)/lib
-LOCAL_SANITIZE := never
-LOCAL_SYSTEM_SHARED_LIBRARIES :=
-LOCAL_CXX_STL := none
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := libclang_rt.asan-aarch64-android
-LOCAL_SRC_FILES := $(libclang_dir)/lib/linux/$(LOCAL_MODULE).so
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-LOCAL_MODULE_SUFFIX := .so
-LOCAL_MODULE_TARGET_ARCH := arm64
-LOCAL_MODULE_PATH := $(TARGET_OUT)/lib64
-LOCAL_SANITIZE := never
-LOCAL_SYSTEM_SHARED_LIBRARIES :=
-LOCAL_CXX_STL := none
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := libclang_rt.asan-i686-android
-LOCAL_SRC_FILES := $(libclang_dir)/lib/linux/$(LOCAL_MODULE).so
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-LOCAL_MODULE_SUFFIX := .so
-LOCAL_MODULE_TARGET_ARCH := x86
-LOCAL_MODULE_PATH := $(TARGET_OUT)/lib
-LOCAL_SANITIZE := never
-LOCAL_SYSTEM_SHARED_LIBRARIES :=
-LOCAL_CXX_STL := none
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := libclang_rt.asan-mips-android
-LOCAL_SRC_FILES := $(libclang_dir)/lib/linux/$(LOCAL_MODULE).so
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-LOCAL_MODULE_SUFFIX := .so
-LOCAL_MODULE_TARGET_ARCH := mips
-LOCAL_MODULE_PATH := $(TARGET_OUT)/lib
-LOCAL_SANITIZE := never
-LOCAL_SYSTEM_SHARED_LIBRARIES :=
-LOCAL_CXX_STL := none
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := libclang_rt.asan-mips64-android
-LOCAL_SRC_FILES := $(libclang_dir)/lib/linux/$(LOCAL_MODULE).so
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-LOCAL_MODULE_SUFFIX := .so
-LOCAL_MODULE_TARGET_ARCH := mips64
-LOCAL_MODULE_PATH := $(TARGET_OUT)/lib64
-LOCAL_SANITIZE := never
-LOCAL_SYSTEM_SHARED_LIBRARIES :=
-LOCAL_CXX_STL := none
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := libclang_rt.ubsan_standalone-arm-android
-LOCAL_SRC_FILES := $(libclang_dir)/lib/linux/$(LOCAL_MODULE).so
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-LOCAL_MODULE_SUFFIX := .so
-LOCAL_MODULE_TARGET_ARCH := arm
-LOCAL_MODULE_PATH := $(TARGET_OUT)/lib
-LOCAL_SANITIZE := never
-LOCAL_SYSTEM_SHARED_LIBRARIES :=
-LOCAL_CXX_STL := none
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := libclang_rt.ubsan_standalone-aarch64-android
-LOCAL_SRC_FILES := $(libclang_dir)/lib/linux/$(LOCAL_MODULE).so
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-LOCAL_MODULE_SUFFIX := .so
-LOCAL_MODULE_TARGET_ARCH := arm64
-LOCAL_MODULE_PATH := $(TARGET_OUT)/lib64
-LOCAL_SANITIZE := never
-LOCAL_SYSTEM_SHARED_LIBRARIES :=
-LOCAL_CXX_STL := none
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := libclang_rt.ubsan_standalone-i686-android
-LOCAL_SRC_FILES := $(libclang_dir)/lib/linux/$(LOCAL_MODULE).so
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-LOCAL_MODULE_SUFFIX := .so
-LOCAL_MODULE_TARGET_ARCH := x86
-LOCAL_MODULE_PATH := $(TARGET_OUT)/lib
-LOCAL_SANITIZE := never
-LOCAL_SYSTEM_SHARED_LIBRARIES :=
-LOCAL_CXX_STL := none
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := libclang_rt.ubsan_standalone-x86_64-android
-LOCAL_SRC_FILES := $(libclang_dir)/lib/linux/$(LOCAL_MODULE).so
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-LOCAL_MODULE_SUFFIX := .so
-LOCAL_MODULE_TARGET_ARCH := x86_64
-LOCAL_MODULE_PATH_64 := $(TARGET_OUT)/lib64
-LOCAL_SANITIZE := never
-LOCAL_SYSTEM_SHARED_LIBRARIES :=
-LOCAL_CXX_STL := none
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := libclang_rt.ubsan_standalone-mips-android
-LOCAL_SRC_FILES := $(libclang_dir)/lib/linux/$(LOCAL_MODULE).so
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-LOCAL_MODULE_SUFFIX := .so
-LOCAL_MODULE_TARGET_ARCH := mips
-LOCAL_MODULE_PATH := $(TARGET_OUT)/lib
-LOCAL_SANITIZE := never
-LOCAL_SYSTEM_SHARED_LIBRARIES :=
-LOCAL_CXX_STL := none
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := libclang_rt.ubsan_standalone-mips64-android
-LOCAL_SRC_FILES := $(libclang_dir)/lib/linux/$(LOCAL_MODULE).so
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-LOCAL_MODULE_SUFFIX := .so
-LOCAL_MODULE_TARGET_ARCH := mips64
-LOCAL_MODULE_PATH := $(TARGET_OUT)/lib64
-LOCAL_SANITIZE := never
-LOCAL_SYSTEM_SHARED_LIBRARIES :=
-LOCAL_CXX_STL := none
-include $(BUILD_PREBUILT)
-
# Also build/install the newest asan_test for each arch
# We rename it to asan-test for now to avoid duplicate definitions.
diff --git a/soong/Android.bp b/soong/Android.bp
index 0bb87a8..ab020a5 100644
--- a/soong/Android.bp
+++ b/soong/Android.bp
@@ -15,8 +15,8 @@
//
bootstrap_go_package {
- name: "soong-libfuzzer",
- pkgPath: "android/soong/prebuilts/clang/host/linux-x86",
+ name: "soong-clang-prebuilts",
+ pkgPath: "android/soong/prebuilts/clang/host/linux-x86/clangprebuilts",
deps: [
"blueprint",
"soong-android",
@@ -24,7 +24,7 @@
"soong-cc-config"
],
srcs: [
- "libfuzzer.go",
+ "clangprebuilts.go",
],
pluginFor: ["soong_build"],
}
diff --git a/soong/libfuzzer.go b/soong/clangprebuilts.go
similarity index 61%
rename from soong/libfuzzer.go
rename to soong/clangprebuilts.go
index b6cc70a..71e0b50 100644
--- a/soong/libfuzzer.go
+++ b/soong/clangprebuilts.go
@@ -14,11 +14,12 @@
// limitations under the License.
//
-package libfuzzer
+package clangprebuilts
import (
"path"
"path/filepath"
+ "strings"
"github.com/google/blueprint/proptools"
@@ -27,13 +28,48 @@
"android/soong/cc/config"
)
-// This module is used to generate libfuzzer static libraries. When
+// This module is used to generate libfuzzer static libraries and libclang_rt.* shared libraries. When
// LLVM_PREBUILTS_VERSION and LLVM_RELEASE_VERSION are set, the library will
// generated from the given path.
func init() {
android.RegisterModuleType("libfuzzer_prebuilt_library_static",
libfuzzerPrebuiltLibraryStaticFactory)
+ android.RegisterModuleType("libclang_rt_prebuilt_library_shared",
+ libClangRtPrebuiltLibrarySharedFactory)
+}
+
+func getClangDirs(ctx android.LoadHookContext) (libDir string, headerDir string) {
+ clangDir := path.Join(
+ "./",
+ ctx.AConfig().GetenvWithDefault("LLVM_PREBUILTS_VERSION", config.ClangDefaultVersion),
+ )
+ headerDir = path.Join(clangDir, "prebuilt_include", "llvm", "lib", "Fuzzer")
+ releaseVersion := ctx.AConfig().GetenvWithDefault("LLVM_RELEASE_VERSION",
+ config.ClangDefaultShortVersion)
+ libDir = path.Join(clangDir, "lib64", "clang", releaseVersion, "lib", "linux")
+ return
+}
+
+type archProps struct {
+ Android_arm struct {
+ Srcs []string
+ }
+ Android_arm64 struct {
+ Srcs []string
+ }
+ Android_mips struct {
+ Srcs []string
+ }
+ Android_mips64 struct {
+ Srcs []string
+ }
+ Android_x86 struct {
+ Srcs []string
+ }
+ Android_x86_64 struct {
+ Srcs []string
+ }
}
func libfuzzerPrebuiltLibraryStatic(ctx android.LoadHookContext) {
@@ -52,38 +88,12 @@
}
}
- clangDir := path.Join(
- "./",
- ctx.AConfig().GetenvWithDefault("LLVM_PREBUILTS_VERSION", config.ClangDefaultVersion),
- )
- headerDir := path.Join(clangDir, "prebuilt_include", "llvm", "lib", "Fuzzer")
- releaseVersion := ctx.AConfig().GetenvWithDefault("LLVM_RELEASE_VERSION",
- config.ClangDefaultShortVersion)
- libDir := path.Join(clangDir, "lib64", "clang", releaseVersion, "lib", "linux")
+ libDir, headerDir := getClangDirs(ctx)
type props struct {
- Enabled *bool
+ Enabled *bool
Export_include_dirs []string
- Target struct {
- Android_arm struct {
- Srcs []string
- }
- Android_arm64 struct {
- Srcs []string
- }
- Android_mips struct {
- Srcs []string
- }
- Android_mips64 struct {
- Srcs []string
- }
- Android_x86 struct {
- Srcs []string
- }
- Android_x86_64 struct {
- Srcs []string
- }
- }
+ Target archProps
}
p := &props{}
@@ -99,8 +109,49 @@
ctx.AppendProperties(p)
}
+func libClangRtPrebuiltLibraryShared(ctx android.LoadHookContext) {
+ if ctx.AConfig().IsEnvTrue("FORCE_BUILD_SANITIZER_SHARED_OBJECTS") {
+ return
+ }
+
+ libDir, _ := getClangDirs(ctx)
+
+ type props struct {
+ Srcs []string
+ System_shared_libs []string
+ Sanitize struct {
+ Never bool
+ }
+ Strip struct {
+ None bool
+ }
+ Pack_relocations *bool
+ Stl *string
+ }
+
+ p := &props{}
+
+ name := strings.Replace(ctx.ModuleName(), "prebuilt_", "", 1)
+
+ p.Srcs = []string{path.Join(libDir, name+".so")}
+ p.System_shared_libs = []string{}
+ p.Sanitize.Never = true
+ p.Strip.None = true
+ disable := false
+ p.Pack_relocations = &disable
+ none := "none"
+ p.Stl = &none
+ ctx.AppendProperties(p)
+}
+
func libfuzzerPrebuiltLibraryStaticFactory() android.Module {
module, _ := cc.NewPrebuiltStaticLibrary(android.HostAndDeviceSupported)
android.AddLoadHook(module, libfuzzerPrebuiltLibraryStatic)
return module.Init()
}
+
+func libClangRtPrebuiltLibrarySharedFactory() android.Module {
+ module, _ := cc.NewPrebuiltSharedLibrary(android.DeviceSupported)
+ android.AddLoadHook(module, libClangRtPrebuiltLibraryShared)
+ return module.Init()
+}