Skip to content

Commit

Permalink
GH-41816: [C++] Add Minimal Meson Build of libarrow (#45441)
Browse files Browse the repository at this point in the history
### Rationale for this change

The Meson build system may be more user friendly to some developers, and may make it easier to perform tasks like valgrind, coverage, or ASAN/UBSAN coverage. There is also a prior art for using meson in the nanoarrow and arrow-adbc projects.

### What changes are included in this PR?

This PR implements a Meson configuration that can build a minimal libarrow.

### Are these changes tested?

A nightly CI job is also added to detect regressions.

### Are there any user-facing changes?

No

* GitHub Issue: #41816

Lead-authored-by: Will Ayd <william.ayd@icloud.com>
Co-authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
  • Loading branch information
WillAyd and kou authored Feb 19, 2025
1 parent 15f1d94 commit c7a9100
Show file tree
Hide file tree
Showing 11 changed files with 556 additions and 4 deletions.
1 change: 1 addition & 0 deletions ci/conda_env_cpp.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ libprotobuf
libutf8proc
lz4-c
make
meson
ninja
nodejs
orc
Expand Down
16 changes: 13 additions & 3 deletions ci/scripts/cpp_build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,13 @@ if [ "${ARROW_OFFLINE}" = "ON" ]; then
echo > /etc/resolv.conf
fi

if [ "${ARROW_EMSCRIPTEN:-OFF}" = "ON" ]; then
if [ "${ARROW_USE_MESON:-OFF}" = "ON" ]; then
meson setup \
--prefix=${MESON_PREFIX:-${ARROW_HOME}} \
--buildtype=${ARROW_BUILD_TYPE:-debug} \
. \
${source_dir}
elif [ "${ARROW_EMSCRIPTEN:-OFF}" = "ON" ]; then
if [ "${UBUNTU}" = "20.04" ]; then
echo "arrow emscripten build is not supported on Ubuntu 20.04, run with UBUNTU=22.04"
exit -1
Expand Down Expand Up @@ -244,8 +250,12 @@ else
${source_dir}
fi

export CMAKE_BUILD_PARALLEL_LEVEL=${CMAKE_BUILD_PARALLEL_LEVEL:-$[${n_jobs} + 1]}
time cmake --build . --target install
if [ "${ARROW_USE_MESON:-OFF}" = "ON" ]; then
time meson install
else
export CMAKE_BUILD_PARALLEL_LEVEL=${CMAKE_BUILD_PARALLEL_LEVEL:-$[${n_jobs} + 1]}
time cmake --build . --target install
fi

# Save disk space by removing large temporary build products
find . -name "*.o" -delete
Expand Down
9 changes: 8 additions & 1 deletion ci/scripts/cpp_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -89,14 +89,21 @@ pushd ${build_dir}
if [ -z "${PYTHON}" ] && ! which python > /dev/null 2>&1; then
export PYTHON="${PYTHON:-python3}"
fi
ctest \
if [ "${ARROW_USE_MESON:-OFF}" = "ON" ]; then
ARROW_BUILD_EXAMPLES=OFF # TODO: Remove this
meson test \
--print-errorlogs \
"$@"
else
ctest \
--label-regex unittest \
--output-on-failure \
--parallel ${n_jobs} \
--repeat until-pass:3 \
--timeout ${ARROW_CTEST_TIMEOUT:-300} \
"${ctest_options[@]}" \
"$@"
fi

if [ "${ARROW_BUILD_EXAMPLES}" == "ON" ]; then
examples=$(find ${binary_output_dir} -executable -name "*example")
Expand Down
59 changes: 59 additions & 0 deletions cpp/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

project(
'arrow',
'cpp',
'c',
version: '20.0.0-SNAPSHOT',
license: 'Apache-2.0',
meson_version: '>=1.3.0',
default_options: [
'buildtype=release',
'c_std=c99',
'warning_level=2',
'cpp_std=c++17',
],
)

project_args = [
'-Wno-unused-parameter',
'-Wno-array-bounds',
'-Wno-stringop-overflow',
'-Wno-aggressive-loop-optimizations',
'-Wno-nonnull',
]

c_compiler = meson.get_compiler('c')
c_args = c_compiler.get_supported_arguments(project_args)
add_project_arguments(c_args, language: 'c')

cpp_compiler = meson.get_compiler('cpp')
cpp_args = cpp_compiler.get_supported_arguments(project_args)
add_project_arguments(cpp_args, language: 'cpp')

git_id = get_option('git_id')
if git_id == ''
git_id = run_command('git', 'log', '-n1', '--format=%H', check: false).stdout().strip()
endif

git_description = get_option('git_description')
if git_description == ''
git_description = run_command('git', 'describe', '--tags', check: false).stdout().strip()
endif

subdir('src/arrow')
32 changes: 32 additions & 0 deletions cpp/meson.options
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

option(
'git_id',
type: 'string',
)

option(
'git_description',
type: 'string',
)

option(
'package_kind',
type: 'string',
description: 'Arbitrary string that identifies the kind of package (for informational purposes)',
)
Loading

0 comments on commit c7a9100

Please sign in to comment.