You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudberry.apache.org by av...@apache.org on 2026/06/03 15:49:52 UTC
(cloudberry) 07/11: macOS: build the standalone libpaxformat reader
This is an automated email from the ASF dual-hosted git repository.
avamingli pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry.git
commit 3917609c704e618ee60dd8f1c4093dc292f342a7
Author: Zhang Mingli <av...@gmail.com>
AuthorDate: Thu May 28 18:38:39 2026 +0800
macOS: build the standalone libpaxformat reader
paxformat is the standalone PAX file reader meant to be linked by
external tools. The previous commit 'macOS: PAX cmake portability'
skipped it on APPLE because it references PG backend functions
(write_stderr, xlog_check_consistency_hook, ...) that have no
libpostgres.so to satisfy them on macOS.
Build it after all by deferring those undefined symbols to load time
with -Wl,-undefined,dynamic_lookup, just like Linux's default ld
behaviour for shared libraries. The smoke-test executable
paxformat_test uses the same flag and drops the explicit 'postgres'
link library (there is no libpostgres.so to link against on macOS).
paxformat is a regular dylib (SHARED) here — not a bundle — because
the test executable links against it at link time.
---
contrib/pax_storage/src/cpp/CMakeLists.txt | 10 ++--------
contrib/pax_storage/src/cpp/cmake/pax_format.cmake | 22 ++++++++++++++++++++--
2 files changed, 22 insertions(+), 10 deletions(-)
diff --git a/contrib/pax_storage/src/cpp/CMakeLists.txt b/contrib/pax_storage/src/cpp/CMakeLists.txt
index c49473e5d12..0a36374a08d 100644
--- a/contrib/pax_storage/src/cpp/CMakeLists.txt
+++ b/contrib/pax_storage/src/cpp/CMakeLists.txt
@@ -48,13 +48,7 @@ add_custom_target(generate_protobuf DEPENDS ${PROTO_SRCS} ${PROTO_HDRS})
link_directories($ENV{GPHOME}/lib)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
-## build pax_format.so — standalone reader lib used by external tools.
-## On macOS it would need -undefined dynamic_lookup to resolve PG symbols
-## (write_stderr, xlog_check_consistency_hook, ...). Skip for now; pax.so
-## itself (the in-backend extension) still builds and is enough to run
-## the demo cluster with `USING pax` tables.
-if(NOT APPLE)
- include(pax_format)
-endif()
+## build pax_format.so — standalone PAX reader used by external tools.
+include(pax_format)
## build pax.so
include(pax)
diff --git a/contrib/pax_storage/src/cpp/cmake/pax_format.cmake b/contrib/pax_storage/src/cpp/cmake/pax_format.cmake
index 1c06dacf9d4..de9c640f3f0 100644
--- a/contrib/pax_storage/src/cpp/cmake/pax_format.cmake
+++ b/contrib/pax_storage/src/cpp/cmake/pax_format.cmake
@@ -155,9 +155,18 @@ add_library(paxformat SHARED ${PROTO_SRCS} ${pax_storage_src} ${pax_clustering_s
target_include_directories(paxformat PUBLIC ${pax_target_include})
target_link_directories(paxformat PUBLIC ${pax_target_link_directories})
target_link_libraries(paxformat PRIVATE ${pax_target_link_libs})
-
+
set_target_properties(paxformat PROPERTIES
OUTPUT_NAME paxformat)
+if(APPLE)
+ # PAX C++ code calls PG backend functions (write_stderr,
+ # xlog_check_consistency_hook, ...). On Linux ld defers unresolved
+ # references in .so; macOS ld rejects them unless told otherwise.
+ # Defer them to load time so paxformat is usable wherever PG symbols
+ # are provided.
+ set_target_properties(paxformat PROPERTIES
+ LINK_FLAGS "-Wl,-undefined,dynamic_lookup")
+endif()
add_dependencies(paxformat generate_protobuf)
# export headers
@@ -215,4 +224,13 @@ install(TARGETS paxformat
add_executable(paxformat_test paxformat_test.cc)
target_include_directories(paxformat_test PUBLIC ${pax_target_include} ${CMAKE_CURRENT_SOURCE_DIR})
add_dependencies(paxformat_test paxformat)
-target_link_libraries(paxformat_test PRIVATE paxformat postgres)
+if(APPLE)
+ # No libpostgres.so to link against on macOS; defer PG symbols to
+ # load time. The test still validates that paxformat itself is a
+ # complete dylib.
+ target_link_libraries(paxformat_test PRIVATE paxformat)
+ set_target_properties(paxformat_test PROPERTIES
+ LINK_FLAGS "-Wl,-undefined,dynamic_lookup")
+else()
+ target_link_libraries(paxformat_test PRIVATE paxformat postgres)
+endif()
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org