Skip to content

Commit 3cb4556

Browse files
authored
Merge branch 'main' into codex/fix-paimon-package-config
2 parents f614e77 + 6dffe8a commit 3cb4556

38 files changed

Lines changed: 407 additions & 236 deletions

CMakeLists.txt

Lines changed: 50 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ option(PAIMON_ENABLE_LANCE "Whether to enable lance file format" OFF)
5454
option(PAIMON_ENABLE_JINDO "Whether to enable jindo file system" OFF)
5555
option(PAIMON_ENABLE_LUMINA "Whether to enable lumina vector index" OFF)
5656
option(PAIMON_ENABLE_LUCENE "Whether to enable lucene index" OFF)
57-
5857
if(PAIMON_ENABLE_ORC)
5958
add_definitions(-DPAIMON_ENABLE_ORC)
6059
endif()
@@ -296,8 +295,6 @@ if(PAIMON_ENABLE_LANCE)
296295
DESTINATION ${CMAKE_INSTALL_LIBDIR})
297296
endif()
298297
299-
list(APPEND PAIMON_LINK_LIBS ${CMAKE_DL_LIBS})
300-
list(APPEND PAIMON_SHARED_INSTALL_INTERFACE_LIBS ${CMAKE_DL_LIBS})
301298
if(PAIMON_ENABLE_LUMINA)
302299
add_subdirectory(third_party/lumina EXCLUDE_FROM_ALL)
303300
link_directories(third_party/lumina/lib)
@@ -349,8 +346,11 @@ add_compile_definitions("GLOG_USE_GLOG_EXPORT")
349346
350347
set(THREADS_PREFER_PTHREAD_FLAG ON)
351348
find_package(Threads REQUIRED)
352-
set(PAIMON_VERSION_SCRIPT_FLAGS
353-
"-Wl,--version-script=${CMAKE_SOURCE_DIR}/src/paimon/symbols.map")
349+
set(PAIMON_VERSION_SCRIPT_FLAGS)
350+
if(NOT APPLE)
351+
set(PAIMON_VERSION_SCRIPT_FLAGS
352+
"-Wl,--version-script=${CMAKE_SOURCE_DIR}/src/paimon/symbols.map")
353+
endif()
354354
355355
set(ENV{PAIMON_TEST_DATA} "${CMAKE_SOURCE_DIR}/test/test_data")
356356
@@ -378,47 +378,66 @@ if(PAIMON_BUILD_TESTS)
378378
include_directories(SYSTEM ${GTEST_INCLUDE_DIR})
379379
include_directories("${CMAKE_SOURCE_DIR}/test/")
380380
381-
set(TEST_STATIC_LINK_LIBS
382-
"-Wl,--whole-archive"
381+
paimon_link_libraries_whole_archive(
382+
TEST_WHOLE_ARCHIVE_LINK_LIBS
383383
paimon_file_index_static
384384
paimon_global_index_static
385385
paimon_local_file_system_static
386-
paimon_mock_file_format_static
387-
"-Wl,--no-whole-archive"
388-
"-Wl,--no-as-needed"
389-
paimon_parquet_file_format_shared
390-
paimon_blob_file_format_shared
391-
"-Wl,--as-needed")
386+
paimon_mock_file_format_static)
387+
paimon_link_libraries_no_as_needed(
388+
TEST_PLUGIN_LINK_LIBS paimon_parquet_file_format_shared
389+
paimon_blob_file_format_shared)
390+
set(TEST_STATIC_LINK_LIBS ${TEST_WHOLE_ARCHIVE_LINK_LIBS} ${TEST_PLUGIN_LINK_LIBS})
391+
paimon_link_libraries_whole_archive(PAIMON_LOCAL_FILE_SYSTEM_STATIC_LINK_LIBS
392+
paimon_local_file_system_static)
393+
paimon_link_libraries_no_as_needed(PAIMON_LOCAL_FILE_SYSTEM_SHARED_LINK_LIBS
394+
paimon_local_file_system_shared)
395+
paimon_link_libraries_whole_archive(PAIMON_BLOB_FILE_FORMAT_STATIC_LINK_LIBS
396+
paimon_blob_file_format_static)
397+
paimon_link_libraries_whole_archive(PAIMON_PARQUET_FILE_FORMAT_STATIC_LINK_LIBS
398+
paimon_parquet_file_format_static)
392399
393400
if(PAIMON_ENABLE_LANCE)
394-
list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--no-as-needed")
395-
list(APPEND TEST_STATIC_LINK_LIBS paimon_lance_file_format_shared)
396-
list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--as-needed")
401+
paimon_link_libraries_whole_archive(PAIMON_LANCE_FILE_FORMAT_STATIC_LINK_LIBS
402+
paimon_lance_file_format_static)
403+
paimon_link_libraries_no_as_needed(TEST_PLUGIN_LINK_LIBS
404+
paimon_lance_file_format_shared)
405+
list(APPEND TEST_STATIC_LINK_LIBS ${TEST_PLUGIN_LINK_LIBS})
397406
endif()
398407
if(PAIMON_ENABLE_ORC)
399-
list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--no-as-needed")
400-
list(APPEND TEST_STATIC_LINK_LIBS paimon_orc_file_format_shared)
401-
list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--as-needed")
408+
paimon_link_libraries_whole_archive(PAIMON_ORC_FILE_FORMAT_STATIC_LINK_LIBS
409+
paimon_orc_file_format_static)
410+
paimon_link_libraries_no_as_needed(TEST_PLUGIN_LINK_LIBS
411+
paimon_orc_file_format_shared)
412+
list(APPEND TEST_STATIC_LINK_LIBS ${TEST_PLUGIN_LINK_LIBS})
402413
endif()
403414
if(PAIMON_ENABLE_AVRO)
404-
list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--no-as-needed")
405-
list(APPEND TEST_STATIC_LINK_LIBS paimon_avro_file_format_shared)
406-
list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--as-needed")
415+
paimon_link_libraries_whole_archive(PAIMON_AVRO_FILE_FORMAT_STATIC_LINK_LIBS
416+
paimon_avro_file_format_static)
417+
paimon_link_libraries_no_as_needed(TEST_PLUGIN_LINK_LIBS
418+
paimon_avro_file_format_shared)
419+
list(APPEND TEST_STATIC_LINK_LIBS ${TEST_PLUGIN_LINK_LIBS})
407420
endif()
408421
if(PAIMON_ENABLE_JINDO)
409-
list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--no-as-needed")
410-
list(APPEND TEST_STATIC_LINK_LIBS paimon_jindo_file_system_shared)
411-
list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--as-needed")
422+
paimon_link_libraries_whole_archive(PAIMON_JINDO_FILE_SYSTEM_STATIC_LINK_LIBS
423+
paimon_jindo_file_system_static)
424+
paimon_link_libraries_no_as_needed(TEST_PLUGIN_LINK_LIBS
425+
paimon_jindo_file_system_shared)
426+
list(APPEND TEST_STATIC_LINK_LIBS ${TEST_PLUGIN_LINK_LIBS})
412427
endif()
413428
if(PAIMON_ENABLE_LUMINA)
414-
list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--no-as-needed")
415-
list(APPEND TEST_STATIC_LINK_LIBS paimon_lumina_index_shared)
416-
list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--as-needed")
429+
paimon_link_libraries_whole_archive(PAIMON_LUMINA_INDEX_STATIC_LINK_LIBS
430+
paimon_lumina_index_static)
431+
paimon_link_libraries_no_as_needed(TEST_PLUGIN_LINK_LIBS
432+
paimon_lumina_index_shared)
433+
list(APPEND TEST_STATIC_LINK_LIBS ${TEST_PLUGIN_LINK_LIBS})
417434
endif()
418435
if(PAIMON_ENABLE_LUCENE)
419-
list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--no-as-needed")
420-
list(APPEND TEST_STATIC_LINK_LIBS paimon_lucene_index_shared)
421-
list(APPEND TEST_STATIC_LINK_LIBS "-Wl,--as-needed")
436+
paimon_link_libraries_whole_archive(PAIMON_LUCENE_INDEX_STATIC_LINK_LIBS
437+
paimon_lucene_index_static)
438+
paimon_link_libraries_no_as_needed(TEST_PLUGIN_LINK_LIBS
439+
paimon_lucene_index_shared)
440+
list(APPEND TEST_STATIC_LINK_LIBS ${TEST_PLUGIN_LINK_LIBS})
422441
endif()
423442
endif()
424443

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ Paimon C++ is a high-performance C++ implementation of [Apache Paimon](https://p
3636
- **Compatibility**: compatibility with Apache Paimon Java format and communication protocols,
3737
including commit messages, data splits, and manifests.
3838

39-
Note: The current implementation only supports the x86_64 architecture.
39+
Note: Linux x86_64 and macOS arm64 builds are currently verified.
4040

4141
## Write And Commit Example
4242

build_support/asan_symbolize.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/usr/bin/env python
1+
#!/usr/bin/env python3
22
#===- lib/asan/scripts/asan_symbolize.py -----------------------------------===#
33
#
44
# The LLVM Compiler Infrastructure

build_support/iwyu/iwyu.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ affected_files() {
4747
include-what-you-use --version
4848

4949
if [[ "${1:-}" == "all" ]]; then
50-
python $ROOT/build_support/iwyu/iwyu_tool.py -p ${IWYU_COMPILATION_DATABASE_PATH:-.} \
50+
${PYTHON:-python3} $ROOT/build_support/iwyu/iwyu_tool.py -p ${IWYU_COMPILATION_DATABASE_PATH:-.} \
5151
-- $IWYU_ARGS
5252
#| awk -f $ROOT/build_support/iwyu/iwyu-filter.awk
5353
elif [[ "${1:-}" == "match" ]]; then
@@ -60,7 +60,7 @@ elif [[ "${1:-}" == "match" ]]; then
6060
done
6161

6262
echo "Running IWYU on $IWYU_FILE_LIST"
63-
python $ROOT/build_support/iwyu/iwyu_tool.py \
63+
${PYTHON:-python3} $ROOT/build_support/iwyu/iwyu_tool.py \
6464
-p ${IWYU_COMPILATION_DATABASE_PATH:-.} $IWYU_FILE_LIST -- \
6565
$IWYU_ARGS | awk -f $ROOT/build_support/iwyu/iwyu-filter.awk
6666
else
@@ -77,7 +77,7 @@ else
7777
IWYU_FILE_LIST="$IWYU_FILE_LIST $ROOT/$p"
7878
done
7979

80-
python $ROOT/build_support/iwyu/iwyu_tool.py \
80+
${PYTHON:-python3} $ROOT/build_support/iwyu/iwyu_tool.py \
8181
-p ${IWYU_COMPILATION_DATABASE_PATH:-.} $IWYU_FILE_LIST -- \
8282
$IWYU_ARGS | awk -f $ROOT/build_support/iwyu/iwyu-filter.awk > $IWYU_LOG
8383
fi

build_support/iwyu/iwyu_tool.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/usr/bin/env python
1+
#!/usr/bin/env python3
22

33
# This file has been imported into the apache source tree from
44
# the IWYU source tree as of version 0.8
@@ -65,7 +65,7 @@
6565
-DCMAKE_C_COMPILER="%VCINSTALLDIR%/VC/bin/cl.exe" \
6666
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
6767
-G Ninja ...
68-
$ python iwyu_tool.py -p .
68+
$ python3 iwyu_tool.py -p .
6969
7070
See iwyu_tool.py -h for more details on command-line arguments.
7171
"""

build_support/run_clang_format.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/usr/bin/env python
1+
#!/usr/bin/env python3
22
# Licensed to the Apache Software Foundation (ASF) under one
33
# or more contributor license agreements. See the NOTICE file
44
# distributed with this work for additional information

build_support/run_clang_tidy.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/usr/bin/env python
1+
#!/usr/bin/env python3
22
# Licensed to the Apache Software Foundation (ASF) under one
33
# or more contributor license agreements. See the NOTICE file
44
# distributed with this work for additional information

cmake_modules/BuildUtils.cmake

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,43 @@
1818
# Borrowed the file from Apache Arrow:
1919
# https://github.com/apache/arrow/blob/main/cpp/cmake_modules/BuildUtils.cmake
2020

21+
function(paimon_link_libraries_whole_archive OUT_VAR)
22+
set(_paimon_whole_archive_libs)
23+
if(APPLE)
24+
foreach(_paimon_lib IN LISTS ARGN)
25+
list(APPEND _paimon_whole_archive_libs
26+
"-Wl,-force_load,$<TARGET_FILE:${_paimon_lib}>" ${_paimon_lib})
27+
endforeach()
28+
else()
29+
list(APPEND
30+
_paimon_whole_archive_libs
31+
"-Wl,--whole-archive"
32+
${ARGN}
33+
"-Wl,--no-whole-archive")
34+
endif()
35+
set(${OUT_VAR}
36+
${_paimon_whole_archive_libs}
37+
PARENT_SCOPE)
38+
endfunction()
39+
40+
function(paimon_link_libraries_no_as_needed OUT_VAR)
41+
set(_paimon_link_libs)
42+
foreach(_paimon_lib IN LISTS ARGN)
43+
if(APPLE)
44+
list(APPEND _paimon_link_libs ${_paimon_lib})
45+
else()
46+
list(APPEND
47+
_paimon_link_libs
48+
"-Wl,--no-as-needed"
49+
${_paimon_lib}
50+
"-Wl,--as-needed")
51+
endif()
52+
endforeach()
53+
set(${OUT_VAR}
54+
${_paimon_link_libs}
55+
PARENT_SCOPE)
56+
endfunction()
57+
2158
function(add_paimon_lib LIB_NAME)
2259
set(options BUILD_SHARED BUILD_STATIC)
2360
set(one_value_args SHARED_LINK_FLAGS)
@@ -139,12 +176,14 @@ function(add_paimon_lib LIB_NAME)
139176
target_link_libraries(${LIB_NAME}_shared
140177
PUBLIC "$<BUILD_INTERFACE:paimon_sanitizer_flags>")
141178

142-
target_link_options(${LIB_NAME}_shared
143-
PRIVATE
144-
-Wl,--exclude-libs,ALL
145-
-Wl,-Bsymbolic
146-
-Wl,-z,defs
147-
-Wl,--gc-sections)
179+
if(NOT APPLE)
180+
target_link_options(${LIB_NAME}_shared
181+
PRIVATE
182+
-Wl,--exclude-libs,ALL
183+
-Wl,-Bsymbolic
184+
-Wl,-z,defs
185+
-Wl,--gc-sections)
186+
endif()
148187

149188
install(TARGETS ${LIB_NAME}_shared ${INSTALL_IS_OPTIONAL}
150189
EXPORT PaimonTargets

cmake_modules/DefineOptions.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
9898

9999
define_option(PAIMON_USE_CCACHE "Use ccache when compiling (if available)" ON)
100100

101+
define_option(PAIMON_USE_APPLE_LIBCXX_WITH_CLANG
102+
"Use Apple SDK libc++ headers when building with upstream Clang on macOS"
103+
ON)
104+
101105
#----------------------------------------------------------------------
102106
set_option_category("Test")
103107

cmake_modules/SetupCxxFlags.cmake

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,24 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" OR CMAKE_CXX_COMPILER_ID STRE
196196
# the default standard library which does not support C++11. libc++ is the
197197
# default from 10.9 onward.
198198
set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -stdlib=libc++")
199+
elseif(APPLE AND PAIMON_USE_APPLE_LIBCXX_WITH_CLANG)
200+
execute_process(COMMAND xcrun --show-sdk-path
201+
OUTPUT_VARIABLE PAIMON_MACOS_SDK_PATH
202+
OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
203+
if(NOT PAIMON_MACOS_SDK_PATH)
204+
message(FATAL_ERROR "PAIMON_USE_APPLE_LIBCXX_WITH_CLANG is enabled, but xcrun could not find the macOS SDK"
205+
)
206+
endif()
207+
set(PAIMON_MACOS_LIBCXX_INCLUDE_DIR "${PAIMON_MACOS_SDK_PATH}/usr/include/c++/v1")
208+
if(NOT EXISTS "${PAIMON_MACOS_LIBCXX_INCLUDE_DIR}/cstdlib")
209+
message(FATAL_ERROR "PAIMON_USE_APPLE_LIBCXX_WITH_CLANG is enabled, but libc++ headers were not found at ${PAIMON_MACOS_LIBCXX_INCLUDE_DIR}"
210+
)
211+
endif()
212+
message(STATUS "Using Apple libc++ headers with Clang: ${PAIMON_MACOS_LIBCXX_INCLUDE_DIR}"
213+
)
214+
set(CMAKE_CXX_FLAGS
215+
"${CMAKE_CXX_FLAGS} -nostdinc++ -isystem ${PAIMON_MACOS_LIBCXX_INCLUDE_DIR} -include cstdlib"
216+
)
199217
endif()
200218
endif()
201219

0 commit comments

Comments
 (0)