numam-dpdk/mk/target/generic/rte.vars.mk
Bruce Richardson a5d4ea5943 build: support building ABI versioned files twice
Any file with ABI versioned functions needs different macros for shared and
static builds, so we need to accommodate that. Rather than building
everything twice, we just flag to the build system which libraries need
that handling, by setting use_function_versioning in the meson.build files.

To ensure we don't get silent errors at build time due to this meson flag
being missed, we add an explicit error to the function versioning header
file if a known C macro is not defined. Since "make" builds always only
build one of shared or static libraries, this define can be always set, and
so is added to the global CFLAGS. For meson, the build flag - and therefore
the C define - is set for the three libraries that need the function
versioning: "distributor", "lpm" and "timer".

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
Tested-by: Andrzej Ostruszka <amo@semihalf.com>
Reviewed-by: Andrzej Ostruszka <amo@semihalf.com>
2019-10-27 12:49:28 +01:00

131 lines
4.4 KiB
Makefile

# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2010-2014 Intel Corporation
#
# This .mk is the generic target rte.var.mk ; it includes .mk for
# the specified machine, architecture, toolchain (compiler) and
# executive environment.
#
#
# toolchain:
#
# - define CC, LD, AR, AS, ...
# - define TOOLCHAIN_CFLAGS variable (overridden by cmdline value)
# - define TOOLCHAIN_LDFLAGS variable (overridden by cmdline value)
# - define TOOLCHAIN_ASFLAGS variable (overridden by cmdline value)
# - may override any previously defined variable
#
include $(RTE_SDK)/mk/toolchain/$(RTE_TOOLCHAIN)/rte.vars.mk
#
# machine:
#
# - can define ARCH variable (overridden by cmdline value)
# - can define CROSS variable (overridden by cmdline value)
# - define MACHINE_CFLAGS variable (overridden by cmdline value)
# - define MACHINE_LDFLAGS variable (overridden by cmdline value)
# - define MACHINE_ASFLAGS variable (overridden by cmdline value)
# - can define CPU_CFLAGS variable (overridden by cmdline value) that
# overrides the one defined in arch.
# - can define CPU_LDFLAGS variable (overridden by cmdline value) that
# overrides the one defined in arch.
# - can define CPU_ASFLAGS variable (overridden by cmdline value) that
# overrides the one defined in arch.
#
ifneq ($(wildcard $(RTE_SDK)/mk/machine/$(RTE_MACHINE)/rte.vars.mk),)
include $(RTE_SDK)/mk/machine/$(RTE_MACHINE)/rte.vars.mk
else
MACHINE_CFLAGS := -march=$(RTE_MACHINE)
endif
#
# arch:
#
# - define ARCH variable (overridden by cmdline or by previous
# optional define in machine .mk)
# - define CROSS variable (overridden by cmdline or previous define
# in machine .mk)
# - define CPU_CFLAGS variable (overridden by cmdline or previous
# define in machine .mk)
# - define CPU_LDFLAGS variable (overridden by cmdline or previous
# define in machine .mk)
# - define CPU_ASFLAGS variable (overridden by cmdline or previous
# define in machine .mk)
# - may override any previously defined variable
#
include $(RTE_SDK)/mk/arch/$(RTE_ARCH)/rte.vars.mk
#
# exec-env:
#
# - define EXECENV_CFLAGS variable (overridden by cmdline)
# - define EXECENV_LDFLAGS variable (overridden by cmdline)
# - define EXECENV_ASFLAGS variable (overridden by cmdline)
# - may override any previously defined variable
#
include $(RTE_SDK)/mk/exec-env/$(RTE_EXEC_ENV)/rte.vars.mk
# Don't set CFLAGS/LDFLAGS flags for kernel module, all flags are
# provided by Kbuild framework.
ifeq ($(KERNELRELEASE),)
# now that the environment is mostly set up, including the machine type we will
# be passing to the compiler, set up the specific CPU flags based on that info.
include $(RTE_SDK)/mk/rte.cpuflags.mk
# merge all CFLAGS
CFLAGS := $(CPU_CFLAGS) $(EXECENV_CFLAGS) $(TOOLCHAIN_CFLAGS) $(MACHINE_CFLAGS)
CFLAGS += $(TARGET_CFLAGS)
# merge all LDFLAGS
LDFLAGS := $(CPU_LDFLAGS) $(EXECENV_LDFLAGS) $(TOOLCHAIN_LDFLAGS) $(MACHINE_LDFLAGS)
LDFLAGS += $(TARGET_LDFLAGS)
# merge all ASFLAGS
ASFLAGS := $(CPU_ASFLAGS) $(EXECENV_ASFLAGS) $(TOOLCHAIN_ASFLAGS) $(MACHINE_ASFLAGS)
ASFLAGS += $(TARGET_ASFLAGS)
# add default include and lib paths
CFLAGS += -I$(RTE_OUTPUT)/include
LDFLAGS += -L$(RTE_OUTPUT)/lib
# add in flag for supporting function versioning. The define is used in meson
# builds to ensure that the user has properly flagged the unit in question as
# using function versioning so it can be built twice - once for static lib and
# then a second time for the shared lib. Since make only builds one library
# type at a time, such precautions aren't necessary, so we can globally define
# the flag
CFLAGS += -DRTE_USE_FUNCTION_VERSIONING
# always include rte_config.h: the one in $(RTE_OUTPUT)/include is
# the configuration of SDK when $(BUILDING_RTE_SDK) is true, or the
# configuration of the application if $(BUILDING_RTE_SDK) is not
# defined.
ifeq ($(BUILDING_RTE_SDK),1)
# building sdk
CFLAGS += -include $(RTE_OUTPUT)/include/rte_config.h
else
# if we are building an external application, include SDK's lib and
# includes too
CFLAGS += -I$(RTE_SDK_BIN)/include
ifneq ($(wildcard $(RTE_OUTPUT)/include/rte_config.h),)
CFLAGS += -include $(RTE_OUTPUT)/include/rte_config.h
endif
CFLAGS += -include $(RTE_SDK_BIN)/include/rte_config.h
LDFLAGS += -L$(RTE_SDK_BIN)/lib
endif
# always define _GNU_SOURCE
CFLAGS += -D_GNU_SOURCE
# define __BSD_VISIBLE when building for FreeBSD
ifeq ($(CONFIG_RTE_EXEC_ENV_FREEBSD),y)
CFLAGS += -D__BSD_VISIBLE
endif
export CFLAGS
export LDFLAGS
endif