summaryrefslogtreecommitdiffstats
path: root/src/backend/jit/llvm/meson.build
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/jit/llvm/meson.build')
-rw-r--r--src/backend/jit/llvm/meson.build85
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