mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-24 18:55:04 +08:00
aix: No need to use mkldexport when we want to export all symbols
When building a shared library with exports.txt there's no need to build an intermediary static library, we can just pass -Wl,-bE:... when generating the .so. When building a shared library without exports.txt, there's no need to call mkldexport.sh to export all symbols, because all symbols are exported anyway, and we don't need the export file on the import side (like we do for postgres.imp). This makes building .so's on aix a lot more similar to building on other platforms. In particular, we don't create and remove a .a of the same name but different contents anymore. Discussion: https://postgr.es/m/20220820174213.d574qde4ptwdzoqz@awork3.anarazel.de
This commit is contained in:
parent
b7050e2584
commit
fe6a64a58a
@ -107,12 +107,17 @@ override CPPFLAGS += -DSO_MAJOR_VERSION=$(SO_MAJOR_VERSION)
|
||||
endif
|
||||
|
||||
ifeq ($(PORTNAME), aix)
|
||||
LINK.shared = $(COMPILER)
|
||||
ifdef SO_MAJOR_VERSION
|
||||
shlib = lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION)
|
||||
endif
|
||||
haslibarule = yes
|
||||
# $(exports_file) is also usable as an import file
|
||||
exports_file = lib$(NAME).exp
|
||||
BUILD.exports = ( echo '\#! $(shlib)'; $(AWK) '/^[^\#]/ {printf "%s\n",$$1}' $< ) > $@
|
||||
ifneq (,$(SHLIB_EXPORTS))
|
||||
LINK.shared += -Wl,-bE:$(exports_file)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(PORTNAME), darwin)
|
||||
@ -259,9 +264,15 @@ $(stlib): $(OBJS) | $(SHLIB_PREREQS)
|
||||
touch $@
|
||||
endif #haslibarule
|
||||
|
||||
# AIX wraps shared libraries inside a static library, can be used both
|
||||
# for static and shared linking
|
||||
ifeq ($(PORTNAME), aix)
|
||||
$(stlib): $(shlib)
|
||||
rm -f $(stlib)
|
||||
$(AR) $(AROPT) $(stlib) $(shlib)
|
||||
endif # aix
|
||||
|
||||
ifeq (,$(filter cygwin win32,$(PORTNAME)))
|
||||
ifneq ($(PORTNAME), aix)
|
||||
|
||||
# Normal case
|
||||
$(shlib): $(OBJS) | $(SHLIB_PREREQS)
|
||||
@ -274,9 +285,12 @@ ifneq ($(shlib), $(shlib_major))
|
||||
endif
|
||||
# Make sure we have a link to a name without any version numbers
|
||||
ifneq ($(shlib), $(shlib_bare))
|
||||
# except on AIX, where that's not a thing
|
||||
ifneq ($(PORTNAME), aix)
|
||||
rm -f $(shlib_bare)
|
||||
$(LN_S) $(shlib) $(shlib_bare)
|
||||
endif
|
||||
endif # aix
|
||||
endif # shlib_bare
|
||||
endif # shlib_major
|
||||
|
||||
# Where possible, restrict the symbols exported by the library to just the
|
||||
@ -285,36 +299,13 @@ endif # shlib_major
|
||||
# libpgport along with libpq.
|
||||
ifneq (,$(SHLIB_EXPORTS))
|
||||
ifdef BUILD.exports
|
||||
$(shlib): $(SHLIB_EXPORTS:%.txt=%.list)
|
||||
$(shlib): $(exports_file)
|
||||
|
||||
$(SHLIB_EXPORTS:%.txt=%.list): %.list: %.txt
|
||||
$(exports_file): $(SHLIB_EXPORTS)
|
||||
$(BUILD.exports)
|
||||
endif
|
||||
endif
|
||||
|
||||
else # PORTNAME == aix
|
||||
|
||||
# AIX case
|
||||
|
||||
# See notes in src/backend/parser/Makefile about the following two rules
|
||||
$(stlib): $(shlib)
|
||||
touch $@
|
||||
|
||||
$(shlib): $(OBJS) | $(SHLIB_PREREQS)
|
||||
rm -f $(stlib)
|
||||
$(LINK.static) $(stlib) $^
|
||||
$(RANLIB) $(stlib)
|
||||
ifeq (,$(SHLIB_EXPORTS))
|
||||
$(MKLDEXPORT) $(stlib) $(shlib) >$(exports_file)
|
||||
else
|
||||
( echo '#! $(shlib)'; $(AWK) '/^[^#]/ {printf "%s\n",$$1}' ${srcdir}/$(SHLIB_EXPORTS) ) >$(exports_file)
|
||||
endif
|
||||
$(COMPILER) -o $(shlib) $(stlib) -Wl,-bE:$(exports_file) $(LDFLAGS) $(LDFLAGS_SL) $(SHLIB_LINK)
|
||||
rm -f $(stlib)
|
||||
$(AR) $(AROPT) $(stlib) $(shlib)
|
||||
|
||||
endif # PORTNAME == aix
|
||||
|
||||
else # PORTNAME == cygwin || PORTNAME == win32
|
||||
|
||||
ifeq ($(PORTNAME), cygwin)
|
||||
|
@ -38,9 +38,5 @@ endif
|
||||
MKLDEXPORT_DIR=src/backend/port/aix
|
||||
MKLDEXPORT=$(top_srcdir)/$(MKLDEXPORT_DIR)/mkldexport.sh
|
||||
|
||||
%.exp: %.o
|
||||
$(MKLDEXPORT) $^ >$@
|
||||
|
||||
# Rule for building a shared library from a single .o file
|
||||
%$(DLSUFFIX): %.o %.exp
|
||||
$(CC) $(CFLAGS) $*.o $(LDFLAGS) $(LDFLAGS_SL) -o $@ -Wl,-bE:$*.exp $(BE_DLLLIBS)
|
||||
%$(DLSUFFIX): %.o
|
||||
$(CC) $(CFLAGS) $*.o $(LDFLAGS) $(LDFLAGS_SL) -o $@ $(BE_DLLLIBS)
|
||||
|
Loading…
Reference in New Issue
Block a user