From 74f550427c7fffe637917e2caa79a6bb6c378db4 Mon Sep 17 00:00:00 2001 From: WuZhen Date: Wed, 24 Feb 2016 21:36:10 +0800 Subject: android: enable x86 asm and sse4 for x86 and x86_64 Support multilib compilation use runtime feature selection. NO_REF_TASK Tested: local run Change-Id: Iee7961effdecde09cfbdaf09455bfb0912699ae3 Signed-off-by: Chih-Wei Huang --- Android.common.mk | 21 ++++++++++++++++++--- Android.mk | 5 ----- src/mapi/Android.mk | 3 +++ src/mesa/Android.gen.mk | 25 ++++++++++++++++++------- src/mesa/Android.libmesa_dricore.mk | 20 +++++++++----------- src/mesa/Android.libmesa_sse41.mk | 5 ++++- src/mesa/Android.libmesa_st_mesa.mk | 18 ++++++++---------- src/mesa/Android.mesa_gen_matypes.mk | 7 +++++-- src/mesa/drivers/dri/i965/Android.mk | 5 ----- 9 files changed, 65 insertions(+), 44 deletions(-) diff --git a/Android.common.mk b/Android.common.mk index dd7272c..26d2482 100644 --- a/Android.common.mk +++ b/Android.common.mk @@ -68,13 +68,28 @@ LOCAL_CFLAGS += \ LOCAL_CONLYFLAGS += \ -std=c99 +x86_flags := \ + -DUSE_SSE41 \ + +x86_64_flags := \ + -DUSE_SSE41 \ + ifeq ($(strip $(MESA_ENABLE_ASM)),true) -ifeq ($(TARGET_ARCH),x86) -LOCAL_CFLAGS += \ +x86_flags += \ -DUSE_X86_ASM \ + -DUSE_MMX_ASM \ + -DUSE_3DNOW_ASM \ + -DUSE_SSE_ASM \ + +x86_64_flags += \ + -DUSE_X86_64_ASM \ endif -endif + +LOCAL_ASFLAGS_x86 += $(x86_flags) +LOCAL_ASFLAGS_x86_64 += $(x86_64_flags) +LOCAL_CFLAGS_x86 += $(x86_flags) +LOCAL_CFLAGS_x86_64 += $(x86_64_flags) ifeq ($(MESA_ENABLE_LLVM),true) LOCAL_CFLAGS += \ diff --git a/Android.mk b/Android.mk index fb29105..712d152 100644 --- a/Android.mk +++ b/Android.mk @@ -63,12 +63,7 @@ $(warning invalid GPU drivers: $(invalid_drivers)) MESA_GPU_DRIVERS := $(filter-out $(invalid_drivers), $(MESA_GPU_DRIVERS)) endif -# host and target must be the same arch to generate matypes.h -ifeq ($(TARGET_ARCH),$(HOST_ARCH)) MESA_ENABLE_ASM := true -else -MESA_ENABLE_ASM := false -endif ifneq ($(filter $(classic_drivers), $(MESA_GPU_DRIVERS)),) MESA_BUILD_CLASSIC := true diff --git a/src/mapi/Android.mk b/src/mapi/Android.mk index 4445218..b654c25 100644 --- a/src/mapi/Android.mk +++ b/src/mapi/Android.mk @@ -57,6 +57,9 @@ intermediates := $(call local-generated-sources-dir) abi_header := $(intermediates)/$(abi_header) LOCAL_GENERATED_SOURCES := $(abi_header) +# workaround build warning +LOCAL_LDFLAGS_x86 += -Wl,--no-warn-shared-textrel + $(abi_header): PRIVATE_PRINTER := shared-glapi mapi_abi_headers += $(abi_header) diff --git a/src/mesa/Android.gen.mk b/src/mesa/Android.gen.mk index e567102..e04482b 100644 --- a/src/mesa/Android.gen.mk +++ b/src/mesa/Android.gen.mk @@ -45,10 +45,11 @@ LOCAL_SRC_FILES := $(filter-out $(sources), $(LOCAL_SRC_FILES)) LOCAL_C_INCLUDES += $(intermediates)/main ifeq ($(strip $(MESA_ENABLE_ASM)),true) -ifeq ($(TARGET_ARCH),x86) -sources += x86/matypes.h -LOCAL_C_INCLUDES += $(intermediates)/x86 -endif +LOCAL_GENERATED_SOURCES_x86 += $(addprefix $(intermediates)/, x86/matypes.h) +LOCAL_GENERATED_SOURCES_x86_64 += $(addprefix $(intermediates)/, x86_64/matypes.h) + +LOCAL_C_INCLUDES_x86 += $(intermediates)/x86 +LOCAL_C_INCLUDES_x86_64 += $(intermediates)/x86_64 endif sources += main/git_sha1.h @@ -79,12 +80,22 @@ $(intermediates)/main/git_sha1.h: $(wildcard $(MESA_TOP)/.git/HEAD) > $@; \ fi -matypes_deps := \ - $(BUILD_OUT_EXECUTABLES)/mesa_gen_matypes$(BUILD_EXECUTABLE_SUFFIX) \ +matypes_deps32 := \ + $(BUILD_OUT_EXECUTABLES)/mesa_gen_matypes32$(BUILD_EXECUTABLE_SUFFIX) \ + $(LOCAL_PATH)/main/mtypes.h \ + $(LOCAL_PATH)/tnl/t_context.h + +matypes_deps64 := \ + $(BUILD_OUT_EXECUTABLES)/mesa_gen_matypes64$(BUILD_EXECUTABLE_SUFFIX) \ $(LOCAL_PATH)/main/mtypes.h \ $(LOCAL_PATH)/tnl/t_context.h -$(intermediates)/x86/matypes.h: $(matypes_deps) +$(intermediates)/x86/matypes.h: $(matypes_deps32) + @mkdir -p $(dir $@) + @echo "MATYPES: $(PRIVATE_MODULE) <= $(notdir $@)" + $(hide) $< > $@ + +$(intermediates)/x86_64/matypes.h: $(matypes_deps64) @mkdir -p $(dir $@) @echo "MATYPES: $(PRIVATE_MODULE) <= $(notdir $@)" $(hide) $< > $@ diff --git a/src/mesa/Android.libmesa_dricore.mk b/src/mesa/Android.libmesa_dricore.mk index 86196ce..8de90b8 100644 --- a/src/mesa/Android.libmesa_dricore.mk +++ b/src/mesa/Android.libmesa_dricore.mk @@ -31,6 +31,7 @@ LOCAL_PATH := $(call my-dir) # Import the following variables: # MESA_FILES # X86_FILES +# X86_64_FILES include $(LOCAL_PATH)/Makefile.sources include $(CLEAR_VARS) @@ -42,19 +43,10 @@ LOCAL_SRC_FILES := \ $(MESA_FILES) ifeq ($(strip $(MESA_ENABLE_ASM)),true) -ifeq ($(TARGET_ARCH),x86) - LOCAL_SRC_FILES += $(X86_FILES) -endif # x86 + LOCAL_SRC_FILES_x86 += $(X86_FILES) + LOCAL_SRC_FILES_x86_64 += $(X86_64_FILES) endif # MESA_ENABLE_ASM -ifeq ($(ARCH_X86_HAVE_SSE4_1),true) -LOCAL_WHOLE_STATIC_LIBRARIES := \ - libmesa_sse41 -LOCAL_CFLAGS := \ - -msse4.1 \ - -DUSE_SSE41 -endif - LOCAL_C_INCLUDES := \ $(MESA_TOP)/src/mapi \ $(MESA_TOP)/src/mesa/main \ @@ -69,6 +61,12 @@ LOCAL_GENERATED_SOURCES += \ LOCAL_WHOLE_STATIC_LIBRARIES += \ libmesa_program +LOCAL_WHOLE_STATIC_LIBRARIES_x86 += \ + libmesa_sse41 \ + +LOCAL_WHOLE_STATIC_LIBRARIES_x86_64 += \ + libmesa_sse41 \ + include $(LOCAL_PATH)/Android.gen.mk include $(MESA_COMMON_MK) include $(BUILD_STATIC_LIBRARY) diff --git a/src/mesa/Android.libmesa_sse41.mk b/src/mesa/Android.libmesa_sse41.mk index 8562da6..3668785 100644 --- a/src/mesa/Android.libmesa_sse41.mk +++ b/src/mesa/Android.libmesa_sse41.mk @@ -20,7 +20,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. -ifeq ($(ARCH_X86_HAVE_SSE4_1),true) +ifneq ($(filter x86 x86_64,$(TARGET_ARCH)),) LOCAL_PATH := $(call my-dir) @@ -33,6 +33,9 @@ LOCAL_MODULE := libmesa_sse41 LOCAL_SRC_FILES += \ $(X86_SSE41_FILES) +LOCAL_CFLAGS += \ + -msse4.1 \ + LOCAL_C_INCLUDES := \ $(MESA_TOP)/src/mapi \ $(MESA_TOP)/src/gallium/include \ diff --git a/src/mesa/Android.libmesa_st_mesa.mk b/src/mesa/Android.libmesa_st_mesa.mk index 3905ddc..b934dbb 100644 --- a/src/mesa/Android.libmesa_st_mesa.mk +++ b/src/mesa/Android.libmesa_st_mesa.mk @@ -43,18 +43,10 @@ LOCAL_SRC_FILES := \ LOCAL_GENERATED_SOURCES := $(MESA_GEN_GLSL_H) ifeq ($(strip $(MESA_ENABLE_ASM)),true) -ifeq ($(TARGET_ARCH),x86) - LOCAL_SRC_FILES += $(X86_FILES) -endif # x86 + LOCAL_SRC_FILES_x86 += $(X86_FILES) + LOCAL_SRC_FILES_x86_64 += $(X86_64_FILES) endif # MESA_ENABLE_ASM -ifeq ($(ARCH_X86_HAVE_SSE4_1),true) -LOCAL_WHOLE_STATIC_LIBRARIES := \ - libmesa_sse41 -LOCAL_CFLAGS := \ - -DUSE_SSE41 -endif - LOCAL_C_INCLUDES := \ $(MESA_TOP)/src/mapi \ $(MESA_TOP)/src/mesa/main \ @@ -65,6 +57,12 @@ LOCAL_C_INCLUDES := \ LOCAL_WHOLE_STATIC_LIBRARIES += \ libmesa_program +LOCAL_WHOLE_STATIC_LIBRARIES_x86 += \ + libmesa_sse41 \ + +LOCAL_WHOLE_STATIC_LIBRARIES_x86_64 += \ + libmesa_sse41 \ + LOCAL_STATIC_LIBRARIES += libmesa_nir libmesa_glsl include $(LOCAL_PATH)/Android.gen.mk diff --git a/src/mesa/Android.mesa_gen_matypes.mk b/src/mesa/Android.mesa_gen_matypes.mk index 4fcf73a..163f0e2 100644 --- a/src/mesa/Android.mesa_gen_matypes.mk +++ b/src/mesa/Android.mesa_gen_matypes.mk @@ -25,13 +25,16 @@ # --------------------------------------------------------------------- ifeq ($(strip $(MESA_ENABLE_ASM)),true) -ifeq ($(TARGET_ARCH),x86) +ifneq ($(filter x86 x86_64,$(TARGET_ARCH)),) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := mesa_gen_matypes +LOCAL_MULTILIB := both +LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32 +LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64 LOCAL_IS_HOST_MODULE := true LOCAL_C_INCLUDES := \ @@ -43,5 +46,5 @@ LOCAL_SRC_FILES := \ include $(MESA_COMMON_MK) include $(BUILD_HOST_EXECUTABLE) -endif # x86 +endif # x86 x86_64 endif # MESA_ENABLE_ASM diff --git a/src/mesa/drivers/dri/i965/Android.mk b/src/mesa/drivers/dri/i965/Android.mk index b4f1adf..cfaa3f8 100644 --- a/src/mesa/drivers/dri/i965/Android.mk +++ b/src/mesa/drivers/dri/i965/Android.mk @@ -168,11 +168,6 @@ endif LOCAL_CFLAGS := \ $(MESA_DRI_CFLAGS) -ifeq ($(ARCH_X86_HAVE_SSE4_1),true) -LOCAL_CFLAGS += \ - -DUSE_SSE41 -endif - LOCAL_C_INCLUDES := \ $(MESA_DRI_C_INCLUDES) -- cgit v1.1