tldk: swtich to use DPDK 20.11 LTS 87/33987/9
authorKonstantin Ananyev <[email protected]>
Thu, 30 Sep 2021 10:05:39 +0000 (10:05 +0000)
committerKonstantin Ananyev <[email protected]>
Wed, 10 Nov 2021 11:55:12 +0000 (11:55 +0000)
As in DPDK 20.11 'make' is not supported any more,
switch to use pkg-conf approach.
Note that RTE_SDK now should point to your DPDK package installation path.

Signed-off-by: Konstantin Ananyev <[email protected]>
Change-Id: I4a3c394758e183a3ddcdb45a0562a81583daaab6
Signed-off-by: Konstantin Ananyev <[email protected]>
30 files changed:
Makefile
dpdk/Makefile
examples/Makefile
examples/l4fwd/Makefile
examples/l4fwd/lcore.h
examples/l4fwd/main.c
lib/Makefile
lib/libtle_dring/Makefile
lib/libtle_l4p/Makefile
lib/libtle_l4p/ctx.c
lib/libtle_l4p/syncookie.h
lib/libtle_memtank/Makefile
lib/libtle_misc/Makefile
lib/libtle_misc/tle_dpdk_wrapper.h
lib/libtle_timer/Makefile
mk/tle.app.mk
mk/tle.cpp-obj.mk [deleted file]
mk/tle.cpp-pre.mk [deleted file]
mk/tle.cpp-vars.mk [deleted file]
mk/tle.lib.mk
mk/tle.subdir.mk
mk/tle.var.mk [new file with mode: 0644]
test/Makefile
test/dring/Makefile
test/dring/test_dring.c
test/gtest/Makefile
test/gtest/test_tle_dring.h
test/memtank/Makefile
test/memtank/test_memtank.c
test/timer/Makefile

index 474ada6..16b65e2 100644 (file)
--- a/Makefile
+++ b/Makefile
 TLDK_ROOT := $(CURDIR)
 export TLDK_ROOT
 
-LOCAL_RTE_SDK=$(TLDK_ROOT)/dpdk/_build/dpdk
+RTE_TARGET ?= x86_64-native-linuxapp-gcc
+
+LOCAL_RTE_SDK=$(TLDK_ROOT)/dpdk/$(RTE_TARGET)
 
 ifeq ($(RTE_SDK),)
        export RTE_SDK=$(LOCAL_RTE_SDK)
 endif
 
-RTE_TARGET ?= x86_64-native-linuxapp-gcc
+RTE_PKG_CONF=$(RTE_SDK)/lib/x86_64-linux-gnu/pkgconfig
 
 DIRS-y += lib
 DIRS-y += examples
@@ -33,24 +35,34 @@ O ?= $(TLDK_ROOT)/${RTE_TARGET}
 BASE_OUTPUT ?= $(abspath $(O))
 
 .PHONY: all
-all: $(DIRS-y)
+all: $(BASE_OUTPUT) $(DIRS-y)
 
 .PHONY: clean
-clean: $(DIRS-y)
+clean: $(DIRS-y) $(RTE_PKG_CONF)
+       $(Q)rm -rf $(BASE_OUTPUT)
+ifeq ($(RTE_SDK),$(LOCAL_RTE_SDK))
+       $(Q)make $(@) -C $(TLDK_ROOT)/dpdk O=$(RTE_SDK)
+endif
+
+examples test: lib
 
 .PHONY: $(DIRS-y)
-$(DIRS-y): $(RTE_SDK)/mk/rte.vars.mk
+$(DIRS-y): $(RTE_PKG_CONF)
        @echo "== $@"
        $(Q)$(MAKE) -C $(@) \
                M=$(CURDIR)/$(@)/Makefile \
                O=$(BASE_OUTPUT) \
-               BASE_OUTPUT=$(BASE_OUTPUT) \
-               CUR_SUBDIR=$(CUR_SUBDIR)/$(@) \
                S=$(CURDIR)/$(@) \
                RTE_TARGET=$(RTE_TARGET) \
                $(filter-out $(DIRS-y),$(MAKECMDGOALS))
 
-$(RTE_SDK)/mk/rte.vars.mk:
+$(BASE_OUTPUT):
+       $(Q)mkdir -p $(BASE_OUTPUT)/lib
+       $(Q)mkdir -p $(BASE_OUTPUT)/include
+       $(Q)mkdir -p $(BASE_OUTPUT)/app
+
+$(RTE_PKG_CONF):
 ifeq ($(RTE_SDK),$(LOCAL_RTE_SDK))
-       @make RTE_TARGET=$(RTE_TARGET) config all -C $(TLDK_ROOT)/dpdk/
+       @echo "== $@"
+       $(Q)make -C $(TLDK_ROOT)/dpdk O=$(RTE_SDK) 
 endif
index c474433..a4abac8 100644 (file)
 # Scripts require non-POSIX parts of bash
 SHELL := /bin/bash
 
-DPDK_VERSION          ?= v20.05
-DPDK_BUILD_DIR        ?= $(CURDIR)/_build
-DPDK_INSTALL_DIR      ?= $(DPDK_BUILD_DIR)/dpdk/$(RTE_TARGET)
-DPDK_PKTMBUF_HEADROOM ?= 128
+RTE_OUTPUT ?= $(O)
+
+DOWNLOAD_DIR := $(CURDIR)/downloads
+MESON_DIR := $(CURDIR)/meson
+
+DPDK_VERSION          ?= 20.11
+DPDK_SRC_DIR          ?= $(RTE_OUTPUT)-src
+DPDK_BUILD_DIR        ?= $(RTE_OUTPUT)-build
+DPDK_INSTALL_DIR      ?= $(RTE_OUTPUT)
 DPDK_MARCH            ?= native
-DPDK_TUNE             ?= generic
-DPDK_DEBUG            ?= n
+DPDK_BUILD            ?= release
 
+S := $(DPDK_SRC_DIR)
 B := $(DPDK_BUILD_DIR)
 I := $(DPDK_INSTALL_DIR)
-DPDK_GIT_REPO ?= http://dpdk.org/git/dpdk
-DPDK_SOURCE := $(B)/dpdk
 
-ifneq (,$(findstring clang,$(CC)))
-DPDK_CC=clang
-else
-DPDK_CC=gcc
-endif
-
-ifeq (,$(DPDK_TARGET))
-DPDK_TARGET := x86_64-native-linuxapp-$(DPDK_CC)
-endif
+DPDK_GIT_REPO ?= http://dpdk.org/git/dpdk-stable
 
 JOBS := $(shell grep processor /proc/cpuinfo | wc -l)
 
-# compiler/linker custom arguments
-DPDK_CPU_CFLAGS := -pie -fPIC
-DPDK_CPU_LDFLAGS :=
-DPDK_EXTRA_LDFLAGS := -g
-
-ifeq ($(DPDK_DEBUG),n)
-DPDK_EXTRA_CFLAGS := -g -mtune=$(DPDK_TUNE)
-else
-DPDK_EXTRA_CFLAGS := -g -O0
-endif
-
-# translate gcc march values to DPDK arch
-ifeq ($(DPDK_MARCH),native)
-DPDK_MACHINE:=native                     # autodetect host CPU
-else ifeq ($(DPDK_MARCH),corei7)
-DPDK_MACHINE:=nhm                        # Nehalem / Westmere
-else ifeq ($(DPDK_MARCH),corei7-avx)
-DPDK_MACHINE:=snb                        # Sandy Bridge
-else ifeq ($(DPDK_MARCH),core-avx-i)
-DPDK_MACHINE:=ivb                        # Ivy Bridge
-else ifeq ($(DPDK_MARCH),core-avx2)
-DPDK_MACHINE:=hsw                        # Haswell
-else ifeq ($(DPDK_MARCH),armv7a)
-DPDK_MACHINE:=armv7a                     # ARMv7
-else ifeq ($(DPDK_MARCH),armv8a)
-DPDK_MACHINE:=armv8a                     # ARMv8
-else
-$(error Unknown DPDK_MARCH)
-endif
-
-# assemble DPDK make arguments
-DPDK_MAKE_ARGS := -C $(DPDK_SOURCE) -j $(JOBS) \
-       T=$(DPDK_TARGET) \
-       RTE_CONFIG_TEMPLATE=../custom-config \
-       RTE_OUTPUT=$(I) \
-       EXTRA_CFLAGS="$(DPDK_EXTRA_CFLAGS)" \
-       EXTRA_LDFLAGS="$(DPDK_EXTRA_LDFLAGS)" \
-       CPU_CFLAGS="$(DPDK_CPU_CFLAGS)" \
-       CPU_LDFLAGS="$(DPDK_CPU_LDFLAGS)" \
-        $(DPDK_MAKE_EXTRA_ARGS)
-
-DPDK_SOURCE_FILES := $(shell  [ -e $(DPDK_SOURCE) ] && \
-                                               find $(DPDK_SOURCE) -name "*.[chS]")
-
-define set
-@if grep -q CONFIG_$1 $@ ; \
-       then sed -i -e 's/.*\(CONFIG_$1=\).*/\1$2/' $@ ; \
-       else echo CONFIG_$1=$2 >> $@ ; \
-fi
-endef
-
 all: build
 
-$(B)/custom-config: $(B)/.patch.ok Makefile
-       @echo --- generating custom config from \
-               $(DPDK_SOURCE)/config/defconfig_$(DPDK_TARGET) --- $@
-       @cpp -undef -ffreestanding -x assembler-with-cpp \
-               $(DPDK_SOURCE)/config/defconfig_$(DPDK_TARGET) $@
-       $(call set,RTE_MACHINE,$(DPDK_MACHINE))
-       @# modify options
-       $(call set,RTE_MAX_LCORE,256)
-       $(call set,RTE_PKTMBUF_HEADROOM,$(DPDK_PKTMBUF_HEADROOM))
-       $(call set,RTE_LIBEAL_USE_HPET,y)
-       $(call set,RTE_BUILD_COMBINE_LIBS,y)
-       $(call set,RTE_LIBRTE_I40E_16BYTE_RX_DESC,y)
-       $(call set,RTE_LIBRTE_I40E_ITR_INTERVAL,16)
-       $(call set,RTE_LIBRTE_PMD_PCAP,y)
-       @# enable debug init for device drivers
-       $(call set,RTE_LIBRTE_I40E_DEBUG_INIT,$(DPDK_DEBUG))
-       $(call set,RTE_LIBRTE_IXGBE_DEBUG_INIT,$(DPDK_DEBUG))
-       $(call set,RTE_LIBRTE_E1000_DEBUG_INIT,$(DPDK_DEBUG))
-       $(call set,RTE_LIBRTE_VIRTIO_DEBUG_INIT,$(DPDK_DEBUG))
-       $(call set,RTE_LIBRTE_VMXNET3_DEBUG_INIT,$(DPDK_DEBUG))
-       $(call set,RTE_LIBRTE_PMD_BOND,y)
-       $(call set,RTE_LIBRTE_IP_FRAG,y)
-       @# not needed
-       $(call set,RTE_LIBRTE_CFGFILE,n)
-       $(call set,RTE_LIBRTE_POWER,n)
-       $(call set,RTE_LIBRTE_DISTRIBUTOR,n)
-       $(call set,RTE_LIBRTE_REORDER,n)
-       $(call set,RTE_LIBRTE_FLOW_CLASSIFY,n)
-       $(call set,RTE_LIBRTE_PMD_CRYPTO_SCHEDULER,n)
-       $(call set,RTE_KNI_KMOD,n)
-       @rm -f .config.ok
-
-$(B)/.download.ok:
-       @mkdir -p $(B)
-       @if [ -e $(DPDK_SOURCE) ] ; \
-               then rm -rf $(DPDK_SOURCE) ; \
+$(S)/.download.ok:
+       @if [ -e $(S) ] ; \
+               then rm -rf $(S) ; \
        fi
-       @git clone $(DPDK_GIT_REPO) --branch $(DPDK_VERSION) $(DPDK_SOURCE)
+       $(Q)git clone $(DPDK_GIT_REPO) --branch $(DPDK_VERSION) $(S)
        @touch $@
 
 .PHONY: download
-download: $(B)/.download.ok
+download: $(S)/.download.ok
 
-$(B)/.patch.ok: $(B)/.download.ok
+$(S)/.patch.ok: $(S)/.download.ok
 ifneq ($(wildcard $(CURDIR)/dpdk-$(DPDK_VERSION)_patches/*.patch),)
        @echo --- patching ---
        for f in $(CURDIR)/dpdk-$(DPDK_VERSION)_patches/*.patch ; do \
                echo Applying patch: $$(basename $$f) ; \
-               patch -p1 -d $(DPDK_SOURCE) < $$f ; \
+               patch -p1 -d $(S) < $$f ; \
        done
 endif
        @touch $@
 
 .PHONY: patch
-patch: $(B)/.patch.ok
-
-$(B)/.config.ok: $(B)/.patch.ok $(B)/custom-config
-       @make $(DPDK_MAKE_ARGS) config
+patch: $(S)/.patch.ok
+
+$(MESON_DIR)/meson.ok:
+       $(Q)mkdir -p $(DOWNLOAD_DIR)
+       $(Q)mkdir -p $(MESON_DIR)
+       $(Q)python3 --version
+       $(Q)python3 -m venv $(MESON_DIR)
+       $(Q)source $(MESON_DIR)/bin/activate && \
+       $(Q)pip3 download -d $(DOWNLOAD_DIR) \
+               meson==0.55 setuptools wheel pyelftools && \
+       deactivate
+       $(Q)source $(MESON_DIR)/bin/activate && \
+       pip3 install --no-index \
+               --find-links=$(DOWNLOAD_DIR) --target=$(MESON_DIR) wheel && \
+       deactivate
+       $(Q)source $(MESON_DIR)/bin/activate && \
+       pip3 install --no-index \
+               --find-links=$(DOWNLOAD_DIR) --target=$(MESON_DIR) \
+               meson==0.55 pyelftools && \
+       deactivate
        @touch $@
 
 .PHONY: config
-config: $(B)/.config.ok
-
-$(B)/.build.ok: $(DPDK_SOURCE_FILES) $(B)/.config.ok
-       @make $(DPDK_MAKE_ARGS) install
-       @cp $(I)/.config $(B)/.config
-       @touch $@
+config: patch $(MESON_DIR)/meson.ok
+       $(Q)source $(MESON_DIR)/bin/activate && \
+       meson --prefix=$(I) --werror -Dtests=false \
+               -Dbuildtype=$(DPDK_BUILD) -Dmachine=$(DPDK_MARCH) $(B) $(S) && \
+       deactivate
 
 .PHONY: build
-build: $(B)/.build.ok
+build: config $(B)/build.ninja
+       $(Q)source $(MESON_DIR)/bin/activate && \
+       meson install -C $(B) && \
+       deactivate
 
 .PHONY: clean
 clean:
-       @rm -rf $(B) $(I)
+       $(Q)rm -rf $(B) $(I) $(S)
index cf13574..60d1d11 100644 (file)
@@ -19,8 +19,6 @@ ifeq ($(TLDK_ROOT),)
 $(error "Please define TLDK_SDK environment variable")
 endif
 
-include $(RTE_SDK)/mk/rte.vars.mk
-
 DIRS-y += l4fwd
 
 include $(TLDK_ROOT)/mk/tle.subdir.mk
index a6e0de3..be85eac 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-ifeq ($(RTE_SDK),)
-$(error "Please define RTE_SDK environment variable")
-endif
-
-ifeq ($(RTE_TARGET),)
-$(error "Please define RTE_TARGET environment variable")
-endif
-
-ifeq ($(TLDK_ROOT),)
-$(error "Please define TLDK_ROOT environment variable")
-endif
-
-include $(RTE_SDK)/mk/rte.vars.mk
-
 # binary name
-APP = l4fwd
+APP_NAME = l4fwd
+
+include $(TLDK_ROOT)/mk/tle.var.mk
 
 # all source are stored in SRCS-y
 SRCS-y += parse.c
 SRCS-y += pkt.c
 SRCS-y += main.c
 
-CFLAGS += $(WERROR_FLAGS)
-CFLAGS += -I$(RTE_OUTPUT)/include
-
-LDLIBS += -L$(RTE_OUTPUT)/lib
-LDLIBS += -ltle_l4p
-LDLIBS += -ltle_memtank
-LDLIBS += -ltle_timer
+LIB_DEPS += tle_l4p
+LIB_DEPS += tle_memtank
+LIB_DEPS += tle_timer
 
-EXTRA_CFLAGS += -O3
-CFLAGS_parse.o += -D_GNU_SOURCE
-CFLAGS_main.o += -D_GNU_SOURCE
+CFLAGS_parse.c += -D_GNU_SOURCE
+CFLAGS_main.c += -D_GNU_SOURCE
 
 include $(TLDK_ROOT)/mk/tle.app.mk
index 8d69c4f..7ae1943 100644 (file)
@@ -478,7 +478,7 @@ netfe_lcore_fill(struct lcore_prm prm[RTE_MAX_LCORE],
                        return -EINVAL;
                }
 
-               if (rte_get_master_lcore() != lc &&
+               if (rte_get_main_lcore() != lc &&
                                rte_eal_get_lcore_state(lc) == RUNNING) {
                        RTE_LOG(ERR, USER1,
                                "%s(line=%u): lcore %u already in use\n",
index 57e9cfd..266228d 100644 (file)
@@ -271,13 +271,13 @@ main(int argc, char *argv[])
                sig_handle(SIGQUIT);
 
        /* launch all slave lcores. */
-       RTE_LCORE_FOREACH_SLAVE(i) {
+       RTE_LCORE_FOREACH_WORKER(i) {
                if (prm[i].be.lc != NULL || prm[i].fe.max_streams != 0)
                        rte_eal_remote_launch(lcore_main, prm + i, i);
        }
 
        /* launch master lcore. */
-       i = rte_get_master_lcore();
+       i = rte_get_main_lcore();
        if (prm[i].be.lc != NULL || prm[i].fe.max_streams != 0)
                lcore_main(prm + i);
 
index 8d61a08..9c1ca95 100644 (file)
@@ -19,12 +19,17 @@ ifeq ($(TLDK_ROOT),)
 $(error "Please define TLDK_SDK environment variable")
 endif
 
-include $(RTE_SDK)/mk/rte.vars.mk
-
 DIRS-y += libtle_misc
 DIRS-y += libtle_dring
 DIRS-y += libtle_timer
 DIRS-y += libtle_memtank
 DIRS-y += libtle_l4p
 
+DEPDIR-libtle_l4p += libtle_misc
+DEPDIR-libtle_l4p += libtle_dring
+DEPDIR-libtle_l4p += libtle_timer
+DEPDIR-libtle_l4p += libtle_memtank
+
+libtle_l4p: $(DEPDIR-libtle_l4p)
+
 include $(TLDK_ROOT)/mk/tle.subdir.mk
index fa03e90..f91e178 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-ifeq ($(RTE_SDK),)
-$(error "Please define RTE_SDK environment variable")
-endif
-
-# Default target, can be overwritten by command line or environment
-RTE_TARGET ?= x86_64-native-linuxapp-gcc
-
-include $(RTE_SDK)/mk/rte.vars.mk
-
 # library name
-LIB = libtle_dring.a
-
-CFLAGS += -O3
-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
-
-EXPORT_MAP := tle_dring_version.map
+LIB_NAME = libtle_dring
 
-LIBABIVER := 1
+include $(TLDK_ROOT)/mk/tle.var.mk
 
 #source files
 SRCS-y += dring.c
index 5c8407e..04c53ba 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-ifeq ($(RTE_SDK),)
-$(error "Please define RTE_SDK environment variable")
-endif
-
-# Default target, can be overwritten by command line or environment
-RTE_TARGET ?= x86_64-native-linuxapp-gcc
-
-include $(RTE_SDK)/mk/rte.vars.mk
-
 # library name
-LIB = libtle_l4p.a
+LIB_NAME = libtle_l4p
 
-CFLAGS += -O3
-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
-
-EXPORT_MAP := tle_l4p_version.map
-
-LIBABIVER := 1
+include $(TLDK_ROOT)/mk/tle.var.mk
 
 #source files
 SRCS-y += ctx.c
@@ -52,4 +38,8 @@ DEPDIRS-y += lib/libtle_memtank
 DEPDIRS-y += lib/libtle_dring
 DEPDIRS-y += lib/libtle_timer
 
+LIB_DEPS += tle_memtank
+LIB_DEPS += tle_dring
+LIB_DEPS += tle_timer
+
 include $(TLDK_ROOT)/mk/tle.lib.mk
index b810983..90dcfb5 100644 (file)
@@ -22,7 +22,7 @@
 
 #include "stream.h"
 #include "misc.h"
-#include <halfsiphash.h>
+#include "halfsiphash.h"
 
 #define        LPORT_START     0x8000
 #define        LPORT_END       MAX_PORT_NUM
index 6d4372d..d0434e9 100644 (file)
@@ -20,7 +20,7 @@
 
 #include "tcp_misc.h"
 #include <tle_ctx.h>
-#include <halfsiphash.h>
+#include "halfsiphash.h"
 
 #ifdef __cplusplus
 extern "C" {
index d87e320..6efa46e 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-ifeq ($(RTE_SDK),)
-$(error "Please define RTE_SDK environment variable")
-endif
-
-# Default target, can be overwritten by command line or environment
-RTE_TARGET ?= x86_64-native-linuxapp-gcc
-
-include $(RTE_SDK)/mk/rte.vars.mk
-
 # library name
-LIB = libtle_memtank.a
-
-CFLAGS += -O3
-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
-
-EXPORT_MAP := tle_memtank_version.map
+LIB_NAME = libtle_memtank
 
-LIBABIVER := 1
+include $(TLDK_ROOT)/mk/tle.var.mk
 
 #source files
 SRCS-y += memtank.c
index 9fc26f9..29b6e9c 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-ifeq ($(RTE_SDK),)
-$(error "Please define RTE_SDK environment variable")
-endif
-
-# Default target, can be overwritten by command line or environment
-RTE_TARGET ?= x86_64-native-linuxapp-gcc
-
-include $(RTE_SDK)/mk/rte.vars.mk
-
 # library name
-LIB = libtle_misc.a
-
-CFLAGS += -O3
-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
-
-EXPORT_MAP := tle_misc_version.map
+LIB_NAME = libtle_misc
 
-LIBABIVER := 1
+include $(TLDK_ROOT)/mk/tle.var.mk
 
 SYMLINK-y-include += tle_dpdk_wrapper.h
 SYMLINK-y-include += tle_version.h
index 3736964..409678d 100644 (file)
@@ -96,11 +96,14 @@ static inline void
 _rte_ring_dequeue_ptrs(struct rte_ring *r, void **obj_table, uint32_t num)
 {
        uint32_t tail;
-       void **data;
 
        tail = r->cons.tail;
-       data = _rte_ring_get_data(r);
+#if RTE_VERSION >= RTE_VERSION_NUM(20, 8, 0, 0)
+       __rte_ring_dequeue_elems(r, tail, obj_table, sizeof(obj_table[0]), num);
+#else
+       void **data = _rte_ring_get_data(r);
        DEQUEUE_PTRS(r, data, tail, obj_table, num, void *);
+#endif
 }
 
 #else
index c17d219..f0867b2 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-ifeq ($(RTE_SDK),)
-$(error "Please define RTE_SDK environment variable")
-endif
-
-# Default target, can be overwritten by command line or environment
-RTE_TARGET ?= x86_64-native-linuxapp-gcc
-
-include $(RTE_SDK)/mk/rte.vars.mk
-
 # library name
-LIB = libtle_timer.a
-
-CFLAGS += -O3
-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
-
-EXPORT_MAP := tle_timer_version.map
+LIB_NAME = libtle_timer
 
-LIBABIVER := 1
+include $(TLDK_ROOT)/mk/tle.var.mk
 
 #source files
 SRCS-y += timer.c
index 602b870..60031da 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-EXTLIB_BUILD := y
+APP_SHARED = $(APP_NAME)-shared
+APP_STATIC = $(APP_NAME)-static
 
-# we must create the output dir first and recall the same Makefile
-# from this directory
-ifeq ($(NOT_FIRST_CALL),)
+ifneq ($(LIB_DEPS),)
+       LDLIBS += -L$(RTE_OUTPUT)/lib
+       LDLIBS_SHARED += $(patsubst %,-l%,$(LIB_DEPS))
+       LDLIBS_STATIC += $(patsubst %,-l:lib%.a,$(LIB_DEPS))
+       LDFLAGS_SHARED += $(LDLIBS) $(LDLIBS_SHARED)
+       LDFLAGS_STATIC += $(LDLIBS) $(LDLIBS_STATIC)
+endif
+
+.PHONY: all clean static shared
+all: shared static
+shared: $(RTE_OUTPUT)/app/$(APP_SHARED)
+static: $(RTE_OUTPUT)/app/$(APP_STATIC)
+
+OBJS += $(patsubst %.c,$(BDIR)/%.o,$(SRCS-y))
 
-NOT_FIRST_CALL = 1
-export NOT_FIRST_CALL
+$(BDIR)/%.o: %.c Makefile $(PC_FILE)
+       @mkdir -p $(BDIR)
+       $(Q)$(CC) $(CFLAGS) $(CFLAGS_$(<)) -c $< -o $@
 
-BDIR := $(RTE_OUTPUT)/build/$(CUR_SUBDIR)
+SCRIPTS := $(patsubst %,$(RTE_OUTPUT)/app/%,$(SYMLINK-y-app))
 
-all:
-       $(Q)mkdir -p $(BDIR)
-       $(Q)$(MAKE) -C $(BDIR) -f $(RTE_EXTMK) \
-               S=$(RTE_SRCDIR) O=$(RTE_OUTPUT) SRCDIR=$(RTE_SRCDIR)
+$(RTE_OUTPUT)/app/%.py: %.py Makefile
+       $(Q)ln -s -f $(RTE_SRCDIR)/$< $@
+
+clean:
+       $(Q)rm -f $(RTE_OUTPUT)/app/$(APP_SHARED)
+       $(Q)rm -f $(RTE_OUTPUT)/app/$(APP_STATIC)
+       $(Q)rm -f $(RTE_OUTPUT)/app/$(APP_NAME)
+       $(Q)rm -f $(SCRIPTS)
+       $(Q)rm -rf $(BDIR)
+
+$(RTE_OUTPUT)/app/$(APP_SHARED): $(SCRIPTS) $(OBJS) Makefile $(PC_FILE)
+ifneq ($(OBJS),)
+       $(Q)$(CC) $(OBJS) -o $@ $(LDFLAGS) $(LDFLAGS_SHARED)
+endif
 
-%::
-       $(Q)mkdir -p $(BDIR)
-       $(Q)$(MAKE) -C $(BDIR) -f $(RTE_EXTMK) $@ \
-               S=$(RTE_SRCDIR) O=$(RTE_OUTPUT) SRCDIR=$(RTE_SRCDIR)
-else
-include $(RTE_SDK)/mk/rte.app.mk
+$(RTE_OUTPUT)/app/$(APP_STATIC): $(SCRIPTS) $(OBJS) Makefile $(PC_FILE)
+ifneq ($(OBJS),)
+       $(Q)$(CC) $(OBJS) -o $@ $(LDFLAGS) $(LDFLAGS_STATIC)
+       $(Q)ln -s -f $@ $(RTE_OUTPUT)/app/$(APP_NAME)
 endif
diff --git a/mk/tle.cpp-obj.mk b/mk/tle.cpp-obj.mk
deleted file mode 100644 (file)
index 4d8a484..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-# Copyright (c) 2016 Intel Corporation.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-include $(RTE_SDK)/mk/internal/rte.compile-pre.mk
-include $(RTE_SDK)/mk/internal/rte.install-pre.mk
-include $(RTE_SDK)/mk/internal/rte.clean-pre.mk
-include $(RTE_SDK)/mk/internal/rte.build-pre.mk
-include $(TLDK_ROOT)/mk/tle.cpp-pre.mk
-
-#
-# copy of rte.obj.mk starts here
-#
-
-# VPATH contains at least SRCDIR
-VPATH += $(SRCDIR)
-
-ifneq ($(OBJ),)
-_BUILD = $(OBJ)
-else
-_BUILD = $(OBJS-y)
-endif
-_INSTALL = $(INSTALL-FILES-y) $(SYMLINK-FILES-y)
-_CLEAN = doclean
-
-.PHONY: all
-all: install
-
-.PHONY: install
-install: build _postinstall
-
-_postinstall: build
-
-.PHONY: build
-build: _postbuild
-
-ifneq ($(OBJ),)
-exe2cmd = $(strip $(call dotfile,$(patsubst %,%.cmd,$(1))))
-
-O_TO_O = $(LD) $(CPU_LDFLAGS) -r -o $(OBJ) $(OBJS-y)
-O_TO_O_STR = $(subst ','\'',$(O_TO_O)) #'# fix syntax highlight
-O_TO_O_DISP =  $(if $(V),"$(O_TO_O_STR)","  LD $(@)")
-O_TO_O_CMD = "cmd_$@ = $(O_TO_O_STR)"
-O_TO_O_DO = @set -e; \
-       echo $(O_TO_O_DISP); \
-       $(O_TO_O) && \
-       echo $(O_TO_O_CMD) > $(call exe2cmd,$(@))
-
--include .$(OBJ).cmd
-
-#
-# Archive objects in .a file if needed
-#
-$(OBJ): $(OBJS-y) FORCE
-       @[ -d $(dir $@) ] || mkdir -p $(dir $@)
-       $(if $(D),\
-               @echo -n "$< -> $@ " ; \
-               echo -n "file_missing=$(call boolean,$(file_missing)) " ; \
-               echo -n "cmdline_changed=$(call boolean,$(call cmdline_changed,$(O_TO_O_STR))) " ; \
-               echo -n "depfile_missing=$(call boolean,$(depfile_missing)) " ; \
-               echo "depfile_newer=$(call boolean,$(depfile_newer)) ")
-       $(if $(or \
-               $(file_missing),\
-               $(call cmdline_changed,$(O_TO_O_STR)),\
-               $(depfile_missing),\
-               $(depfile_newer)),\
-               $(O_TO_O_DO))
-endif
-
-#
-# Clean all generated files
-#
-.PHONY: clean
-clean: _postclean
-
-.PHONY: doclean
-doclean:
-       @rm -rf $(OBJ) $(OBJS-all) $(DEPS-all) $(DEPSTMP-all) \
-         $(CMDS-all) $(INSTALL-FILES-all)
-       @rm -f $(_BUILD_TARGETS) $(_INSTALL_TARGETS) $(_CLEAN_TARGETS)
-
-include $(RTE_SDK)/mk/internal/rte.compile-post.mk
-include $(RTE_SDK)/mk/internal/rte.install-post.mk
-include $(RTE_SDK)/mk/internal/rte.clean-post.mk
-include $(RTE_SDK)/mk/internal/rte.build-post.mk
-
-.PHONY: FORCE
-FORCE:
diff --git a/mk/tle.cpp-pre.mk b/mk/tle.cpp-pre.mk
deleted file mode 100644 (file)
index ae7748b..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-# Copyright (c) 2016 Intel Corporation.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# convert source to obj file
-src2obj = $(strip $(patsubst %.cpp,%.o,\
-        $(patsubst %.S,%_s.o,$(1))))
-
-# add a dot in front of the file name
-dotfile = $(strip $(foreach f,$(1),\
-        $(join $(dir $f),.$(notdir $f))))
-
-# convert source/obj files into dot-dep filename (does not
-# include .S files)
-src2dep = $(strip $(call dotfile,$(patsubst %.cpp,%.o.d, \
-                $(patsubst %.S,,$(1)))))
-obj2dep = $(strip $(call dotfile,$(patsubst %.o,%.o.d,$(1))))
-
-# convert source/obj files into dot-cmd filename
-src2cmd = $(strip $(call dotfile,$(patsubst %.cpp,%.o.cmd, \
-                $(patsubst %.S,%_s.o.cmd,$(1)))))
-obj2cmd = $(strip $(call dotfile,$(patsubst %.o,%.o.cmd,$(1))))
-
-OBJS-y := $(call src2obj,$(SRCS-y))
-OBJS-n := $(call src2obj,$(SRCS-n))
-OBJS-  := $(call src2obj,$(SRCS-))
-OBJS-all := $(filter-out $(SRCS-all),$(OBJS-y) $(OBJS-n) $(OBJS-))
-
-DEPS-y := $(call src2dep,$(SRCS-y))
-DEPS-n := $(call src2dep,$(SRCS-n))
-DEPS-  := $(call src2dep,$(SRCS-))
-DEPS-all := $(DEPS-y) $(DEPS-n) $(DEPS-)
-DEPSTMP-all := $(DEPS-all:%.d=%.d.tmp)
-
-CMDS-y := $(call src2cmd,$(SRCS-y))
-CMDS-n := $(call src2cmd,$(SRCS-n))
-CMDS-  := $(call src2cmd,$(SRCS-))
-CMDS-all := $(CMDS-y) $(CMDS-n) $(CMDS-)
-
--include $(DEPS-y) $(CMDS-y)
-
-# command to compile a .cpp file to generate an object
-ifeq ($(USE_HOST),1)
-CXX_TO_O = $(HOSTCXX) -Wp,-MD,$(call obj2dep,$(@)).tmp $(HOST_CXXFLAGS) \
-       $(CXXFLAGS_$(@)) $(HOST_EXTRA_CXXFLAGS) -o $@ -c $<
-CXX_TO_O_STR = $(subst ','\'',$(CXX_TO_O)) #'# fix syntax highlight
-CXX_TO_O_DISP = $(if $(V),"$(CXX_TO_O_STR)","  HOSTCXX $(@)")
-else
-CXX_TO_O = $(CXX) -Wp,-MD,$(call obj2dep,$(@)).tmp $(CXXFLAGS) \
-       $(CXXFLAGS_$(@)) $(EXTRA_CXXFLAGS) -o $@ -c $<
-CXX_TO_O_STR = $(subst ','\'',$(CXX_TO_O)) #'# fix syntax highlight
-CXX_TO_O_DISP = $(if $(V),"$(CXX_TO_O_STR)","  CXX $(@)")
-endif
-CXX_TO_O_CMD = 'cmd_$@ = $(CXX_TO_O_STR)'
-CXX_TO_O_DO = @set -e; \
-       echo $(CXX_TO_O_DISP); \
-       $(CXX_TO_O) && \
-       echo $(CXX_TO_O_CMD) > $(call obj2cmd,$(@)) && \
-       sed 's,'$@':,dep_'$@' =,' $(call obj2dep,$(@)).tmp > $(call obj2dep,$(@)) && \
-       rm -f $(call obj2dep,$(@)).tmp
-
-#
-# Compile .cpp file if needed
-# Note: dep_$$@ is from the .d file and DEP_$$@ can be specified by
-# user (by default it is empty)
-#
-#.SECONDEXPANSION:
-%_cpp.o: %.cpp $$(wildcard $$(dep_$$@)) $$(DEP_$$(@)) FORCE
-       @[ -d $(dir $@) ] || mkdir -p $(dir $@)
-       $(if $(D),\
-               @echo -n "$< -> $@ " ; \
-               echo -n "file_missing=$(call boolean,$(file_missing)) " ; \
-               echo -n "cmdline_changed=$(call boolean,$(call cmdline_changed,$(CXX_TO_O))) " ; \
-               echo -n "depfile_missing=$(call boolean,$(depfile_missing)) " ; \
-               echo "depfile_newer=$(call boolean,$(depfile_newer))")
-       $(if $(or \
-               $(file_missing),\
-               $(call cmdline_changed,$(CXX_TO_O)),\
-               $(depfile_missing),\
-               $(depfile_newer)),\
-               $(CXX_TO_O_DO))
-
diff --git a/mk/tle.cpp-vars.mk b/mk/tle.cpp-vars.mk
deleted file mode 100644 (file)
index 9cd2e2f..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright (c) 2016 Intel Corporation.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-ifeq ($(RTE_TOOLCHAIN), clang)
-CXX = $(CROSS)clang++
-ifeq ("$(origin CXX)", "command line")
-HOSTCXX = $(CXX)
-else
-HOSTCXX = clang++
-endif
-endif
-
-ifeq ($(RTE_TOOLCHAIN), icc)
-CXX = icc
-ifeq ("$(origin CXX)", "command line")
-HOSTCXX = $(CXX)
-else
-HOSTCXX = icc
-endif
-endif
-
-ifeq ($(RTE_TOOLCHAIN), gcc)
-CXX = $(CROSS)g++
-ifeq ("$(origin CXX)", "command line")
-HOSTCXX = $(CXX)
-else
-HOSTCXX = g++
-endif
-endif
-
-TOOLCHAIN_CXXFLAGS =
-
-CXXFLAGS := $(CFLAGS)
-
-export CXX CXXFLAGS TOOLCHAIN_CXXFLAGS
index 7455585..90bc989 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-EXTLIB_BUILD := y
+LIB_SHARED = $(LIB_NAME).so
+LIB_STATIC = $(LIB_NAME).a
 
-# we must create the output dir first and recall the same Makefile
-# from this directory
-ifeq ($(NOT_FIRST_CALL),)
+LDFLAGS += -Wl,--no-undefined $(LDFLAGS_SHARED)
 
-NOT_FIRST_CALL = 1
-export NOT_FIRST_CALL
+ifneq ($(LIB_DEPS),)
+       LDLIBS += -L$(RTE_OUTPUT)/lib
+       LDLIBS += $(patsubst %,-l%,$(LIB_DEPS))
+       LDFLAGS += $(LDLIBS)
+endif
+
+.PHONY: all clean static shared
+all: shared static
+shared: $(RTE_OUTPUT)/lib/$(LIB_SHARED)
+static: $(RTE_OUTPUT)/lib/$(LIB_STATIC)
+
+OBJS := $(patsubst %.c,$(BDIR)/%.o,$(SRCS-y))
+
+$(BDIR)/%.o: %.c Makefile $(HDRS) $(PC_FILE)
+       @mkdir -p $(BDIR)
+       $(Q)$(CC) $(CFLAGS) -c $< -o $@
 
-BDIR := $(RTE_OUTPUT)/build/$(CUR_SUBDIR)
+HDRS := $(patsubst %.h,$(RTE_OUTPUT)/include/%.h,$(SYMLINK-y-include))
 
-all:
-       $(Q)mkdir -p $(BDIR)
-       $(Q)$(MAKE) -C $(BDIR) -f $(RTE_EXTMK) \
-               S=$(RTE_SRCDIR) O=$(RTE_OUTPUT) SRCDIR=$(RTE_SRCDIR)
+$(RTE_OUTPUT)/include/%.h: %.h Makefile $(PC_FILE)
+       $(Q)ln -s -f $(RTE_SRCDIR)/$< $@
+
+clean:
+       $(Q)rm -f $(RTE_OUTPUT)/lib/$(LIB_SHARED)
+       $(Q)rm -f $(RTE_OUTPUT)/lib/$(LIB_STATIC)
+       $(Q)rm -f $(HDRS)
+       $(Q)rm -rf $(BDIR)
+
+$(RTE_OUTPUT)/lib/$(LIB_SHARED): $(HDRS) $(OBJS) Makefile $(PC_FILE)
+ifneq ($(OBJS),)
+       $(Q)$(CC) $(OBJS) -o $@ -shared $(LDFLAGS)
+endif
 
-%::
-       $(Q)mkdir -p $(BDIR)
-       $(Q)$(MAKE) -C $(BDIR) -f $(RTE_EXTMK) $@ \
-               S=$(RTE_SRCDIR) O=$(RTE_OUTPUT) SRCDIR=$(RTE_SRCDIR)
-else
-include $(RTE_SDK)/mk/rte.lib.mk
+$(RTE_OUTPUT)/lib/$(LIB_STATIC): $(HDRS) $(OBJS) Makefile $(PC_FILE)
+ifneq ($(OBJS),)
+       $(Q)$(AR) -cr $@ $(OBJS) -o $@
 endif
index 772011a..ce45acb 100644 (file)
@@ -19,11 +19,12 @@ clean: $(DIRS-y)
 
 .PHONY: $(DIRS-y)
 $(DIRS-y):
-       @echo "== $@"
+       @echo "=> $@"
        $(Q)$(MAKE) -C $(@) \
+               O=$(O) \
                M=$(CURDIR)/$(@)/Makefile \
-               CUR_SUBDIR=$(CUR_SUBDIR)/$(@) \
                S=$(CURDIR)/$(@) \
                RTE_TARGET=$(RTE_TARGET) \
                $(filter-out $(DIRS-y),$(MAKECMDGOALS))
+       @echo "<= $@"
 
diff --git a/mk/tle.var.mk b/mk/tle.var.mk
new file mode 100644 (file)
index 0000000..673c1d0
--- /dev/null
@@ -0,0 +1,58 @@
+# Copyright (c) 2021 Intel Corporation.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+ifeq ($(RTE_SDK),)
+$(error "Please define RTE_SDK environment variable")
+endif
+
+# Default target, can be overwritten by command line or environment
+RTE_TARGET ?= x86_64-native-linuxapp-gcc
+RTE_OUTPUT ?= $(O)
+RTE_SRCDIR ?= $(S)
+
+RTE_PKGCONF ?= $(RTE_SDK)/lib/x86_64-linux-gnu/pkgconfig
+
+PKGCONF = export PKG_CONFIG_PATH=$(RTE_PKGCONF); \
+          pkg-config
+ifneq ($(shell $(PKGCONF) --exists libdpdk && echo 0),0)
+$(error "no installation of DPDK found")
+endif
+
+CFLAGS += -O3
+CFLAGS += -fPIC
+CFLAGS += -m64 -pthread
+CFLAGS += -DALLOW_EXPERIMENTAL_API
+CFLAGS += -I$(RTE_OUTPUT)/include
+
+# compiler errors/warnings
+ifeq ($(CC), clang)
+CFLAGS += -Wall -Wextra -Werror
+CFLAGS += -Wno-missing-field-initializers -Wno-implicit-fallthrough
+CFLAGS += -Wno-address-of-packed-member -Wno-gnu-alignof-expression
+CFLAGS += -Wno-constant-conversion
+else
+CFLAGS += -Wall -Wextra -Werror
+CFLAGS += -Wno-missing-field-initializers -Wimplicit-fallthrough=2
+CFLAGS += -Wno-format-truncation -Wno-address-of-packed-member
+endif
+
+PC_FILE := $(shell $(PKGCONF) --path libdpdk 2>/dev/null)
+CFLAGS += $(shell $(PKGCONF) --cflags libdpdk)
+LDFLAGS_SHARED = $(shell $(PKGCONF) --libs libdpdk)
+LDFLAGS_STATIC = $(shell $(PKGCONF) --static --libs libdpdk)
+
+ifneq ($(APP_NAME),)
+       BDIR := $(RTE_OUTPUT)/build/$(APP_NAME)
+else
+       BDIR := $(RTE_OUTPUT)/build/$(LIB_NAME)
+endif
index c82b123..777b440 100644 (file)
@@ -19,8 +19,6 @@ ifeq ($(TLDK_ROOT),)
 $(error "Please define TLDK_SDK environment variable")
 endif
 
-include $(RTE_SDK)/mk/rte.vars.mk
-
 DIRS-y += dring
 DIRS-y += gtest
 DIRS-y += memtank
index 6549744..8141512 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-ifeq ($(RTE_SDK),)
-$(error "Please define RTE_SDK environment variable")
-endif
-
-ifeq ($(RTE_TARGET),)
-$(error "Please define RTE_TARGET environment variable")
-endif
-
-ifeq ($(TLDK_ROOT),)
-$(error "Please define TLDK_ROOT environment variable")
-endif
-
-include $(RTE_SDK)/mk/rte.vars.mk
-
 # binary name
-APP = test_dring
+APP_NAME = test_dring
+
+include $(TLDK_ROOT)/mk/tle.var.mk
 
 # all source are stored in SRCS-y
 SRCS-y += test_dring.c
 
-CFLAGS += $(WERROR_FLAGS)
-CFLAGS += -I$(RTE_OUTPUT)/include
-
-LDLIBS += -L$(RTE_OUTPUT)/lib
-LDLIBS += -ltle_dring
-
-EXTRA_CFLAGS += -O3
+LIB_DEPS += tle_dring
 
 include $(TLDK_ROOT)/mk/tle.app.mk
index 692fd44..a84081a 100644 (file)
@@ -405,7 +405,7 @@ test_dring_mt(int32_t master_enq_type, int32_t master_deq_type,
        memset(arg, 0, sizeof(arg));
 
        /* launch on all slaves */
-       RTE_LCORE_FOREACH_SLAVE(lc) {
+       RTE_LCORE_FOREACH_WORKER(lc) {
                arg[lc].dr = &dr;
                arg[lc].r = r;
                arg[lc].iter = ITER_NUM;
@@ -426,7 +426,7 @@ test_dring_mt(int32_t master_enq_type, int32_t master_deq_type,
        deq = arg[lc].deq;
 
        /* wait for slaves. */
-       RTE_LCORE_FOREACH_SLAVE(lc) {
+       RTE_LCORE_FOREACH_WORKER(lc) {
                rc |= rte_eal_wait_lcore(lc);
                enq += arg[lc].enq;
                deq += arg[lc].deq;
index 3858306..0d6372e 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-ifeq ($(RTE_SDK),)
-$(error "Please define RTE_SDK environment variable")
-endif
-
 ifeq ($(GTEST_DIR),)
 all:
        @echo "GTEST_DIR is not setup properly. Skipping gtest"
@@ -24,111 +20,46 @@ all:
 
 else
 
-# Default target, can be overridden by command line or environment
-RTE_TARGET ?= x86_64-native-linuxapp-gcc
-
-include $(RTE_SDK)/mk/rte.vars.mk
-
-CUR_SUBDIR ?= .
-
-# we must create the output dir first and recall the same Makefile
-# from this directory
-ifeq ($(NOT_FIRST_CALL),)
-
-NOT_FIRST_CALL = 1
-export NOT_FIRST_CALL
-
-
-BDIR := $(RTE_OUTPUT)/build/$(CUR_SUBDIR)
-
-all:
-       $(Q)mkdir -p $(BDIR)
-       $(Q)$(MAKE) -C $(BDIR) -f $(RTE_EXTMK) \
-               S=$(RTE_SRCDIR) O=$(RTE_OUTPUT) SRCDIR=$(RTE_SRCDIR) X=obj
-       $(Q)$(MAKE) -C $(BDIR) -f $(RTE_EXTMK) \
-               S=$(RTE_SRCDIR) O=$(RTE_OUTPUT) SRCDIR=$(RTE_SRCDIR) X=app
-
-%::
-       $(Q)mkdir -p $(BDIR)
-       $(Q)$(MAKE) -C $(BDIR) -f $(RTE_EXTMK) $@ \
-               S=$(RTE_SRCDIR) O=$(RTE_OUTPUT) SRCDIR=$(RTE_SRCDIR) X=obj
-       $(Q)$(MAKE) -C $(BDIR) -f $(RTE_EXTMK) $@ \
-               S=$(RTE_SRCDIR) O=$(RTE_OUTPUT) SRCDIR=$(RTE_SRCDIR) X=app
-else
-
-#
-# building object
-#
-
-ifeq ($(X),obj)
-include $(TLDK_ROOT)/mk/tle.cpp-vars.mk
-
 # binary name
-OBJ = gtest-rfc.o
+APP_NAME = gtest-rfc
+
+include $(TLDK_ROOT)/mk/tle.var.mk
 
 # all source are stored in SRCS-y
-SRCS-y += main.cpp
-SRCS-y += test_common.cpp
-SRCS-y += test_tle_dring.cpp
-SRCS-y += test_tle_ctx.cpp
-#SRCS-y += test_tle_udp_dev.cpp
-SRCS-y += test_tle_udp_destroy.cpp
-SRCS-y += test_tle_udp_event.cpp
-#SRCS-y += test_tle_udp_stream.cpp
-SRCS-y += test_tle_udp_stream_gen.cpp
-SRCS-y += test_tle_tcp_stream.cpp
-#SRCS-y += test_tle_tcp_stream_gen.cpp
+SRCCPP-y += main.cpp
+SRCCPP-y += test_common.cpp
+SRCCPP-y += test_tle_dring.cpp
+SRCCPP-y += test_tle_ctx.cpp
+SRCCPP-y += test_tle_udp_destroy.cpp
+SRCCPP-y += test_tle_udp_event.cpp
+SRCCPP-y += test_tle_udp_stream_gen.cpp
+SRCCPP-y += test_tle_tcp_stream.cpp
 
 SYMLINK-y-app += test_scapy_gen.py
 
 CXXFLAGS += -std=c++11
 
-ifeq ($(shell test $(GCC_VERSION) -lt 50 && echo 1), 1)
-CXXFLAGS += -D __STDC_FORMAT_MACROS
-endif
-
 CXXFLAGS += -I$(GTEST_DIR)/include
 CXXFLAGS += -I$(GMOCK_DIR)/include
-CXXFLAGS += -I$(RTE_OUTPUT)/include
 
-CXXFLAGS += $(EXTRA_CFLAGS)
+CXXFLAGS += $(CFLAGS) -Wno-error
 
-LDFLAGS += -lstdc++
+LDFLAGS += -lstdc++ -lpthread
 LDFLAGS += -L$(GMOCK_DIR) -L$(GMOCK_DIR)/../lib -lgmock
-LDLIBS += -whole-archive -ltle_l4p -ltle_dring
-
-include $(TLDK_ROOT)/mk/tle.cpp-obj.mk
-endif
-
-#
-# building app
-#
-
-ifeq ($(X),app)
+LDFLAGS += -L$(GMOCK_DIR)/gtest -L$(GMOCK_DIR)/../lib -lgtest
 
-# binary name
-APP = gtest-rfc
-
-# all source are stored in SRCS-y
+LIB_DEPS += tle_l4p
+LIB_DEPS += tle_memtank
+LIB_DEPS += tle_timer
+LIB_DEPS += tle_dring
 
-CFLAGS += -O3
-
-ifeq ($(shell test $(GCC_VERSION) -lt 50 && echo 1), 1)
-CFLAGS += -D __STDC_FORMAT_MACROS
-endif
+CPP_OBJS := $(patsubst %.cpp,$(BDIR)/%.o,$(SRCCPP-y))
+OBJS += $(CPP_OBJS)
 
-CFLAGS += $(WERROR_FLAGS)
-
-LDLIBS += gtest-rfc.o
-
-LDLIBS += -lstdc++
-LDLIBS += -L$(GMOCK_DIR) -L$(GMOCK_DIR)/../lib -lgmock
-LDLIBS += -L$(GMOCK_DIR)/gtest -L$(GMOCK_DIR)/../lib -lgtest
-LDLIBS += -L$(RTE_OUTPUT)/lib
-LDLIBS += -whole-archive -ltle_l4p -ltle_dring -ltle_memtank -ltle_timer
+$(BDIR)/%.o: %.cpp Makefile
+       @mkdir -p $(BDIR)
+       $(Q)$(CXX) $(CXXFLAGS) $(CXXFLAGS_$(<)) -c $< -o $@
 
 include $(TLDK_ROOT)/mk/tle.app.mk
-endif
 
 endif
-endif
index fdb2c47..1988e9f 100644 (file)
@@ -384,7 +384,7 @@ test_dring_mt(int32_t master_enq_type, int32_t master_deq_type,
        memset(arg, 0, sizeof(arg));
 
        /* launch on all slaves */
-       RTE_LCORE_FOREACH_SLAVE(lc) {
+       RTE_LCORE_FOREACH_WORKER(lc) {
                arg[lc].dr = &dr;
                arg[lc].r = r;
                arg[lc].iter = ITER_NUM;
@@ -405,7 +405,7 @@ test_dring_mt(int32_t master_enq_type, int32_t master_deq_type,
        deq = arg[lc].deq;
 
        /* wait for slaves. */
-       RTE_LCORE_FOREACH_SLAVE(lc) {
+       RTE_LCORE_FOREACH_WORKER(lc) {
                rc |= rte_eal_wait_lcore(lc);
                enq += arg[lc].enq;
                deq += arg[lc].deq;
index b8e4483..5a508c0 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-ifeq ($(RTE_SDK),)
-$(error "Please define RTE_SDK environment variable")
-endif
-
-ifeq ($(RTE_TARGET),)
-$(error "Please define RTE_TARGET environment variable")
-endif
-
-ifeq ($(TLDK_ROOT),)
-$(error "Please define TLDK_ROOT environment variable")
-endif
-
-include $(RTE_SDK)/mk/rte.vars.mk
-
 # binary name
-APP = test_memtank
+APP_NAME = test_memtank
+
+include $(TLDK_ROOT)/mk/tle.var.mk
 
 # all source are stored in SRCS-y
 SRCS-y += test_memtank.c
 
-CFLAGS += $(WERROR_FLAGS)
-CFLAGS += -I$(RTE_OUTPUT)/include
-
-LDLIBS += -L$(RTE_OUTPUT)/lib
-LDLIBS += -ltle_memtank
-
-EXTRA_CFLAGS += -O3
+LIB_DEPS += tle_memtank
 
 include $(TLDK_ROOT)/mk/tle.app.mk
index 6312339..899cc5a 100644 (file)
@@ -703,7 +703,7 @@ test_memtank_cleanup(struct tle_memtank *mt, struct memstat *ms,
 
        printf("%s(%s)\n", __func__, tname);
 
-       RTE_LCORE_FOREACH_SLAVE(lc)
+       RTE_LCORE_FOREACH_WORKER(lc)
                rte_eal_remote_launch(test_worker_cleanup, &arg[lc], lc);
 
        /* launch on master */
@@ -711,8 +711,9 @@ test_memtank_cleanup(struct tle_memtank *mt, struct memstat *ms,
        arg[lc].master.run_cycles = CLEANUP_TIME * rte_get_timer_hz();
        test_memtank_master(&arg[lc]);
 
+       rc = 0;
        ms->nb_alloc_obj = 0;
-       RTE_LCORE_FOREACH_SLAVE(lc) {
+       RTE_LCORE_FOREACH_WORKER(lc) {
                rc |= rte_eal_wait_lcore(lc);
                ms->nb_alloc_obj += arg[lc].stats.alloc.nb_alloc -
                        arg[lc].stats.free.nb_free;
@@ -764,7 +765,7 @@ test_memtank_mt(const char *tname, uint32_t alloc_flags, uint32_t free_flags)
        memset(arg, 0, sizeof(arg));
 
        /* prepare args on all slaves */
-       RTE_LCORE_FOREACH_SLAVE(lc) {
+       RTE_LCORE_FOREACH_WORKER(lc) {
                arg[lc].mt = mt;
                rc = fill_worker_args(&arg[lc].worker, alloc_flags,
                        free_flags, lc);
@@ -779,7 +780,7 @@ test_memtank_mt(const char *tname, uint32_t alloc_flags, uint32_t free_flags)
        }
 
        /* launch on all slaves */
-       RTE_LCORE_FOREACH_SLAVE(lc)
+       RTE_LCORE_FOREACH_WORKER(lc)
                rte_eal_remote_launch(test_memtank_worker, &arg[lc], lc);
 
        /* launch on master */
@@ -794,7 +795,7 @@ test_memtank_mt(const char *tname, uint32_t alloc_flags, uint32_t free_flags)
        memtank_stat_reset(&wrk_stats);
 
        rc = 0;
-       RTE_LCORE_FOREACH_SLAVE(lc) {
+       RTE_LCORE_FOREACH_WORKER(lc) {
                rc |= rte_eal_wait_lcore(lc);
                memtank_stat_dump(stdout, lc, &arg[lc].stats);
                memtank_stat_aggr(&wrk_stats, &arg[lc].stats);
index 159faeb..5e3c1ef 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-ifeq ($(RTE_SDK),)
-$(error "Please define RTE_SDK environment variable")
-endif
-
-ifeq ($(RTE_TARGET),)
-$(error "Please define RTE_TARGET environment variable")
-endif
-
-ifeq ($(TLDK_ROOT),)
-$(error "Please define TLDK_ROOT environment variable")
-endif
-
-include $(RTE_SDK)/mk/rte.vars.mk
-
 # binary name
-APP = test_timer
+APP_NAME = test_timer
+
+include $(TLDK_ROOT)/mk/tle.var.mk
 
 # all source are stored in SRCS-y
 SRCS-y += test_timer.c
 
-CFLAGS += $(WERROR_FLAGS)
-CFLAGS += -I$(RTE_OUTPUT)/include
-
-LDLIBS += -L$(RTE_OUTPUT)/lib
-LDLIBS += -ltle_timer
-
-EXTRA_CFLAGS += -O3
+LIB_DEPS += tle_timer
 
 include $(TLDK_ROOT)/mk/tle.app.mk