diff --git a/arch/Config.in b/arch/Config.in index fa8fe0f5ac..c60c42c1c5 100644 --- a/arch/Config.in +++ b/arch/Config.in @@ -353,6 +353,12 @@ config BR2_GCC_TARGET_FPU config BR2_GCC_TARGET_FLOAT_ABI string +# The value of this option will be passed as --with-simd= when +# building gcc (internal backend) or -simd= in the toolchain +# wrapper (external toolchain) +config BR2_GCC_TARGET_SIMD + string + # The value of this option will be passed as --with-mode= when # building gcc (internal backend) or -m in the toolchain # wrapper (external toolchain) diff --git a/arch/arch.mk b/arch/arch.mk index 4174d33df5..4a7851a9fd 100644 --- a/arch/arch.mk +++ b/arch/arch.mk @@ -16,6 +16,7 @@ GCC_TARGET_FP32_MODE := $(call qstrip,$(BR2_GCC_TARGET_FP32_MODE)) GCC_TARGET_CPU := $(call qstrip,$(BR2_GCC_TARGET_CPU)) GCC_TARGET_FPU := $(call qstrip,$(BR2_GCC_TARGET_FPU)) GCC_TARGET_FLOAT_ABI := $(call qstrip,$(BR2_GCC_TARGET_FLOAT_ABI)) +GCC_TARGET_SIMD := $(call qstrip,$(BR2_GCC_TARGET_SIMD)) GCC_TARGET_MODE := $(call qstrip,$(BR2_GCC_TARGET_MODE)) # Explicitly set LD's "max-page-size" instead of relying on some defaults diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk index 658f5a6b4f..ea96286c32 100644 --- a/package/gcc/gcc.mk +++ b/package/gcc/gcc.mk @@ -251,6 +251,10 @@ ifneq ($(GCC_TARGET_FLOAT_ABI),) HOST_GCC_COMMON_CONF_OPTS += --with-float=$(GCC_TARGET_FLOAT_ABI) endif +ifneq ($(GCC_TARGET_SIMD),) +HOST_GCC_COMMON_CONF_OPTS += --with-simd=$(GCC_TARGET_SIMD) +endif + ifneq ($(GCC_TARGET_MODE),) HOST_GCC_COMMON_CONF_OPTS += --with-mode=$(GCC_TARGET_MODE) endif diff --git a/toolchain/toolchain-external/pkg-toolchain-external.mk b/toolchain/toolchain-external/pkg-toolchain-external.mk index c08bf0a653..2c2afa76c0 100644 --- a/toolchain/toolchain-external/pkg-toolchain-external.mk +++ b/toolchain/toolchain-external/pkg-toolchain-external.mk @@ -217,6 +217,10 @@ ifneq ($(GCC_TARGET_FLOAT_ABI),) TOOLCHAIN_EXTERNAL_CFLAGS += -mfloat-abi=$(GCC_TARGET_FLOAT_ABI) TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += -DBR_FLOAT_ABI='"$(GCC_TARGET_FLOAT_ABI)"' endif +ifneq ($(GCC_TARGET_SIMD),) +TOOLCHAIN_EXTERNAL_CFLAGS += -msimd=$(GCC_TARGET_SIMD) +TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += -DBR_SIMD='"$(GCC_TARGET_SIMD)"' +endif ifneq ($(GCC_TARGET_MODE),) TOOLCHAIN_EXTERNAL_CFLAGS += -m$(GCC_TARGET_MODE) TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += -DBR_MODE='"$(GCC_TARGET_MODE)"' diff --git a/toolchain/toolchain-wrapper.c b/toolchain/toolchain-wrapper.c index 9970cad5e1..4dde0362b6 100644 --- a/toolchain/toolchain-wrapper.c +++ b/toolchain/toolchain-wrapper.c @@ -77,6 +77,9 @@ static char *predef_args[] = { #ifdef BR_SOFTFLOAT "-msoft-float", #endif /* BR_SOFTFLOAT */ +#ifdef BR_SIMD + "-msimd=" BR_SIMD, +#endif #ifdef BR_MODE "-m" BR_MODE, #endif