
Per https://llvm.org/docs/OpaquePointers.html, support for non-opaque pointers still exists and we can request that on our context. We have until LLVM 16 to move to opaque pointers, a much larger change. Back-patch to 11, where LLVM support arrived. Author: Thomas Munro <thomas.munro@gmail.com> Author: Andres Freund <andres@anarazel.de> Discussion: https://postgr.es/m/CAMHz58Sf_xncdyqsekoVsNeKcruKootLtVH6cYXVhhUR1oKPCg%40mail.gmail.com
84 lines
2.0 KiB
Meson
84 lines
2.0 KiB
Meson
if not llvm.found()
|
|
subdir_done()
|
|
endif
|
|
|
|
# Build LLVM JIT backend module
|
|
|
|
llvmjit_sources = []
|
|
|
|
# Infrastructure
|
|
llvmjit_sources += files(
|
|
'llvmjit.c',
|
|
'llvmjit_error.cpp',
|
|
'llvmjit_inline.cpp',
|
|
'llvmjit_wrap.cpp',
|
|
)
|
|
|
|
# Code generation
|
|
llvmjit_sources += files(
|
|
'llvmjit_deform.c',
|
|
'llvmjit_expr.c',
|
|
)
|
|
|
|
if host_system == 'windows'
|
|
llvmjit_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
|
|
'--NAME', 'llvmjit',
|
|
'--FILEDESC', 'llvmjit - JIT using LLVM',])
|
|
endif
|
|
|
|
llvmjit = shared_module('llvmjit',
|
|
llvmjit_sources,
|
|
kwargs: pg_mod_args + {
|
|
'dependencies': pg_mod_args['dependencies'] + [llvm],
|
|
'cpp_args': pg_mod_args['cpp_args'] + llvm.get_variable(configtool: 'cxxflags').split(),
|
|
}
|
|
)
|
|
|
|
backend_targets += llvmjit
|
|
|
|
|
|
# Define a few bits and pieces used here and elsewhere to generate bitcode
|
|
|
|
llvm_irgen_args = [
|
|
'-c', '-o', '@OUTPUT@', '@INPUT@',
|
|
'-flto=thin', '-emit-llvm',
|
|
'-MD', '-MQ', '@OUTPUT@', '-MF', '@DEPFILE@',
|
|
'-O2',
|
|
'-Wno-ignored-attributes',
|
|
'-Wno-empty-body',
|
|
]
|
|
|
|
if ccache.found()
|
|
llvm_irgen_command = ccache
|
|
llvm_irgen_args = [clang.path()] + llvm_irgen_args
|
|
else
|
|
llvm_irgen_command = clang
|
|
endif
|
|
|
|
|
|
# XXX: Need to determine proper version of the function cflags for clang
|
|
bitcode_cflags = ['-fno-strict-aliasing', '-fwrapv']
|
|
if llvm.version().version_compare('>=15.0')
|
|
bitcode_cflags += ['-Xclang', '-no-opaque-pointers']
|
|
endif
|
|
bitcode_cflags += cppflags
|
|
|
|
# XXX: Worth improving on the logic to find directories here
|
|
bitcode_cflags += '-I@BUILD_ROOT@/src/include'
|
|
bitcode_cflags += '-I@BUILD_ROOT@/src/backend/utils/misc'
|
|
bitcode_cflags += '-I@SOURCE_ROOT@/src/include'
|
|
|
|
|
|
# Note this is intentionally not installed to bitcodedir, as it's not for
|
|
# inlining
|
|
llvmjit_types = custom_target('llvmjit_types.bc',
|
|
command: [llvm_irgen_command] + llvm_irgen_args + bitcode_cflags,
|
|
input: 'llvmjit_types.c',
|
|
output: 'llvmjit_types.bc',
|
|
depends: [postgres],
|
|
install: true,
|
|
install_dir: dir_lib_pkg,
|
|
depfile: '@BASENAME@.c.bc.d',
|
|
)
|
|
backend_targets += llvmjit_types
|