blob: 22f850cefe5256faf669918c76802a9d097e0efb [file] [log] [blame]
# 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: '24.0.0-SNAPSHOT',
license: 'Apache-2.0',
meson_version: '>=1.3.0',
default_options: ['c_std=c11', 'warning_level=2', 'cpp_std=c++20'],
)
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 == '' and not meson.is_subproject()
git_id = run_command('git', 'log', '-n1', '--format=%H', check: false).stdout().strip()
endif
git_description = get_option('git_description')
if git_description == '' and not meson.is_subproject()
git_description = run_command('git', 'describe', '--tags', check: false).stdout().strip()
endif
needs_benchmarks = get_option('benchmarks').enabled()
needs_csv = get_option('csv').enabled()
needs_cuda = false
needs_substrait = get_option('substrait').enabled()
needs_dataset = get_option('dataset').enabled() or needs_substrait
needs_azure = get_option('azure').enabled()
needs_gcs = get_option('gcs').enabled()
needs_hdfs = get_option('hdfs').enabled()
needs_opentelemetry = false
needs_orc = false
needs_parquet = get_option('parquet').enabled() or needs_substrait
needs_parquet_encryption = get_option('parquet_require_encryption').enabled()
needs_s3 = get_option('s3').enabled()
needs_filesystem = (get_option('filesystem').enabled()
or needs_azure
or needs_dataset
or needs_gcs
or needs_hdfs
or needs_parquet_encryption
or needs_s3
)
needs_integration = get_option('integration').enabled()
needs_tests = get_option('tests').enabled()
needs_acero = get_option('acero').enabled() or needs_dataset
needs_compute = get_option('compute').enabled() or needs_acero
needs_flight_sql = false
needs_flight = get_option('flight').enabled() or needs_flight_sql
needs_gandiva = false
needs_ipc = (get_option('ipc').enabled()
or needs_tests
or needs_acero
or needs_benchmarks
or needs_flight
or needs_parquet
or needs_substrait
)
needs_fuzzing = get_option('fuzzing').enabled()
if needs_fuzzing
if meson.version() < '1.8.0'
error(
f'Meson >= 1.8.0 is required for fuzzing support, found @meson.version()@',
)
endif
endif
needs_testing = (get_option('testing').enabled()
or needs_tests
or needs_benchmarks
or needs_fuzzing
or needs_integration
)
needs_json = get_option('json').enabled() or needs_testing
needs_brotli = get_option('brotli').enabled() or needs_fuzzing
needs_bz2 = get_option('bz2').enabled()
needs_lz4 = get_option('lz4').enabled()
needs_snappy = get_option('snappy').enabled()
needs_utf8proc = get_option('utf8proc').enabled() or needs_gandiva
needs_zlib = get_option('zlib').enabled()
needs_zstd = get_option('zstd').enabled()
needs_utilities = get_option('utilities').enabled()
if needs_flight or needs_substrait
protobuf_dep = dependency('protobuf')
protoc = find_program('protoc')
# To ensure messages from proto files are created correctly, we need to
# pass in dllexport_decl=<...> . Unfortunately, it doesn't appear that we
# can just pass in dllexport_decl=XXX_EXPORT, as the visibility
# macro won't be easily available to the generated proto file. See also
# https://github.com/protocolbuffers/protobuf/issues/19422
if meson.get_compiler('cpp').get_id() == 'msvc'
if get_option('default_library') != 'static'
proto_visibility = 'dllexport_decl=__declspec(dllexport):'
else
proto_visibility = ''
endif
else
proto_visibility = 'dllexport_decl=__attribute__((visibility("default"))):'
endif
else
protobuf_dep = disabler()
protoc = disabler()
endif
subdir('src/arrow')
if needs_parquet
subdir('src/parquet')
subdir('tools/parquet')
if get_option('parquet_build_examples').enabled()
subdir('examples/parquet')
endif
endif
if needs_dataset
# Unlike the CMake configuration we need to add dataset support in the top level
# because it potentially requires parquet, which in turn requires arrow.
# When included in the subdir('src/arrow') call with parquet enabled, you end up
# with a circular dependency
subdir('src/arrow/dataset')
endif
if needs_substrait
subdir('src/arrow/engine')
endif