mirror of
https://gitee.com/openharmony/third_party_libbpf
synced 2024-10-07 06:23:25 +00:00
Extend build and add install rules to Makefile
Introduce multiple improvements to Makefile to make the build more flexible and support install: * Support overriding CFLAGS by user but keep required flags in place. ALL_FLAGS is used in Makefile as recommended in [1]. * Add additional BUILD_SHARED flag to build dynamically linked flavor of the library. If the flag is set, -fPIC is also passed to make it possible to build .so. * Support building in a separate directory provided by OBJDIR variable. * Add multiple install targets. By default the library itself and libbpf headers are installed (install target). UAPI headers can be optionally installed by user. * All installation paths, including PREFIX, library and include directories can be overridden. UAPI can be made different from include directory for libbpf headers. That makes it possible to keep latest <linux/bpf.h> in a place that doesn't conflict with the one installed e.g. by kernel-headers package and use it in user's build system. * Support DESTDIR (see [2]). * Support overriding LDFLAGS. * Use utilities such as rm directly as recommended in [3]. * Use compiler and related programs (such as ar) via make variables as recommended in [3]. * In clean rule remove all possible build artifacts not to rely on passed options (e.g. if build was done w/ BUILD_SHARED, but clean w/o it). * Document new build options in README. [1] https://www.gnu.org/software/make/manual/html_node/Command-Variables.html#Command-Variables [2] https://www.gnu.org/prep/standards/html_node/DESTDIR.html [3] https://www.gnu.org/software/make/manual/html_node/Utilities-in-Makefiles.html#Utilities-in-Makefiles Signed-off-by: Andrey Ignatov <rdna@fb.com>
This commit is contained in:
parent
c2015d0a65
commit
a82a66eda3
10
README
10
README
@ -18,7 +18,13 @@ successful.
|
|||||||
Build
|
Build
|
||||||
=====
|
=====
|
||||||
|
|
||||||
To build,
|
To build static library libbpf.a:
|
||||||
cd src
|
cd src
|
||||||
make
|
make
|
||||||
and it will build libbpf.a library
|
|
||||||
|
To build both static libbpf.a and shared libbpf.so libraries in directory
|
||||||
|
build/ and install them together with libbpf headers in a staging directory
|
||||||
|
root/:
|
||||||
|
cd src
|
||||||
|
mkdir build root
|
||||||
|
BUILD_SHARED=y OBJDIR=build DESTDIR=root make install
|
||||||
|
75
src/Makefile
75
src/Makefile
@ -1,23 +1,78 @@
|
|||||||
# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
|
# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
|
||||||
|
|
||||||
TOPDIR = ..
|
TOPDIR = ..
|
||||||
INCLUDES = -I. -I$(TOPDIR)/include -I$(TOPDIR)/include/uapi
|
|
||||||
CFLAGS = $(INCLUDES) -O2 -Werror -Wall
|
INCLUDES := -I. -I$(TOPDIR)/include -I$(TOPDIR)/include/uapi
|
||||||
|
ALL_CFLAGS := $(INCLUDES)
|
||||||
|
|
||||||
FEATURE_REALLOCARRAY := $(shell $(TOPDIR)/scripts/check-reallocarray.sh)
|
FEATURE_REALLOCARRAY := $(shell $(TOPDIR)/scripts/check-reallocarray.sh)
|
||||||
ifneq ($(FEATURE_REALLOCARRAY),)
|
ifneq ($(FEATURE_REALLOCARRAY),)
|
||||||
CFLAGS += -DCOMPAT_NEED_REALLOCARRAY
|
ALL_CFLAGS += -DCOMPAT_NEED_REALLOCARRAY
|
||||||
endif
|
endif
|
||||||
|
|
||||||
OBJFILES = bpf.o btf.o libbpf.o libbpf_errno.o netlink.o nlattr.o str_error.o
|
ifdef BUILD_SHARED
|
||||||
|
ALL_CFLAGS += -fPIC
|
||||||
|
endif
|
||||||
|
|
||||||
all: libbpf.a
|
CFLAGS ?= -g -O2 -Werror -Wall
|
||||||
|
ALL_CFLAGS += $(CFLAGS)
|
||||||
|
|
||||||
libbpf.a: $(OBJFILES)
|
OBJDIR ?= .
|
||||||
/bin/rm -f $@; /bin/ar rcs $@ $^
|
|
||||||
|
|
||||||
%.o: %.c
|
OBJS := $(addprefix $(OBJDIR)/,bpf.o btf.o libbpf.o libbpf_errno.o netlink.o \
|
||||||
gcc $(CFLAGS) -c $< -o $@
|
nlattr.o str_error.o)
|
||||||
|
|
||||||
|
LIBS := $(OBJDIR)/libbpf.a
|
||||||
|
ifdef BUILD_SHARED
|
||||||
|
LIBS += $(OBJDIR)/libbpf.so
|
||||||
|
endif
|
||||||
|
|
||||||
|
HEADERS := bpf.h libbpf.h btf.h
|
||||||
|
UAPI_HEADERS := $(addprefix $(TOPDIR)/include/uapi/linux/,bpf.h btf.h)
|
||||||
|
|
||||||
|
INSTALL = install
|
||||||
|
|
||||||
|
DESTDIR ?=
|
||||||
|
|
||||||
|
ifeq ($(shell uname -m),x86_64)
|
||||||
|
LIBSUBDIR := lib64
|
||||||
|
else
|
||||||
|
LIBSUBDIR := lib
|
||||||
|
endif
|
||||||
|
|
||||||
|
PREFIX ?= /usr
|
||||||
|
LIBDIR ?= $(PREFIX)/$(LIBSUBDIR)
|
||||||
|
INCLUDEDIR ?= $(PREFIX)/include
|
||||||
|
UAPIDIR ?= $(PREFIX)/include
|
||||||
|
|
||||||
|
all: $(LIBS)
|
||||||
|
|
||||||
|
$(OBJDIR)/libbpf.a: $(OBJS)
|
||||||
|
$(AR) rcs $@ $^
|
||||||
|
|
||||||
|
$(OBJDIR)/libbpf.so: $(OBJS)
|
||||||
|
$(CC) -shared $(LDFLAGS) $^ -o $@
|
||||||
|
|
||||||
|
$(OBJDIR)/%.o: %.c
|
||||||
|
$(CC) $(ALL_CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
define do_install
|
||||||
|
if [ ! -d '$(DESTDIR)$2' ]; then \
|
||||||
|
$(INSTALL) -d -m 755 '$(DESTDIR)$2'; \
|
||||||
|
fi; \
|
||||||
|
$(INSTALL) $1 $(if $3,-m $3,) '$(DESTDIR)$2'
|
||||||
|
endef
|
||||||
|
|
||||||
|
install: all install_headers
|
||||||
|
$(call do_install,$(LIBS),$(LIBDIR))
|
||||||
|
|
||||||
|
install_headers:
|
||||||
|
$(call do_install,$(HEADERS),$(INCLUDEDIR)/bpf,644)
|
||||||
|
|
||||||
|
# UAPI headers can be installed by a different package so they're not installed
|
||||||
|
# in by install rule.
|
||||||
|
install_uapi_headers:
|
||||||
|
$(call do_install,$(UAPI_HEADERS),$(UAPIDIR)/linux,644)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
/bin/rm -f libbpf.a $(OBJFILES)
|
rm -f *.o *.a *.so
|
||||||
|
Loading…
Reference in New Issue
Block a user