diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 13:44:03 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 13:44:03 +0000 |
commit | 293913568e6a7a86fd1479e1cff8e2ecb58d6568 (patch) | |
tree | fc3b469a3ec5ab71b36ea97cc7aaddb838423a0c /src/backend/Makefile | |
parent | Initial commit. (diff) | |
download | postgresql-16-293913568e6a7a86fd1479e1cff8e2ecb58d6568.tar.xz postgresql-16-293913568e6a7a86fd1479e1cff8e2ecb58d6568.zip |
Adding upstream version 16.2.upstream/16.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/backend/Makefile')
-rw-r--r-- | src/backend/Makefile | 318 |
1 files changed, 318 insertions, 0 deletions
diff --git a/src/backend/Makefile b/src/backend/Makefile new file mode 100644 index 0000000..3c42003 --- /dev/null +++ b/src/backend/Makefile @@ -0,0 +1,318 @@ +#------------------------------------------------------------------------- +# +# Makefile for the postgres backend +# +# Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group +# Portions Copyright (c) 1994, Regents of the University of California +# +# src/backend/Makefile +# +#------------------------------------------------------------------------- + +PGFILEDESC = "PostgreSQL Server" +PGAPPICON=win32 + +subdir = src/backend +top_builddir = ../.. +include $(top_builddir)/src/Makefile.global + +SUBDIRS = access archive backup bootstrap catalog parser commands executor \ + foreign lib libpq \ + main nodes optimizer partitioning port postmaster \ + regex replication rewrite \ + statistics storage tcop tsearch utils $(top_builddir)/src/timezone \ + jit + +include $(srcdir)/common.mk + +# As of 1/2010: +# The probes.o file is necessary for dtrace support on Solaris, and on recent +# versions of systemtap. (Older systemtap releases just produce an empty +# file, but that's okay.) However, macOS's dtrace doesn't use it and doesn't +# even recognize the -G option. So, build probes.o except on macOS. +# This might need adjustment as other platforms add dtrace support. +ifneq ($(PORTNAME), darwin) +ifeq ($(enable_dtrace), yes) +LOCALOBJS += utils/probes.o +endif +endif + +OBJS = \ + $(LOCALOBJS) \ + $(SUBDIROBJS) \ + $(top_builddir)/src/common/libpgcommon_srv.a \ + $(top_builddir)/src/port/libpgport_srv.a + +# We put libpgport and libpgcommon into OBJS, so remove it from LIBS; also add +# libldap and ICU +LIBS := $(filter-out -lpgport -lpgcommon, $(LIBS)) $(LDAP_LIBS_BE) $(ICU_LIBS) + +# The backend doesn't need everything that's in LIBS, however +LIBS := $(filter-out -lreadline -ledit -ltermcap -lncurses -lcurses, $(LIBS)) + +ifeq ($(with_systemd),yes) +LIBS += -lsystemd +endif + +override LDFLAGS := $(LDFLAGS) $(LDFLAGS_EX) $(LDFLAGS_EX_BE) + +########################################################################## + +all: submake-libpgport submake-catalog-headers submake-utils-headers postgres $(POSTGRES_IMP) + +ifneq ($(PORTNAME), cygwin) +ifneq ($(PORTNAME), win32) +ifneq ($(PORTNAME), aix) + +postgres: $(OBJS) + $(CC) $(CFLAGS) $(call expand_subsys,$^) $(LDFLAGS) $(LIBS) -o $@ + +endif +endif +endif + +ifeq ($(PORTNAME), cygwin) + +postgres: $(OBJS) + $(CC) $(CFLAGS) $(call expand_subsys,$^) $(LDFLAGS) -Wl,--stack,$(WIN32_STACK_RLIMIT) -Wl,--export-all-symbols -Wl,--out-implib=libpostgres.a $(LIBS) -o $@ + +# libpostgres.a is actually built in the preceding rule, but we need this to +# ensure it's newer than postgres; see notes in src/backend/parser/Makefile +libpostgres.a: postgres + touch $@ + +endif # cygwin + +ifeq ($(PORTNAME), win32) +LIBS += -lsecur32 + +postgres: $(OBJS) $(WIN32RES) + $(CC) $(CFLAGS) $(call expand_subsys,$(OBJS)) $(WIN32RES) $(LDFLAGS) -Wl,--stack=$(WIN32_STACK_RLIMIT) -Wl,--export-all-symbols -Wl,--out-implib=libpostgres.a $(LIBS) -o $@$(X) + +# libpostgres.a is actually built in the preceding rule, but we need this to +# ensure it's newer than postgres; see notes in src/backend/parser/Makefile +libpostgres.a: postgres + touch $@ + +endif # win32 + +ifeq ($(PORTNAME), aix) + +postgres: $(POSTGRES_IMP) + $(CC) $(CFLAGS) $(call expand_subsys,$(OBJS)) $(LDFLAGS) -Wl,-bE:$(top_builddir)/src/backend/$(POSTGRES_IMP) $(LIBS) -Wl,-brtllib -o $@ + +# Linking to a single .o with -r is a lot faster than building a .a or passing +# all objects to MKLDEXPORT. +# +# It looks alluring to use $(CC) -r instead of ld -r, but that doesn't +# trivially work with gcc, due to gcc specific static libraries linked in with +# -r. +$(POSTGRES_IMP): $(OBJS) + ld -r -o SUBSYS.o $(call expand_subsys,$^) + $(MKLDEXPORT) SUBSYS.o . > $@ + @rm -f SUBSYS.o + +endif # aix + +$(top_builddir)/src/port/libpgport_srv.a: | submake-libpgport + + +# The following targets are specified in make commands that appear in +# the make files in our subdirectories. Note that it's important we +# match the dependencies shown in the subdirectory makefiles! +# Also, in cases where a subdirectory makefile generates two files in +# what's really one step, such as bison producing both gram.h and gram.c, +# we must request making the one that is shown as the secondary (dependent) +# output, else the timestamp on it might be wrong. By project convention, +# the .h file is the dependent one for bison output, so we need only request +# that; but in other cases, request both for safety. + +parser/gram.h: parser/gram.y + $(MAKE) -C parser gram.h + +storage/lmgr/lwlocknames.h: storage/lmgr/generate-lwlocknames.pl storage/lmgr/lwlocknames.txt + $(MAKE) -C storage/lmgr lwlocknames.h lwlocknames.c + +# run this unconditionally to avoid needing to know its dependencies here: +submake-catalog-headers: + $(MAKE) -C catalog distprep generated-header-symlinks + +# run this unconditionally to avoid needing to know its dependencies here: +submake-nodes-headers: + $(MAKE) -C nodes distprep generated-header-symlinks + +# run this unconditionally to avoid needing to know its dependencies here: +submake-utils-headers: + $(MAKE) -C utils distprep generated-header-symlinks + +.PHONY: submake-catalog-headers submake-nodes-headers submake-utils-headers + +# Make symlinks for these headers in the include directory. That way +# we can cut down on the -I options. Also, a symlink is automatically +# up to date when we update the base file. +# +# The point of the prereqdir incantation in some of the rules below is to +# force the symlink to use an absolute path rather than a relative path. +# For headers which are generated by make distprep, the actual header within +# src/backend will be in the source tree, while the symlink in src/include +# will be in the build tree, so a simple ../.. reference won't work. +# For headers generated during regular builds, we prefer a relative symlink. + +.PHONY: generated-headers + +generated-headers: $(top_builddir)/src/include/storage/lwlocknames.h submake-catalog-headers submake-nodes-headers submake-utils-headers + +$(top_builddir)/src/include/storage/lwlocknames.h: storage/lmgr/lwlocknames.h + prereqdir=`cd '$(dir $<)' >/dev/null && pwd` && \ + cd '$(dir $@)' && rm -f $(notdir $@) && \ + $(LN_S) "$$prereqdir/$(notdir $<)" . + +utils/probes.o: utils/probes.d $(SUBDIROBJS) + $(DTRACE) $(DTRACEFLAGS) -C -G -s $(call expand_subsys,$^) -o $@ + + +########################################################################## + +# Be sure that these files get removed by the maintainer-clean target +distprep: + $(MAKE) -C parser gram.c gram.h scan.c + $(MAKE) -C bootstrap bootparse.c bootparse.h bootscanner.c + $(MAKE) -C catalog distprep + $(MAKE) -C nodes distprep + $(MAKE) -C replication repl_gram.c repl_gram.h repl_scanner.c syncrep_gram.c syncrep_gram.h syncrep_scanner.c + $(MAKE) -C storage/lmgr lwlocknames.h lwlocknames.c + $(MAKE) -C utils distprep + $(MAKE) -C utils/adt jsonpath_gram.c jsonpath_gram.h jsonpath_scan.c + $(MAKE) -C utils/misc guc-file.c + + +########################################################################## + +install: all installdirs install-bin +ifeq ($(PORTNAME), cygwin) +ifeq ($(MAKE_DLL), true) + $(INSTALL_DATA) libpostgres.a '$(DESTDIR)$(libdir)/libpostgres.a' +endif +endif +ifeq ($(PORTNAME), win32) +ifeq ($(MAKE_DLL), true) + $(INSTALL_DATA) libpostgres.a '$(DESTDIR)$(libdir)/libpostgres.a' +endif +endif + $(MAKE) -C catalog install-data + $(MAKE) -C tsearch install-data + $(MAKE) -C utils install-data + $(INSTALL_DATA) $(srcdir)/libpq/pg_hba.conf.sample '$(DESTDIR)$(datadir)/pg_hba.conf.sample' + $(INSTALL_DATA) $(srcdir)/libpq/pg_ident.conf.sample '$(DESTDIR)$(datadir)/pg_ident.conf.sample' + $(INSTALL_DATA) $(srcdir)/utils/misc/postgresql.conf.sample '$(DESTDIR)$(datadir)/postgresql.conf.sample' + +ifeq ($(with_llvm), yes) +install-bin: install-postgres-bitcode + +install-postgres-bitcode: $(OBJS) all + $(call install_llvm_module,postgres,$(call expand_subsys, $(filter-out $(top_builddir)/src/timezone/objfiles.txt, $(SUBDIROBJS)))) +endif + +install-bin: postgres $(POSTGRES_IMP) installdirs + $(INSTALL_PROGRAM) postgres$(X) '$(DESTDIR)$(bindir)/postgres$(X)' +ifeq ($(MAKE_EXPORTS), true) + $(INSTALL_DATA) $(POSTGRES_IMP) '$(DESTDIR)$(pkglibdir)/$(POSTGRES_IMP)' + $(INSTALL_PROGRAM) $(MKLDEXPORT) '$(DESTDIR)$(pgxsdir)/$(MKLDEXPORT_DIR)/mkldexport.sh' +endif + +.PHONY: install-bin + +installdirs: + $(MKDIR_P) '$(DESTDIR)$(bindir)' '$(DESTDIR)$(datadir)' +ifeq ($(PORTNAME), cygwin) +ifeq ($(MAKE_DLL), true) + $(MKDIR_P) '$(DESTDIR)$(libdir)' +endif +endif +ifeq ($(PORTNAME), win32) +ifeq ($(MAKE_DLL), true) + $(MKDIR_P) '$(DESTDIR)$(libdir)' +endif +endif +ifeq ($(MAKE_EXPORTS), true) + $(MKDIR_P) '$(DESTDIR)$(pkglibdir)' + $(MKDIR_P) '$(DESTDIR)$(pgxsdir)/$(MKLDEXPORT_DIR)' +endif + + +########################################################################## + +uninstall: + rm -f '$(DESTDIR)$(bindir)/postgres$(X)' +ifeq ($(MAKE_EXPORTS), true) + rm -f '$(DESTDIR)$(pkglibdir)/$(POSTGRES_IMP)' + rm -f '$(DESTDIR)$(pgxsdir)/$(MKLDEXPORT_DIR)/mkldexport.sh' +endif +ifeq ($(PORTNAME), cygwin) +ifeq ($(MAKE_DLL), true) + rm -f '$(DESTDIR)$(libdir)/libpostgres.a' +endif +endif +ifeq ($(PORTNAME), win32) +ifeq ($(MAKE_DLL), true) + rm -f '$(DESTDIR)$(libdir)/libpostgres.a' +endif +endif + $(MAKE) -C catalog uninstall-data + $(MAKE) -C tsearch uninstall-data + $(MAKE) -C utils uninstall-data + rm -f '$(DESTDIR)$(datadir)/pg_hba.conf.sample' \ + '$(DESTDIR)$(datadir)/pg_ident.conf.sample' \ + '$(DESTDIR)$(datadir)/postgresql.conf.sample' +ifeq ($(with_llvm), yes) + $(call uninstall_llvm_module,postgres) +endif + + +########################################################################## + +clean: + rm -f $(LOCALOBJS) postgres$(X) $(POSTGRES_IMP) +ifeq ($(PORTNAME), cygwin) + rm -f postgres.dll libpostgres.a +endif +ifeq ($(PORTNAME), win32) + rm -f postgres.dll libpostgres.a $(WIN32RES) +endif + +distclean: clean + rm -f port/tas.s port/pg_sema.c port/pg_shmem.c + +maintainer-clean: distclean + $(MAKE) -C catalog $@ + $(MAKE) -C nodes $@ + $(MAKE) -C utils $@ + rm -f bootstrap/bootparse.c \ + bootstrap/bootparse.h \ + bootstrap/bootscanner.c \ + parser/gram.c \ + parser/gram.h \ + parser/scan.c \ + replication/repl_gram.c \ + replication/repl_gram.h \ + replication/repl_scanner.c \ + replication/syncrep_gram.c \ + replication/syncrep_gram.h \ + replication/syncrep_scanner.c \ + storage/lmgr/lwlocknames.c \ + storage/lmgr/lwlocknames.h \ + utils/adt/jsonpath_gram.c \ + utils/adt/jsonpath_gram.h \ + utils/adt/jsonpath_scan.c \ + utils/misc/guc-file.c + + +########################################################################## +# +# Support for code development. +# +# Use target "quick" to build "postgres" when you know all the subsystems +# are up to date. It saves the time of doing all the submakes. +.PHONY: quick +quick: $(OBJS) + $(CC) $(CFLAGS) $(call expand_subsys,$^) $(LDFLAGS) $(LIBS) -o postgres |