summaryrefslogtreecommitdiffstats
path: root/lib/build-lib.mk
blob: 6db199d66f27346e927baf4b519a6b957377cd5a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# Copyright 2022 Alejandro Colomar <alx@kernel.org>
# SPDX-License-Identifier:  LGPL-3.0-or-later WITH LGPL-3.0-linking-exception


ifndef LIB_BUILD_LIB_MK_
LIB_BUILD_LIB_MK_ := 1


include $(srcdir)/lib/build.mk
include $(srcdir)/lib/build-deps.mk
include $(srcdir)/lib/build-obj.mk
include $(srcdir)/lib/cmd.mk
include $(srcdir)/lib/src.mk
include $(srcdir)/lib/verbose.mk
include $(srcdir)/lib/version.mk


DEFAULT_LDFLAGS := -shared
DEFAULT_LDFLAGS += -fuse-linker-plugin
DEFAULT_LDFLAGS += -Wl,-soname,$(libname).so.$(MAJOR_VERSION)
DEFAULT_LDFLAGS += -Wl,--as-needed
DEFAULT_LDFLAGS += -Wl,--no-allow-shlib-undefined
DEFAULT_LDFLAGS += -Wl,--no-copy-dt-needed-entries
DEFAULT_LDFLAGS += -Wl,--no-undefined
DEFAULT_LDFLAGS += $(shell $(PKGCONF_CMD) --libs-only-L $(pc_reqs) $(HIDE_ERR))
DEFAULT_LDFLAGS += $(shell $(PKGCONF_CMD) --libs-only-other $(pc_reqs) $(HIDE_ERR))
EXTRA_LDFLAGS   :=
LDFLAGS         := $(DEFAULT_LDFLAGS) $(EXTRA_LDFLAGS)

DEFAULT_LDLIBS := $(filter-out -lc-qual,$(shell $(PKGCONF_CMD) --libs-only-l $(pc_reqs) $(HIDE_ERR)))
DEFAULT_LDLIBS += $(shell $(SED) -n '/^Libs.private: /s///p' $(LIB_pc_u))
EXTRA_LDLIBS   :=
LDLIBS         := $(DEFAULT_LDLIBS) $(EXTRA_LDLIBS)


LD   := $(CC) $(CFLAGS)


_LIB_so_v := $(builddir)/$(libname).so.$(DISTVERSION)


$(_LIB_so_v): %.so.$(DISTVERSION): $(_TU_o) $(mk) $(_LIB_pc_u) | $$(@D)/
	$(info	LD		$@)
	for opt in g 0 1 2 s 3 fast; do \
	$(LD) $(CFLAGS) $(LDFLAGS) -O$$opt -o $*.O$$opt.so.$(DISTVERSION) \
			$(patsubst %.o,%.O$$opt.o,$(_TU_o)) $(LDLIBS); \
	done
	$(LD) $(CFLAGS) $(LDFLAGS)         -o $@              $(_TU_o) $(LDLIBS)


.PHONY: build-lib-ld
build-lib-ld: $(_LIB_so_v)
	@:


.PHONY: build-lib
build-lib: build-lib-ld
	@:


endif  # include guard