# 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