diff options
Diffstat (limited to 'src/spdk/dpdk/mk/toolchain/gcc')
-rw-r--r-- | src/spdk/dpdk/mk/toolchain/gcc/rte.toolchain-compat.mk | 120 | ||||
-rw-r--r-- | src/spdk/dpdk/mk/toolchain/gcc/rte.vars.mk | 109 |
2 files changed, 229 insertions, 0 deletions
diff --git a/src/spdk/dpdk/mk/toolchain/gcc/rte.toolchain-compat.mk b/src/spdk/dpdk/mk/toolchain/gcc/rte.toolchain-compat.mk new file mode 100644 index 000000000..98dca3e78 --- /dev/null +++ b/src/spdk/dpdk/mk/toolchain/gcc/rte.toolchain-compat.mk @@ -0,0 +1,120 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2010-2014 Intel Corporation + +# +# CPUID-related options +# +# This was added to support compiler versions which might not support all the +# flags we need +# + +#find out GCC version + +GCC_MAJOR = $(shell echo __GNUC__ | $(CC) -E -x c - | tail -n 1) +GCC_MINOR = $(shell echo __GNUC_MINOR__ | $(CC) -E -x c - | tail -n 1) +GCC_PATCHLEVEL = $(shell echo __GNUC_PATCHLEVEL__ | $(CC) -E -x c - | tail -n 1) +GCC_VERSION = $(GCC_MAJOR)$(GCC_MINOR) + +HOST_GCC_MAJOR = $(shell echo __GNUC__ | $(HOSTCC) -E -x c - | tail -n 1) +HOST_GCC_MINOR = $(shell echo __GNUC_MINOR__ | $(HOSTCC) -E -x c - | tail -n 1) +HOST_GCC_PATCHLEVEL = $(shell echo __GNUC_PATCHLEVEL__ | $(HOSTCC) -E -x c - | tail -n 1) +HOST_GCC_VERSION = $(HOST_GCC_MAJOR)$(HOST_GCC_MINOR) + +LD_VERSION = $(shell $(LD) -v) +# disable AVX512F support for GCC & binutils 2.30 as a workaround for Bug 97 +ifeq ($(CONFIG_RTE_ARCH_X86), y) +ifneq ($(filter 2.30%,$(LD_VERSION)),) +FORCE_DISABLE_AVX512 := y +# print warning only once for librte_eal +ifneq ($(filter %librte_eal,$(CURDIR)),) +$(warning AVX512 support disabled because of binutils 2.30. See Bug 97) +endif +endif +ifneq ($(filter 2.31%,$(LD_VERSION)),) +FORCE_DISABLE_AVX512 := y +# print warning only once for librte_eal +ifneq ($(filter %librte_eal,$(CURDIR)),) +$(warning AVX512 support disabled because of binutils 2.31. See Bug 249) +endif +endif +endif + +# if GCC is older than 4.x +ifeq ($(shell test $(GCC_VERSION) -lt 40 && echo 1), 1) + MACHINE_CFLAGS = +$(warning You are using GCC < 4.x. This is neither supported, nor tested.) + + +else +# GCC graceful degradation +# GCC 4.2.x - added support for generic target +# GCC 4.3.x - added support for core2, ssse3, sse4.1, sse4.2 +# GCC 4.4.x - added support for avx, aes, pclmul +# GCC 4.5.x - added support for atom +# GCC 4.6.x - added support for corei7, corei7-avx +# GCC 4.7.x - added support for fsgsbase, rdrnd, f16c, core-avx-i, core-avx2 +# GCC 4.9.x - added support for armv8-a+crc +# + ifeq ($(shell test $(GCC_VERSION) -le 49 && echo 1), 1) + MACHINE_CFLAGS := $(patsubst -march=armv8-a+crc,-march=armv8-a+crc -D__ARM_FEATURE_CRC32=1,$(MACHINE_CFLAGS)) + MACHINE_CFLAGS := $(patsubst -march=armv8-a+crc+crypto,-march=armv8-a+crc+crypto -D__ARM_FEATURE_CRC32=1,$(MACHINE_CFLAGS)) + endif + ifeq ($(shell test $(GCC_VERSION) -le 47 && echo 1), 1) + MACHINE_CFLAGS := $(patsubst -march=core-avx-i,-march=corei7-avx,$(MACHINE_CFLAGS)) + MACHINE_CFLAGS := $(patsubst -march=core-avx2,-march=core-avx2,$(MACHINE_CFLAGS)) + endif + ifeq ($(shell test $(GCC_VERSION) -lt 46 && echo 1), 1) + MACHINE_CFLAGS := $(patsubst -march=corei7-avx,-march=core2 -maes -mpclmul -mavx,$(MACHINE_CFLAGS)) + MACHINE_CFLAGS := $(patsubst -march=corei7,-march=core2 -maes -mpclmul,$(MACHINE_CFLAGS)) + endif + ifeq ($(shell test $(GCC_VERSION) -lt 45 && echo 1), 1) + MACHINE_CFLAGS := $(patsubst -march=atom,-march=core2 -mssse3,$(MACHINE_CFLAGS)) + endif + ifeq ($(shell test $(GCC_VERSION) -lt 44 && echo 1), 1) + MACHINE_CFLAGS := $(filter-out -mavx -mpclmul -maes,$(MACHINE_CFLAGS)) + ifneq ($(findstring SSE4_2, $(CPUFLAGS)),) + MACHINE_CFLAGS += -msse4.2 + endif + ifneq ($(findstring SSE4_1, $(CPUFLAGS)),) + MACHINE_CFLAGS += -msse4.1 + endif + endif + ifeq ($(shell test $(GCC_VERSION) -lt 43 && echo 1), 1) + MACHINE_CFLAGS := $(filter-out -msse% -mssse%,$(MACHINE_CFLAGS)) + MACHINE_CFLAGS := $(patsubst -march=core2,-march=generic,$(MACHINE_CFLAGS)) + MACHINE_CFLAGS += -msse3 + endif + ifeq ($(shell test $(GCC_VERSION) -lt 42 && echo 1), 1) + MACHINE_CFLAGS := $(filter-out -march% -mtune% -msse%,$(MACHINE_CFLAGS)) + endif + + ifeq ($(shell test $(GCC_VERSION) -lt 74 && echo 1), 1) + CONFIG_RTE_ENABLE_LTO=n + endif + + # Disable thunderx PMD for gcc < 4.7 + ifeq ($(shell test $(GCC_VERSION) -lt 47 && echo 1), 1) + CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD=d + endif + + # Disable OPDL PMD for gcc < 4.7 + ifeq ($(shell test $(GCC_VERSION) -lt 47 && echo 1), 1) + CONFIG_RTE_LIBRTE_PMD_OPDL_EVENTDEV=d + endif + + # Disable OCTEON drivers and libs for arm64 gcc < 4.8.6 + ifeq ($(RTE_ARCH), arm64) + ifeq ($(shell test $(GCC_VERSION)$(GCC_PATCHLEVEL) -lt 486 && echo 1), 1) + CONFIG_RTE_LIBRTE_PMD_OCTEONTX_SSOVF=d + CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOOL=d + CONFIG_RTE_LIBRTE_OCTEONTX_PMD=d + CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_DMA_RAWDEV=d + CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_EP_RAWDEV=d + CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_EVENTDEV=d + CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_CRYPTO=d + CONFIG_RTE_LIBRTE_OCTEONTX2_MEMPOOL=d + CONFIG_RTE_LIBRTE_OCTEONTX2_PMD=d + endif + endif + +endif diff --git a/src/spdk/dpdk/mk/toolchain/gcc/rte.vars.mk b/src/spdk/dpdk/mk/toolchain/gcc/rte.vars.mk new file mode 100644 index 000000000..928f0e083 --- /dev/null +++ b/src/spdk/dpdk/mk/toolchain/gcc/rte.vars.mk @@ -0,0 +1,109 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2010-2014 Intel Corporation + +# +# toolchain: +# +# - define CC, LD, AR, AS, ... (overridden by cmdline value) +# - define TOOLCHAIN_CFLAGS variable (overridden by cmdline value) +# - define TOOLCHAIN_LDFLAGS variable (overridden by cmdline value) +# - define TOOLCHAIN_ASFLAGS variable (overridden by cmdline value) +# + +CC = $(CROSS)gcc +KERNELCC = $(CROSS)gcc +CPP = $(CROSS)cpp +# for now, we don't use as but nasm. +# AS = $(CROSS)as +AS = nasm +AR = $(CROSS)ar +LD = $(CROSS)ld +OBJCOPY = $(CROSS)objcopy +OBJDUMP = $(CROSS)objdump +STRIP = $(CROSS)strip +READELF = $(CROSS)readelf +GCOV = $(CROSS)gcov + +ifeq ("$(origin CC)", "command line") +HOSTCC = $(CC) +else +HOSTCC = gcc +endif +HOSTAS = as + +TOOLCHAIN_ASFLAGS = +TOOLCHAIN_CFLAGS = +TOOLCHAIN_LDFLAGS = + +ifeq ($(CONFIG_RTE_LIBRTE_GCOV),y) +TOOLCHAIN_CFLAGS += --coverage +TOOLCHAIN_LDFLAGS += --coverage +ifeq (,$(findstring -O0,$(EXTRA_CFLAGS))) + $(warning "EXTRA_CFLAGS doesn't contains -O0, coverage will be inaccurate with optimizations enabled") +endif +endif + +WERROR_FLAGS := -W -Wall -Wstrict-prototypes -Wmissing-prototypes +WERROR_FLAGS += -Wmissing-declarations -Wold-style-definition -Wpointer-arith +WERROR_FLAGS += -Wcast-align -Wnested-externs -Wcast-qual +WERROR_FLAGS += -Wformat-nonliteral -Wformat-security +WERROR_FLAGS += -Wundef -Wwrite-strings -Wdeprecated + +ifeq ($(RTE_DEVEL_BUILD),y) +WERROR_FLAGS += -Werror +endif + +# There are many issues reported for strict alignment architectures +# which are not necessarily fatal. Report as warnings. +ifeq ($(CONFIG_RTE_ARCH_STRICT_ALIGN),y) +WERROR_FLAGS += -Wno-error=cast-align +endif + +# process cpu flags +include $(RTE_SDK)/mk/toolchain/$(RTE_TOOLCHAIN)/rte.toolchain-compat.mk + +ifeq ($(CONFIG_RTE_ENABLE_LTO),y) +# 'fat-lto' is used since pmdinfogen needs to have 'this_pmd_nameX' +# exported in symbol table and without this option only internal +# representation is present. +TOOLCHAIN_CFLAGS += -flto -ffat-lto-objects +TOOLCHAIN_LDFLAGS += -flto +# workaround for GCC bug 81440 +ifeq ($(shell test $(GCC_VERSION) -lt 80 && echo 1), 1) +WERROR_FLAGS += -Wno-lto-type-mismatch +endif +endif + +# disable warning for non-initialised fields +WERROR_FLAGS += -Wno-missing-field-initializers +# workaround GCC bug with warning "may be used uninitialized" +ifeq ($(shell test $(GCC_VERSION) -lt 47 && echo 1), 1) +WERROR_FLAGS += -Wno-uninitialized +endif + +ifeq ($(shell test $(GCC_VERSION) -ge 100 && echo 1), 1) +# FIXME: Bugzilla 396 +WERROR_FLAGS += -Wno-zero-length-bounds +endif + +HOST_WERROR_FLAGS := $(WERROR_FLAGS) + +ifeq ($(shell test $(HOST_GCC_VERSION) -gt 70 && echo 1), 1) +# Tell GCC only to error for switch fallthroughs without a suitable comment +HOST_WERROR_FLAGS += -Wimplicit-fallthrough=2 +# Ignore errors for snprintf truncation +HOST_WERROR_FLAGS += -Wno-format-truncation +endif + +ifeq ($(shell test $(GCC_VERSION) -gt 70 && echo 1), 1) +# Tell GCC only to error for switch fallthroughs without a suitable comment +WERROR_FLAGS += -Wimplicit-fallthrough=2 +# Ignore errors for snprintf truncation +WERROR_FLAGS += -Wno-format-truncation +endif + +# disable packed member unalign warnings +WERROR_FLAGS += -Wno-address-of-packed-member + +export CC AS AR LD OBJCOPY OBJDUMP STRIP READELF +export TOOLCHAIN_CFLAGS TOOLCHAIN_LDFLAGS TOOLCHAIN_ASFLAGS |