diff options
Diffstat (limited to 'src/backend/jit/llvm/meson.build')
-rw-r--r-- | src/backend/jit/llvm/meson.build | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/src/backend/jit/llvm/meson.build b/src/backend/jit/llvm/meson.build new file mode 100644 index 0000000..8ffaf41 --- /dev/null +++ b/src/backend/jit/llvm/meson.build @@ -0,0 +1,85 @@ +# Copyright (c) 2022-2023, PostgreSQL Global Development Group + +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 |