diff options
Diffstat (limited to 'src/port/Makefile')
-rw-r--r-- | src/port/Makefile | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/src/port/Makefile b/src/port/Makefile new file mode 100644 index 0000000..bfe1feb --- /dev/null +++ b/src/port/Makefile @@ -0,0 +1,167 @@ +#------------------------------------------------------------------------- +# +# Makefile +# Makefile for src/port +# +# These files are used by the Postgres backend, and also by frontend +# programs. Primarily, they are meant to provide portability on systems +# with broken/missing library files. +# +# This makefile generates three outputs: +# +# libpgport.a - contains object files with FRONTEND defined, +# for use by client applications +# +# libpgport_shlib.a - contains object files with FRONTEND defined, +# built suitably for use in shared libraries; for use +# by frontend libraries +# +# libpgport_srv.a - contains object files without FRONTEND defined, +# for use only by the backend +# +# LIBOBJS is set by configure (via Makefile.global) to be the list of object +# files that are conditionally needed as determined by configure's probing. +# OBJS adds additional object files that are always compiled. +# +# IDENTIFICATION +# src/port/Makefile +# +#------------------------------------------------------------------------- + +subdir = src/port +top_builddir = ../.. +include $(top_builddir)/src/Makefile.global + +override CPPFLAGS := -I$(top_builddir)/src/port -DFRONTEND $(CPPFLAGS) +LIBS += $(PTHREAD_LIBS) + +# If you add objects here, see also src/tools/msvc/Mkvcbuild.pm + +OBJS = \ + $(LIBOBJS) \ + $(PG_CRC32C_OBJS) \ + bsearch_arg.o \ + chklocale.o \ + inet_net_ntop.o \ + noblock.o \ + path.o \ + pg_bitutils.o \ + pg_strong_random.o \ + pgcheckdir.o \ + pgmkdirp.o \ + pgsleep.o \ + pgstrcasecmp.o \ + pgstrsignal.o \ + pqsignal.o \ + qsort.o \ + qsort_arg.o \ + quotes.o \ + snprintf.o \ + strerror.o \ + tar.o \ + thread.o + +# libpgport.a, libpgport_shlib.a, and libpgport_srv.a contain the same files +# foo.o, foo_shlib.o, and foo_srv.o are all built from foo.c +OBJS_SHLIB = $(OBJS:%.o=%_shlib.o) +OBJS_SRV = $(OBJS:%.o=%_srv.o) + +all: libpgport.a libpgport_shlib.a libpgport_srv.a + +# libpgport is needed by some contrib +install: all installdirs + $(INSTALL_STLIB) libpgport.a '$(DESTDIR)$(libdir)/libpgport.a' + $(INSTALL_STLIB) libpgport_shlib.a '$(DESTDIR)$(libdir)/libpgport_shlib.a' + +installdirs: + $(MKDIR_P) '$(DESTDIR)$(libdir)' + +uninstall: + rm -f '$(DESTDIR)$(libdir)/libpgport.a' + rm -f '$(DESTDIR)$(libdir)/libpgport_shlib.a' + +libpgport.a: $(OBJS) + rm -f $@ + $(AR) $(AROPT) $@ $^ + +# getaddrinfo.o and getaddrinfo_shlib.o need PTHREAD_CFLAGS (but getaddrinfo_srv.o does not) +getaddrinfo.o: CFLAGS+=$(PTHREAD_CFLAGS) +getaddrinfo_shlib.o: CFLAGS+=$(PTHREAD_CFLAGS) + +# thread.o and thread_shlib.o need PTHREAD_CFLAGS (but thread_srv.o does not) +thread.o: CFLAGS+=$(PTHREAD_CFLAGS) +thread_shlib.o: CFLAGS+=$(PTHREAD_CFLAGS) + +# all versions of pg_crc32c_sse42.o need CFLAGS_SSE42 +pg_crc32c_sse42.o: CFLAGS+=$(CFLAGS_SSE42) +pg_crc32c_sse42_shlib.o: CFLAGS+=$(CFLAGS_SSE42) +pg_crc32c_sse42_srv.o: CFLAGS+=$(CFLAGS_SSE42) + +# all versions of pg_crc32c_armv8.o need CFLAGS_ARMV8_CRC32C +pg_crc32c_armv8.o: CFLAGS+=$(CFLAGS_ARMV8_CRC32C) +pg_crc32c_armv8_shlib.o: CFLAGS+=$(CFLAGS_ARMV8_CRC32C) +pg_crc32c_armv8_srv.o: CFLAGS+=$(CFLAGS_ARMV8_CRC32C) + +# +# Shared library versions of object files +# + +libpgport_shlib.a: $(OBJS_SHLIB) + rm -f $@ + $(AR) $(AROPT) $@ $^ + +# Because this uses its own compilation rule, it doesn't use the +# dependency tracking logic from Makefile.global. To make sure that +# dependency tracking works anyway for the *_shlib.o files, depend on +# their *.o siblings as well, which do have proper dependencies. It's +# a hack that might fail someday if there is a *_shlib.o without a +# corresponding *.o, but there seems little reason for that. +%_shlib.o: %.c %.o + $(CC) $(CFLAGS) $(CFLAGS_SL) $(CPPFLAGS) -c $< -o $@ + +# +# Server versions of object files +# + +libpgport_srv.a: $(OBJS_SRV) + rm -f $@ + $(AR) $(AROPT) $@ $^ + +# Because this uses its own compilation rule, it doesn't use the +# dependency tracking logic from Makefile.global. To make sure that +# dependency tracking works anyway for the *_srv.o files, depend on +# their *.o siblings as well, which do have proper dependencies. It's +# a hack that might fail someday if there is a *_srv.o without a +# corresponding *.o, but it works for now (and those would probably go +# into src/backend/port/ anyway). +%_srv.o: %.c %.o + $(CC) $(CFLAGS) $(subst -DFRONTEND,, $(CPPFLAGS)) -c $< -o $@ + +# Dependency is to ensure that path changes propagate + +path.o: path.c pg_config_paths.h + +path_shlib.o: path.c pg_config_paths.h + +path_srv.o: path.c pg_config_paths.h + +# We create a separate file rather than put these in pg_config.h +# because many of these values come from makefiles and are not +# available to configure. +pg_config_paths.h: $(top_builddir)/src/Makefile.global + echo "#define PGBINDIR \"$(bindir)\"" >$@ + echo "#define PGSHAREDIR \"$(datadir)\"" >>$@ + echo "#define SYSCONFDIR \"$(sysconfdir)\"" >>$@ + echo "#define INCLUDEDIR \"$(includedir)\"" >>$@ + echo "#define PKGINCLUDEDIR \"$(pkgincludedir)\"" >>$@ + echo "#define INCLUDEDIRSERVER \"$(includedir_server)\"" >>$@ + echo "#define LIBDIR \"$(libdir)\"" >>$@ + echo "#define PKGLIBDIR \"$(pkglibdir)\"" >>$@ + echo "#define LOCALEDIR \"$(localedir)\"" >>$@ + echo "#define DOCDIR \"$(docdir)\"" >>$@ + echo "#define HTMLDIR \"$(htmldir)\"" >>$@ + echo "#define MANDIR \"$(mandir)\"" >>$@ + +clean distclean maintainer-clean: + rm -f libpgport.a libpgport_shlib.a libpgport_srv.a + rm -f $(OBJS) $(OBJS_SHLIB) $(OBJS_SRV) pg_config_paths.h |