mirror of
https://github.com/postgres/postgres.git
synced 2025-11-07 19:06:32 +03:00
There isn't a lot of user demand for AIX support, we have a bunch of
hacks to work around AIX-specific compiler bugs and idiosyncrasies,
and no one has stepped up to the plate to properly maintain it.
Remove support for AIX to get rid of that maintenance overhead. It's
still supported for stable versions.
The acute issue that triggered this decision was that after commit
8af2565248, the AIX buildfarm members have been hitting this
assertion:
TRAP: failed Assert("(uintptr_t) buffer == TYPEALIGN(PG_IO_ALIGN_SIZE, buffer)"), File: "md.c", Line: 472, PID: 2949728
Apperently the "pg_attribute_aligned(a)" attribute doesn't work on AIX
for values larger than PG_IO_ALIGN_SIZE, for a static const variable.
That could be worked around, but we decided to just drop the AIX support
instead.
Discussion: https://www.postgresql.org/message-id/20240224172345.32@rfd.leadboat.com
Reviewed-by: Andres Freund, Noah Misch, Thomas Munro
199 lines
6.0 KiB
Meson
199 lines
6.0 KiB
Meson
# Copyright (c) 2022-2024, PostgreSQL Global Development Group
|
|
|
|
backend_build_deps = [backend_code]
|
|
backend_sources = []
|
|
backend_link_with = [pgport_srv, common_srv]
|
|
|
|
generated_backend_sources = []
|
|
post_export_backend_sources = []
|
|
|
|
subdir('access')
|
|
subdir('archive')
|
|
subdir('backup')
|
|
subdir('bootstrap')
|
|
subdir('catalog')
|
|
subdir('commands')
|
|
subdir('executor')
|
|
subdir('foreign')
|
|
subdir('jit')
|
|
subdir('lib')
|
|
subdir('libpq')
|
|
subdir('main')
|
|
subdir('nodes')
|
|
subdir('optimizer')
|
|
subdir('parser')
|
|
subdir('partitioning')
|
|
subdir('port')
|
|
subdir('postmaster')
|
|
subdir('regex')
|
|
subdir('replication')
|
|
subdir('rewrite')
|
|
subdir('statistics')
|
|
subdir('storage')
|
|
subdir('tcop')
|
|
subdir('tsearch')
|
|
subdir('utils')
|
|
|
|
subdir('po', if_found: libintl)
|
|
|
|
|
|
backend_link_args = []
|
|
backend_link_depends = []
|
|
|
|
|
|
# On windows when compiling with msvc we need to make postgres export all its
|
|
# symbols so that extension libraries can use them. For that we need to scan
|
|
# the constituting objects and generate a file specifying all the functions as
|
|
# exported (variables need an "import" declaration in the header, hence
|
|
# PGDLLEXPORT, but functions work without that, due to import libraries
|
|
# basically being trampolines).
|
|
#
|
|
# For dtrace probes we need to invoke dtrace on all input files, before
|
|
# linking the final executable (see more below).
|
|
#
|
|
#
|
|
# On meson there's currently no easy way to do this that I found. So we build
|
|
# a static library with all the input objects, run our script to generate
|
|
# exports, and build the final executable using that static library
|
|
#
|
|
# We could do that only if either dtrace or msvc is in use, but it seems
|
|
# easier to just always do so.
|
|
#
|
|
# Can't name the static library 'postgres', because msbuild ends up with a
|
|
# conflict for the .pdb file otherwise.
|
|
|
|
postgres_lib = static_library('postgres_lib',
|
|
backend_sources + timezone_sources + generated_backend_sources,
|
|
link_whole: backend_link_with,
|
|
dependencies: backend_build_deps,
|
|
c_pch: pch_postgres_h,
|
|
kwargs: internal_lib_args,
|
|
)
|
|
|
|
if cc.get_id() == 'msvc'
|
|
postgres_def = custom_target('postgres.def',
|
|
command: [perl, files('../tools/msvc_gendef.pl'),
|
|
'--arch', host_cpu,
|
|
'--tempdir', '@PRIVATE_DIR@',
|
|
'--deffile', '@OUTPUT@',
|
|
'@INPUT@'],
|
|
input: [postgres_lib, common_srv, pgport_srv],
|
|
output: 'postgres.def',
|
|
depends: [postgres_lib, common_srv, pgport_srv],
|
|
install: false,
|
|
build_by_default: false,
|
|
)
|
|
|
|
backend_link_args += '/DEF:@0@'.format(postgres_def.full_path())
|
|
backend_link_depends += postgres_def
|
|
# Due to the way msvc and meson's precompiled headers implementation
|
|
# interact, we need to have symbols from the full library available. Could
|
|
# be restricted to b_pch=true.
|
|
backend_link_with += postgres_lib
|
|
|
|
endif
|
|
|
|
backend_input = []
|
|
backend_objs = [postgres_lib.extract_all_objects(recursive: false)]
|
|
|
|
# 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.
|
|
#
|
|
# On at least linux we don't actually need to pass in all the objects, but
|
|
# at least on FreeBSD and Solaris we have to.
|
|
#
|
|
# XXX: The reason we don't use the objects for generated sources is that doing
|
|
# so is not supported in older meson versions. Luckily we don't have probes in
|
|
# generated sources...
|
|
if dtrace.found() and host_system != 'darwin'
|
|
backend_input += custom_target(
|
|
'probes.o',
|
|
input: ['utils/probes.d', postgres_lib.extract_objects(backend_sources, timezone_sources)],
|
|
output: 'probes.o',
|
|
command: [dtrace, '-C', '-G', '-o', '@OUTPUT@', '-s', '@INPUT@'],
|
|
install: false,
|
|
)
|
|
endif
|
|
|
|
if host_system == 'windows'
|
|
post_export_backend_sources += rc_bin_gen.process(win32ver_rc, extra_args: [
|
|
'--NAME', 'postgres',
|
|
'--FILEDESC', 'PostgreSQL Server',])
|
|
endif
|
|
|
|
postgres = executable('postgres',
|
|
backend_input,
|
|
sources: post_export_backend_sources,
|
|
objects: backend_objs,
|
|
link_args: backend_link_args,
|
|
link_with: backend_link_with,
|
|
link_depends: backend_link_depends,
|
|
export_dynamic: true,
|
|
implib: true,
|
|
dependencies: backend_build_deps,
|
|
kwargs: default_bin_args,
|
|
)
|
|
|
|
backend_targets += postgres
|
|
|
|
pg_mod_c_args = cflags_mod
|
|
pg_mod_cpp_args = cxxflags_mod
|
|
pg_mod_link_args = ldflags_sl + ldflags_mod
|
|
pg_mod_link_depend = []
|
|
|
|
# A few platforms like MacOS and Windows link shared modules against postgres,
|
|
# or a [import] library derived from it. Set up the link flags for that.
|
|
if mod_link_args_fmt.length() > 0
|
|
# To avoid unnecessary build-time dependencies on other operating systems,
|
|
# only add the dependency when necessary.
|
|
pg_mod_link_depend += postgres
|
|
|
|
name = mod_link_with_name.format('postgres')
|
|
link_with_uninst = meson.current_build_dir() / name
|
|
link_with_inst = '${@0@}/@1@'.format(mod_link_with_dir, name)
|
|
|
|
foreach el : mod_link_args_fmt
|
|
pg_mod_link_args += el.format(link_with_uninst)
|
|
endforeach
|
|
endif
|
|
|
|
|
|
# Note there's intentionally no dependency on pgport/common here - we want the
|
|
# symbols from the main binary for extension modules, rather than the
|
|
# extension linking separately to pgport/common.
|
|
backend_mod_code = declare_dependency(
|
|
compile_args: pg_mod_c_args,
|
|
include_directories: postgres_inc,
|
|
link_args: pg_mod_link_args,
|
|
sources: generated_headers + generated_backend_headers,
|
|
dependencies: backend_mod_deps,
|
|
)
|
|
|
|
# normal extension modules
|
|
pg_mod_args = default_mod_args + {
|
|
'dependencies': [backend_mod_code],
|
|
'cpp_args': pg_mod_cpp_args,
|
|
'link_depends': pg_mod_link_depend,
|
|
}
|
|
|
|
# extension modules that shouldn't be installed by default, as they're only
|
|
# for testing
|
|
pg_test_mod_args = pg_mod_args + {
|
|
'install': false
|
|
}
|
|
|
|
|
|
|
|
# Shared modules that, on some system, link against the server binary. Only
|
|
# enter these after we defined the server build.
|
|
|
|
subdir('jit/llvm')
|
|
subdir('replication/libpqwalreceiver')
|
|
subdir('replication/pgoutput')
|
|
subdir('snowball')
|
|
subdir('utils/mb/conversion_procs')
|