mirror of
https://git.postgresql.org/git/postgresql.git
synced 2026-02-20 13:27:00 +08:00
This commit introduces the ability to actually generate code using LLVM. In particular, this adds: - Ability to emit code both in heavily optimized and largely unoptimized fashion - Batching facility to allow functions to be defined in small increments, but optimized and emitted in executable form in larger batches (for performance and memory efficiency) - Type and function declaration synchronization between runtime generated code and normal postgres code. This is critical to be able to access struct fields etc. - Developer oriented jit_dump_bitcode GUC, for inspecting / debugging the generated code. - per JitContext statistics of number of functions, time spent generating code, optimizing, and emitting it. This will later be employed for EXPLAIN support. This commit doesn't yet contain any code actually generating functions. That'll follow in later commits. Documentation for GUCs added, and for JIT in general, will be added in later commits. Author: Andres Freund, with contributions by Pierre Ducroquet Testing-By: Thomas Munro, Peter Eisentraut Discussion: https://postgr.es/m/20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de
50 lines
1.3 KiB
Makefile
50 lines
1.3 KiB
Makefile
#
|
|
# Common make rules for backend
|
|
#
|
|
# src/backend/common.mk
|
|
#
|
|
|
|
# When including this file, set OBJS to the object files created in
|
|
# this directory and SUBDIRS to subdirectories containing more things
|
|
# to build.
|
|
|
|
ifdef PARTIAL_LINKING
|
|
# old style: linking using SUBSYS.o
|
|
subsysfilename = SUBSYS.o
|
|
else
|
|
# new style: linking all object files at once
|
|
subsysfilename = objfiles.txt
|
|
endif
|
|
|
|
SUBDIROBJS = $(SUBDIRS:%=%/$(subsysfilename))
|
|
|
|
# top-level backend directory obviously has its own "all" target
|
|
ifneq ($(subdir), src/backend)
|
|
all: $(subsysfilename)
|
|
endif
|
|
|
|
SUBSYS.o: $(SUBDIROBJS) $(OBJS)
|
|
$(LD) $(LDREL) $(LDOUT) $@ $^
|
|
|
|
objfiles.txt: Makefile $(SUBDIROBJS) $(OBJS)
|
|
# Don't rebuild the list if only the OBJS have changed.
|
|
$(if $(filter-out $(OBJS),$?),( $(if $(SUBDIROBJS),cat $(SUBDIROBJS); )echo $(addprefix $(subdir)/,$(OBJS)) ) >$@,touch $@)
|
|
|
|
# make function to expand objfiles.txt contents
|
|
expand_subsys = $(foreach file,$(1),$(if $(filter %/objfiles.txt,$(file)),$(patsubst ../../src/backend/%,%,$(addprefix $(top_builddir)/,$(shell cat $(file)))),$(file)))
|
|
|
|
# Parallel make trickery
|
|
$(SUBDIROBJS): $(SUBDIRS:%=%-recursive) ;
|
|
|
|
.PHONY: $(SUBDIRS:%=%-recursive)
|
|
$(SUBDIRS:%=%-recursive):
|
|
$(MAKE) -C $(subst -recursive,,$@) all
|
|
|
|
$(call recurse,clean)
|
|
clean: clean-local
|
|
clean-local:
|
|
rm -f $(subsysfilename) $(OBJS)
|
|
|
|
$(call recurse,coverage)
|
|
$(call recurse,install)
|