libbcc: convert makefiles to support multilib build
Convert makefiles to allow for building two architectures at the
same time.
Change-Id: I13cba3766a658e332a5223ce357878b25ba8ecec
diff --git a/Android.mk b/Android.mk
index 244e391..fcc07f9 100644
--- a/Android.mk
+++ b/Android.mk
@@ -35,48 +35,24 @@
# Calculate SHA1 checksum for libbcc.so, libRS.so and libclcore.bc
#=====================================================================
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := libbcc.sha1
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-
-libbcc_SHA1_SRCS := \
- $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/libbcc.so \
- $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/libcompiler_rt.so \
- $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/libRS.so \
- $(call intermediates-dir-for,SHARED_LIBRARIES,libclcore.bc,,)/libclcore.bc \
- $(call intermediates-dir-for,SHARED_LIBRARIES,libclcore_debug.bc,,)/libclcore_debug.bc
-
-ifeq ($(ARCH_ARM_HAVE_NEON),true)
- libbcc_SHA1_SRCS += \
- $(call intermediates-dir-for,SHARED_LIBRARIES,libclcore_neon.bc,,)/libclcore_neon.bc
+my_2nd_arch_prefix :=
+include $(LOCAL_PATH)/libbcc.sha1.mk
+ifneq ($(TARGET_2ND_ARCH),)
+my_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX)
+include $(LOCAL_PATH)/libbcc.sha1.mk
endif
-
-libbcc_GEN_SHA1_STAMP := $(LOCAL_PATH)/tools/build/gen-sha1-stamp.py
-intermediates := $(call local-intermediates-dir)
-
-libbcc_SHA1_ASM := $(intermediates)/libbcc.sha1.S
-LOCAL_GENERATED_SOURCES += $(libbcc_SHA1_ASM)
-$(libbcc_SHA1_ASM): PRIVATE_SHA1_SRCS := $(libbcc_SHA1_SRCS)
-$(libbcc_SHA1_ASM): $(libbcc_SHA1_SRCS) $(libbcc_GEN_SHA1_STAMP)
- @echo libbcc.sha1: $@
- $(hide) mkdir -p $(dir $@)
- $(hide) $(libbcc_GEN_SHA1_STAMP) $(PRIVATE_SHA1_SRCS) > $@
-
-LOCAL_CFLAGS += -D_REENTRANT -DPIC -fPIC
-LOCAL_CFLAGS += -O3 -nodefaultlibs -nostdlib
-
-include $(BUILD_SHARED_LIBRARY)
+my_2nd_arch_prefix :=
#=====================================================================
# Device Shared Library libbcc
#=====================================================================
-# TODOArm64
-# TODOMips64
-ifneq ($(filter $(TARGET_ARCH),arm64 mips64),)
- $(info TODO$(TARGET_ARCH): $(LOCAL_PATH)/Android.mk Enable libbcc build)
-else
+ifeq ($(TARGET_ARCH),arm64)
+$(info TODOArm64: $(LOCAL_PATH)/Android.mk Enable libbcc build)
+endif
+
+ifeq ($(TARGET_ARCH),mips64)
+$(info TODOMips64: $(LOCAL_PATH)/Android.mk Enable libbcc build)
+endif
include $(CLEAR_VARS)
@@ -94,21 +70,25 @@
# installed.
LOCAL_REQUIRED_MODULES := libclcore.bc libclcore_debug.bc libbcc.sha1 libcompiler_rt
-ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86 x86_64))
-LOCAL_REQUIRED_MODULES += libclcore_x86.bc
-endif
+LOCAL_REQUIRED_MODULES_x86 += libclcore_x86.bc
+LOCAL_REQUIRED_MODULES_x86_64 += libclcore_x86.bc
ifeq ($(ARCH_ARM_HAVE_NEON),true)
- LOCAL_REQUIRED_MODULES += libclcore_neon.bc
+ LOCAL_REQUIRED_MODULES_arm += libclcore_neon.bc
endif
# Generate build information (Build time + Build git revision + Build Semi SHA1)
+my_2nd_arch_prefix :=
include $(LIBBCC_ROOT_PATH)/libbcc-gen-build-info.mk
+ifdef TARGET_2ND_ARCH
+my_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX)
+include $(LIBBCC_ROOT_PATH)/libbcc-gen-build-info.mk
+endif
+my_2nd_arch_prefix :=
include $(LIBBCC_DEVICE_BUILD_MK)
include $(BUILD_SHARED_LIBRARY)
-endif # !(arm64 || mips64)
#=====================================================================
# Host Shared Library libbcc
#=====================================================================
@@ -136,6 +116,7 @@
endif
# Generate build information (Build time + Build git revision + Build Semi SHA1)
+my_2nd_arch_prefix :=
include $(LIBBCC_ROOT_PATH)/libbcc-gen-build-info.mk
include $(LIBBCC_HOST_BUILD_MK)
diff --git a/bcinfo/Android.mk b/bcinfo/Android.mk
index a5652be..b7296d9 100644
--- a/bcinfo/Android.mk
+++ b/bcinfo/Android.mk
@@ -51,18 +51,19 @@
LLVM_ROOT_PATH := external/llvm
-# TODOArm64
-# TODOMips64
-ifneq ($(filter $(TARGET_ARCH),arm64 mips64),)
- $(info TODO$(TARGET_ARCH): $(LOCAL_PATH)/Android.mk Enable build of libbcinfo device shared library)
-else
+ifeq ($(TARGET_ARCH),arm64)
+$(info TODOArm64: $(LOCAL_PATH)/Android.mk Enable build of libbcinfo device shared library)
+endif
+
+ifeq ($(TARGET_ARCH),mips64)
+$(info TODOMips64: $(LOCAL_PATH)/Android.mk Enable build of libbcinfo device shared library)
+endif
include $(CLEAR_VARS)
LOCAL_MODULE := libbcinfo
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_TAGS := optional
-intermediates := $(local-intermediates-dir)
LOCAL_SRC_FILES := $(libbcinfo_SRC_FILES)
@@ -75,7 +76,6 @@
include $(LLVM_ROOT_PATH)/llvm-device-build.mk
include $(BUILD_SHARED_LIBRARY)
-endif # !(arm64 || mips64)
include $(CLEAR_VARS)
diff --git a/libbcc-device-build.mk b/libbcc-device-build.mk
index 1aa1239..06d7f86 100644
--- a/libbcc-device-build.mk
+++ b/libbcc-device-build.mk
@@ -34,33 +34,34 @@
# For the host build, we will include as many architecture as possible,
# so that we can test the execution engine easily.
-# TODOArm64
-# TODOMips64
-ifneq ($(filter $(TARGET_ARCH),arm64 mips64),)
- $(info TODO$(TARGET_ARCH): $(LOCAL_PATH)/libbcc-device-build.mk Add $(TARGET_ARCH) define to LOCAL_CFLAGS)
-else
+LOCAL_MODULE_TARGET_ARCH := $(LLVM_SUPPORTED_ARCH)
-ifeq ($(TARGET_ARCH),arm)
- LOCAL_CFLAGS += -DFORCE_ARM_CODEGEN
- ifeq ($(ARCH_ARM_HAVE_VFP),true)
- LOCAL_CFLAGS += -DARCH_ARM_HAVE_VFP
- ifeq ($(ARCH_ARM_HAVE_VFP_D32),true)
- LOCAL_CFLAGS += -DARCH_ARM_HAVE_VFP_D32
- endif
+ifeq ($(TARGET_ARCH),arm64)
+$(info TODOArm64: $(LOCAL_PATH)/Android.mk Add Arm64 define to LOCAL_CFLAGS)
+endif
+
+ifeq ($(TARGET_ARCH),mips64)
+$(info TODOMips64: $(LOCAL_PATH)/Android.mk Add Mips64 define to LOCAL_CFLAGS)
+endif
+
+LOCAL_CFLAGS_arm += -DFORCE_ARM_CODEGEN
+ifeq ($(ARCH_ARM_HAVE_VFP),true)
+ LOCAL_CFLAGS_arm += -DARCH_ARM_HAVE_VFP
+ ifeq ($(ARCH_ARM_HAVE_VFP_D32),true)
+ LOCAL_CFLAGS_arm += -DARCH_ARM_HAVE_VFP_D32
endif
- ifeq ($(ARCH_ARM_HAVE_NEON),true)
- LOCAL_CFLAGS += -DARCH_ARM_HAVE_NEON
- endif
-else
- ifeq ($(TARGET_ARCH),mips)
- LOCAL_CFLAGS += -DFORCE_MIPS_CODEGEN
- else
- ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86 x86_64))
- LOCAL_CFLAGS += -DFORCE_X86_CODEGEN
- else
- $(error Unsupported architecture $(TARGET_ARCH))
- endif
- endif
+endif
+ifeq ($(ARCH_ARM_HAVE_NEON),true)
+ LOCAL_CFLAGS_arm += -DARCH_ARM_HAVE_NEON
+endif
+
+LOCAL_CFLAGS_mips += -DFORCE_MIPS_CODEGEN
+
+LOCAL_CFLAGS_x86 += -DFORCE_X86_CODEGEN
+LOCAL_CFLAGS_x86_64 += -DFORCE_X86_CODEGEN
+
+ifeq (,$(filter $(TARGET_ARCH),arm64 arm mips mips64 x86 x86_64))
+ $(error Unsupported architecture $(TARGET_ARCH))
endif
LOCAL_C_INCLUDES := \
@@ -70,5 +71,3 @@
$(LLVM_ROOT_PATH)/include \
$(LLVM_ROOT_PATH)/device/include \
$(LOCAL_C_INCLUDES)
-
-endif # !(arm64 || mips64)
diff --git a/libbcc-gen-build-info.mk b/libbcc-gen-build-info.mk
index 7112a1a..fa6a521 100644
--- a/libbcc-gen-build-info.mk
+++ b/libbcc-gen-build-info.mk
@@ -34,15 +34,15 @@
LOCAL_LIBBCC_LIB_DEPS := \
$(foreach lib,$(LOCAL_STATIC_LIBRARIES), \
$(call intermediates-dir-for, \
- STATIC_LIBRARIES,$(lib),$(LOCAL_IS_HOST_MODULE))/$(lib)$(a_suffix)) \
+ STATIC_LIBRARIES,$(lib),$(LOCAL_IS_HOST_MODULE),,$(my_2nd_arch_prefix))/$(lib)$(a_suffix)) \
$(foreach lib,$(LOCAL_WHOLE_STATIC_LIBRARIES), \
$(call intermediates-dir-for, \
- STATIC_LIBRARIES,$(lib),$(LOCAL_IS_HOST_MODULE))/$(lib)$(a_suffix)) \
- $(addprefix $($(my_prefix)OUT_INTERMEDIATE_LIBRARIES)/, \
+ STATIC_LIBRARIES,$(lib),$(LOCAL_IS_HOST_MODULE),,$(my_2nd_arch_prefix))/$(lib)$(a_suffix)) \
+ $(addprefix $($(my_2nd_arch_prefix)$(my_prefix)OUT_INTERMEDIATE_LIBRARIES)/, \
$(addsuffix $(so_suffix), $(LOCAL_SHARED_LIBRARIES))) \
# Build Rules for Automatically Generated Build Information
-GEN := $(local-intermediates-dir)/BuildInfo.cpp
+GEN := $(call local-intermediates-dir,,$(my_2nd_arch_prefix))/BuildInfo.cpp
gen_build_info := $(LOCAL_PATH)/tools/build/gen-build-info.py
@@ -54,4 +54,8 @@
$(wildcard $(LOCAL_PATH)/.git/COMMIT_EDITMSG)
$(transform-generated-source)
+ifdef LOCAL_IS_HOST_MODULE
LOCAL_GENERATED_SOURCES += $(GEN)
+else
+LOCAL_GENERATED_SOURCES_$(TARGET_$(my_2nd_arch_prefix)ARCH) += $(GEN)
+endif
diff --git a/libbcc-gen-config-from-mk.mk b/libbcc-gen-config-from-mk.mk
index f8baa63..b0bf712 100644
--- a/libbcc-gen-config-from-mk.mk
+++ b/libbcc-gen-config-from-mk.mk
@@ -15,9 +15,9 @@
#
# Build rules for extracting configuration from Android.mk
-intermediates := $(call local-intermediates-dir)
+generated_sources := $(call local-generated-sources-dir)
-GEN_CONFIG_FROM_MK := $(intermediates)/ConfigFromMk.h
+GEN_CONFIG_FROM_MK := $(generated_sources)/ConfigFromMk.h
$(GEN_CONFIG_FROM_MK): PRIVATE_PATH := $(LIBBCC_ROOT_PATH)
$(GEN_CONFIG_FROM_MK): PRIVATE_CUSTOM_TOOL = \
diff --git a/libbcc.sha1.mk b/libbcc.sha1.mk
new file mode 100644
index 0000000..47a2be2
--- /dev/null
+++ b/libbcc.sha1.mk
@@ -0,0 +1,47 @@
+#=====================================================================
+# Calculate SHA1 checksum for libbcc.so, libRS.so and libclcore.bc
+#=====================================================================
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := libbcc.sha1
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := SHARED_LIBRARIES
+
+libbcc_SHA1_SRCS := \
+ $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/libbcc.so \
+ $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/libcompiler_rt.so \
+ $($(my_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/libRS.so \
+ $(call intermediates-dir-for,SHARED_LIBRARIES,libclcore.bc,,,$(my_2nd_arch_prefix))/libclcore.bc \
+ $(call intermediates-dir-for,SHARED_LIBRARIES,libclcore_debug.bc,,,$(my_2nd_arch_prefix))/libclcore_debug.bc
+
+ifeq ($(TARGET_$(my_2nd_arch_prefix)ARCH),arm)
+ifeq ($(ARCH_ARM_HAVE_NEON),true)
+ libbcc_SHA1_SRCS += \
+ $(call intermediates-dir-for,SHARED_LIBRARIES,libclcore_neon.bc,,,$(my_2nd_arch_prefix))/libclcore_neon.bc
+endif
+endif
+
+libbcc_GEN_SHA1_STAMP := $(LOCAL_PATH)/tools/build/gen-sha1-stamp.py
+intermediates := $(call local-intermediates-dir,,$(my_2nd_arch_prefix))
+
+libbcc_SHA1_ASM := $(intermediates)/libbcc.sha1.S
+LOCAL_GENERATED_SOURCES += $(libbcc_SHA1_ASM)
+$(libbcc_SHA1_ASM): PRIVATE_SHA1_SRCS := $(libbcc_SHA1_SRCS)
+$(libbcc_SHA1_ASM): $(libbcc_SHA1_SRCS) $(libbcc_GEN_SHA1_STAMP)
+ @echo libbcc.sha1: $@
+ $(hide) mkdir -p $(dir $@)
+ $(hide) $(libbcc_GEN_SHA1_STAMP) $(PRIVATE_SHA1_SRCS) > $@
+
+LOCAL_CFLAGS += -D_REENTRANT -DPIC -fPIC
+LOCAL_CFLAGS += -O3 -nodefaultlibs -nostdlib
+
+ifeq ($(my_2nd_arch_prefix),)
+LOCAL_NO_2ND_ARCH := true
+else
+LOCAL_32_BIT_ONLY := true
+endif
+
+LOCAL_MODULE_TARGET_ARCH := $(LLVM_SUPPORTED_ARCH)
+
+include $(BUILD_SHARED_LIBRARY)