# SPDX-License-Identifier: BSD-3-Clause # DPDK WebSocket Client - Makefile (DPDK 24.11) APP = dpdk_ws_client BUILD_DIR = build # DPDK 24.11 pkg-config (meson build) DPDK_BUILD = /home/wxj/share/dpdk-study/sources/dpdk-24.11/build PKG_CONFIG_PATH := $(DPDK_BUILD)/meson-uninstalled PKGCONF = PKG_CONFIG_PATH="$(PKG_CONFIG_PATH)" pkg-config # Library: use libdpdk-libs for shared linking (PMDs loaded as plugins) DPDK_CFLAGS := $(shell $(PKGCONF) --cflags libdpdk-libs 2>/dev/null || echo "ERROR: DPDK pkg-config not found") DPDK_LIBS := $(shell $(PKGCONF) --libs libdpdk-libs 2>/dev/null) # Source files SRCS := src/main.c SRCS += src/tcp_core.c SRCS += src/tcp_input.c SRCS += src/tcp_output.c SRCS += src/tcp_timer.c SRCS += src/tcp_socket.c SRCS += src/ws_client.c OBJS := $(SRCS:%.c=$(BUILD_DIR)/%.o) DEPS := $(OBJS:.o=.d) CFLAGS = -O2 -g -Wall -Wno-unused-parameter -Wno-unused-function CFLAGS += -DALLOW_EXPERIMENTAL_API CFLAGS += -Isrc/ CFLAGS += $(DPDK_CFLAGS) LDFLAGS = $(DPDK_LIBS) -lpthread -ldl -lnuma LDFLAGS += -Wl,--allow-multiple-definition LDFLAGS += -Wl,-rpath,$(DPDK_BUILD)/lib # Market Data Feed Handler (product app) FEED_SRCS := app/market_feed.c FEED_SRCS += src/tcp_core.c FEED_SRCS += src/tcp_input.c FEED_SRCS += src/tcp_output.c FEED_SRCS += src/tcp_timer.c FEED_SRCS += src/tcp_socket.c FEED_SRCS += src/ws_client.c FEED_OBJS := $(FEED_SRCS:%.c=$(BUILD_DIR)/%.o) .PHONY: all clean clean-all perf app all: $(BUILD_DIR)/$(APP) # Performance test binary PERF_SRCS := src/perf_test.c PERF_SRCS += src/tcp_core.c PERF_SRCS += src/tcp_input.c PERF_SRCS += src/tcp_output.c PERF_SRCS += src/tcp_timer.c PERF_SRCS += src/tcp_socket.c PERF_SRCS += src/ws_client.c PERF_OBJS := $(PERF_SRCS:%.c=$(BUILD_DIR)/%.o) perf: $(BUILD_DIR)/dpdk_perf $(BUILD_DIR)/dpdk_perf: $(PERF_OBJS) @mkdir -p $(@D) PKG_CONFIG_PATH="$(PKG_CONFIG_PATH)" gcc $(PERF_OBJS) $(LDFLAGS) -o $@ @echo " LINK $@" -include $(DEPS) $(BUILD_DIR)/$(APP): $(OBJS) @mkdir -p $(@D) PKG_CONFIG_PATH="$(PKG_CONFIG_PATH)" gcc $(OBJS) $(LDFLAGS) -o $@ @echo " LINK $@" $(BUILD_DIR)/%.o: %.c @mkdir -p $(@D) PKG_CONFIG_PATH="$(PKG_CONFIG_PATH)" gcc $(CFLAGS) -MMD -c $< -o $@ @echo " CC $<" clean: rm -rf $(BUILD_DIR) clean-all: clean rm -f $(APP) # ── Market Data Feed Handler (production app) ───────────────── app: $(BUILD_DIR)/market_feed $(BUILD_DIR)/market_feed: $(FEED_OBJS) @mkdir -p $(@D) PKG_CONFIG_PATH="$(PKG_CONFIG_PATH)" gcc $(FEED_OBJS) $(LDFLAGS) -o $@ @echo " LINK $@" $(BUILD_DIR)/app/%.o: app/%.c @mkdir -p $(@D) PKG_CONFIG_PATH="$(PKG_CONFIG_PATH)" gcc $(CFLAGS) -Isrc/ -MMD -c $< -o $@ @echo " CC $<"