Skip to contentSkip to conversation

support building ethtool example using meson

PATCH In review Bruce Richardson 2 participants 5 messages Mar 29, 2018 – Jul 12, 2018 Arm/Amlogic Meson SoC support

lore
Share & tools
lore
#0 lore raw

cover support building ethtool example using meson

Add support for building the ethtool example as part of a meson build, or separately using the pkgconfig file produced by meson.

Bruce Richardson (2):
examples/ethtool: add to meson build examples/ethtool: enable build using pkg-config vars

 examples/ethtool/Makefile    | 50 ++++++++++++++++++++++++++++++++++++++++++++
 examples/ethtool/meson.build | 13 ++++++++++--
 2 files changed, 61 insertions(+), 2 deletions(-)
Signature · 1 line
2.14.3
#1 lore raw

PATCH 1/2 examples/ethtool: add to meson build

Add the ethtool example to the meson build. This example is more complicated than the previously added ones as it has files in two subdirectories. An ethtool "wrapper lib" in one, used by the actual example "ethtool app" in the other.

Rather than using recursive operation, like is done with the makefiles, we instead can just special-case the building of the library from the single .c file, and then use that as a dependency when building the app proper.

---
 examples/ethtool/meson.build | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)
examples/ethtool/meson.build +11 -2
index c370d7476..0ec2a2391 100644
@@ -6,5 +6,14 @@
 # To build this example as a standalone application with an already-installed
 # DPDK instance, use 'make'
 
-# Example app currently unsupported by meson build
-build = false
+# build the ethtool wrapper as a lib, which app uses as a dependency
+ethtool_inc = include_directories('lib')
+ethtool_lib = static_library('rte_ethtool', 'lib/rte_ethtool.c',
+		include_directories: ethtool_inc,
+		dependencies: [static_rte_ethdev, static_rte_pmd_ixgbe])
+ethtool_dep = declare_dependency(link_with: ethtool_lib,
+	include_directories: ethtool_inc)
+
+# sample app files are in the ethtool-app subdir
+sources = files('ethtool-app/ethapp.c', 'ethtool-app/main.c')
+ext_deps += ethtool_dep
Signature · 1 line
2.14.3
#2 lore raw

Re: [PATCH 1/2] examples/ethtool: add to meson build

29/03/2018 16:04, Bruce Richardson:

Quoted 11 lines

Add the ethtool example to the meson build. This example is more complicated than the previously added ones as it has files in two subdirectories. An ethtool "wrapper lib" in one, used by the actual example "ethtool app" in the other.

Rather than using recursive operation, like is done with the makefiles, we instead can just special-case the building of the library from the single .c file, and then use that as a dependency when building the app proper.

It does not compile because of experimental function:
examples/ethtool/lib/rte_ethtool.c:186:2: error:
‘rte_eth_dev_get_module_info’ is deprecated: Symbol is not yet part of stable ABI

#3 lore raw

Re: [PATCH 1/2] examples/ethtool: add to meson build

Quoted 11 lines · Thomas Monjalon

29/03/2018 16:04, Bruce Richardson:

Quoted 10 lines

Add the ethtool example to the meson build. This example is more complicated than the previously added ones as it has files in two subdirectories. An ethtool "wrapper lib" in one, used by the actual example "ethtool app" in the other.

Rather than using recursive operation, like is done with the makefiles, we instead can just special-case the building of the library from the single .c file, and then use that as a dependency when building the app proper.

Quoted 6 lines
Quoted 1 line

It does not compile because of experimental function:
examples/ethtool/lib/rte_ethtool.c:186:2: error:
‘rte_eth_dev_get_module_info’ is deprecated: Symbol is not yet part of stable ABI

Ok. This set is fairly old, and I think I've found other issues with it since. I suggest we drop this set for 18.08 consideration.

#4 lore raw

PATCH 2/2 examples/ethtool: enable build using pkg-config vars

In reply to Bruce Richardson

When provided as an example in a DPDK package, the build of the example app should use the pkg-config-supplied values from the package. As with other examples, set up makefile to allow compilation either using pkg-config or old $RTE_SDK/$RTE_TARGET values.

---
 examples/ethtool/Makefile | 50 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)
examples/ethtool/Makefile +50 -0
index 2b40b4b61..9ea7e0e07 100644
@@ -1,6 +1,54 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2015 Intel Corporation
 
+# Build using pkg-config variables if possible
+$(shell pkg-config --exists libdpdk)
+ifeq ($(.SHELLSTATUS),0)
+
+# sample app consists of two parts, an example library and app using it
+APP := ethtool
+SRCS-y := ethtool-app/main.c ethtool-app/ethapp.c
+
+LIB := rte_ethtool
+LIB-SRC := rte_ethtool.c
+
+all: shared
+.PHONY: shared static
+shared: build/$(APP)-shared
+	ln -sf $(APP)-shared build/$(APP)
+static: build/$(APP)-static
+	ln -sf $(APP)-static build/$(APP)
+
+PC_FILE := $(shell pkg-config --path libdpdk)
+CFLAGS += -O3 $(shell pkg-config --cflags libdpdk)
+LDFLAGS_SHARED = $(shell pkg-config --libs libdpdk) -lrte_pmd_ixgbe
+LDFLAGS_STATIC = -Wl,-Bstatic $(shell pkg-config --static --libs libdpdk)
+
+LIB-OBJ := build/$(LIB-SRC:.c=.o)
+AR_FILE := build/lib$(LIB).a
+
+$(LIB-OBJ): lib/$(LIB-SRC) Makefile $(PC_FILE) | build
+	$(CC) -c $(CFLAGS) lib/$(LIB-SRC) -o $@
+
+$(AR_FILE): $(LIB-OBJ)
+	$(AR) r $@ $<
+
+build/$(APP)-shared: $(SRCS-y) $(AR_FILE) Makefile $(PC_FILE) | build
+	$(CC) -Ilib $(CFLAGS) $(SRCS-y) $(AR_FILE) -o $@ $(LDFLAGS) $(LDFLAGS_SHARED)
+
+build/$(APP)-static: $(SRCS-y) $(AR_FILE) Makefile $(PC_FILE) | build
+	$(CC) -Ilib $(CFLAGS) $(SRCS-y) $(AR_FILE) -o $@ $(LDFLAGS) $(LDFLAGS_STATIC)
+
+build:
+	@mkdir -p $@
+
+.PHONY: clean
+clean:
+	rm -f build/$(APP) build/$(APP)-static build/$(APP)-shared
+	rmdir --ignore-fail-on-non-empty build
+
+else
+
 ifeq ($(RTE_SDK),)
 $(error "Please define RTE_SDK environment variable")
 endif
@@ -21,3 +69,5 @@ endif
 DEPDIRS-ethtool-app := lib
 
 include $(RTE_SDK)/mk/rte.extsubdir.mk
+
+endif # no pkg-config for DPDK
Signature · 1 line
2.14.3