Skip to content

Commit 1a1d2c8

Browse files
joemarshallkoujorisvandenbossche
authored
GH-23221: [C++] Add support for building with Emscripten (#37821)
Split from #37696 This is just the cmake changes to enable building on emscripten. Changes are: 1) Support for target system "emscripten" 2) Cmake preset for building libarrow ` ninja-release-python-emscripten` (same as `ninja-release-python`, but with emscripten support) 3) Override file for cmake on emscripten, to set various build parameters that need setting to make it build there. 4) Changes in pyarrow cmake so it works if you are building libarrow as shared library, and also an option to enable the cmake file there to just dump the current arrow configuration, which is useful for cross-compile builds. * Closes: #23221 Lead-authored-by: Joe Marshall <joe.marshall@nottingham.ac.uk> Co-authored-by: Sutou Kouhei <kou@clear-code.com> Co-authored-by: Joris Van den Bossche <jorisvandenbossche@gmail.com> Co-authored-by: Sutou Kouhei <kou@cozmixng.org> Signed-off-by: Sutou Kouhei <kou@clear-code.com>
1 parent 72d20ad commit 1a1d2c8

31 files changed

+784
-159
lines changed

ci/docker/ubuntu-22.04-cpp.dockerfile

+15-1
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ RUN latest_system_llvm=14 && \
6565
RUN apt-get update -y -q && \
6666
apt-get install -y -q --no-install-recommends \
6767
autoconf \
68+
bzip2 \
6869
ca-certificates \
6970
ccache \
7071
cmake \
@@ -115,10 +116,20 @@ RUN apt-get update -y -q && \
115116
rapidjson-dev \
116117
rsync \
117118
tzdata \
118-
wget && \
119+
wget \
120+
xz-utils && \
119121
apt-get clean && \
120122
rm -rf /var/lib/apt/lists*
121123

124+
# install emscripten using EMSDK
125+
ARG emscripten_version="3.1.45"
126+
RUN cd ~ && git clone https://github.com/emscripten-core/emsdk.git && \
127+
cd emsdk && \
128+
./emsdk install ${emscripten_version} && \
129+
./emsdk activate ${emscripten_version} && \
130+
echo "Installed emsdk to:" ~/emsdk
131+
132+
122133
ARG gcc_version=""
123134
RUN if [ "${gcc_version}" = "" ]; then \
124135
apt-get update -y -q && \
@@ -151,6 +162,9 @@ RUN if [ "${gcc_version}" = "" ]; then \
151162
update-alternatives --set c++ /usr/bin/g++; \
152163
fi
153164

165+
# make sure zlib is cached in the EMSDK folder
166+
RUN source ~/emsdk/emsdk_env.sh && embuilder --pic build zlib
167+
154168
COPY ci/scripts/install_minio.sh /arrow/ci/scripts/
155169
RUN /arrow/ci/scripts/install_minio.sh latest /usr/local
156170

ci/scripts/cpp_build.sh

+126-106
Original file line numberDiff line numberDiff line change
@@ -92,112 +92,132 @@ esac
9292
mkdir -p ${build_dir}
9393
pushd ${build_dir}
9494

95-
cmake \
96-
-Dabsl_SOURCE=${absl_SOURCE:-} \
97-
-DARROW_ACERO=${ARROW_ACERO:-OFF} \
98-
-DARROW_AZURE=${ARROW_AZURE:-OFF} \
99-
-DARROW_BOOST_USE_SHARED=${ARROW_BOOST_USE_SHARED:-ON} \
100-
-DARROW_BUILD_BENCHMARKS_REFERENCE=${ARROW_BUILD_BENCHMARKS:-OFF} \
101-
-DARROW_BUILD_BENCHMARKS=${ARROW_BUILD_BENCHMARKS:-OFF} \
102-
-DARROW_BUILD_EXAMPLES=${ARROW_BUILD_EXAMPLES:-OFF} \
103-
-DARROW_BUILD_INTEGRATION=${ARROW_BUILD_INTEGRATION:-OFF} \
104-
-DARROW_BUILD_SHARED=${ARROW_BUILD_SHARED:-ON} \
105-
-DARROW_BUILD_STATIC=${ARROW_BUILD_STATIC:-ON} \
106-
-DARROW_BUILD_TESTS=${ARROW_BUILD_TESTS:-OFF} \
107-
-DARROW_BUILD_UTILITIES=${ARROW_BUILD_UTILITIES:-ON} \
108-
-DARROW_COMPUTE=${ARROW_COMPUTE:-ON} \
109-
-DARROW_CSV=${ARROW_CSV:-ON} \
110-
-DARROW_CUDA=${ARROW_CUDA:-OFF} \
111-
-DARROW_CXXFLAGS=${ARROW_CXXFLAGS:-} \
112-
-DARROW_CXX_FLAGS_DEBUG="${ARROW_CXX_FLAGS_DEBUG:-}" \
113-
-DARROW_CXX_FLAGS_RELEASE="${ARROW_CXX_FLAGS_RELEASE:-}" \
114-
-DARROW_CXX_FLAGS_RELWITHDEBINFO="${ARROW_CXX_FLAGS_RELWITHDEBINFO:-}" \
115-
-DARROW_C_FLAGS_DEBUG="${ARROW_C_FLAGS_DEBUG:-}" \
116-
-DARROW_C_FLAGS_RELEASE="${ARROW_C_FLAGS_RELEASE:-}" \
117-
-DARROW_C_FLAGS_RELWITHDEBINFO="${ARROW_C_FLAGS_RELWITHDEBINFO:-}" \
118-
-DARROW_DATASET=${ARROW_DATASET:-OFF} \
119-
-DARROW_DEPENDENCY_SOURCE=${ARROW_DEPENDENCY_SOURCE:-AUTO} \
120-
-DARROW_ENABLE_THREADING=${ARROW_ENABLE_THREADING:-ON} \
121-
-DARROW_ENABLE_TIMING_TESTS=${ARROW_ENABLE_TIMING_TESTS:-ON} \
122-
-DARROW_EXTRA_ERROR_CONTEXT=${ARROW_EXTRA_ERROR_CONTEXT:-OFF} \
123-
-DARROW_FILESYSTEM=${ARROW_FILESYSTEM:-ON} \
124-
-DARROW_FLIGHT=${ARROW_FLIGHT:-OFF} \
125-
-DARROW_FLIGHT_SQL=${ARROW_FLIGHT_SQL:-OFF} \
126-
-DARROW_FUZZING=${ARROW_FUZZING:-OFF} \
127-
-DARROW_GANDIVA_PC_CXX_FLAGS=${ARROW_GANDIVA_PC_CXX_FLAGS:-} \
128-
-DARROW_GANDIVA=${ARROW_GANDIVA:-OFF} \
129-
-DARROW_GCS=${ARROW_GCS:-OFF} \
130-
-DARROW_HDFS=${ARROW_HDFS:-ON} \
131-
-DARROW_INSTALL_NAME_RPATH=${ARROW_INSTALL_NAME_RPATH:-ON} \
132-
-DARROW_JEMALLOC=${ARROW_JEMALLOC:-ON} \
133-
-DARROW_JSON=${ARROW_JSON:-ON} \
134-
-DARROW_LARGE_MEMORY_TESTS=${ARROW_LARGE_MEMORY_TESTS:-OFF} \
135-
-DARROW_MIMALLOC=${ARROW_MIMALLOC:-OFF} \
136-
-DARROW_NO_DEPRECATED_API=${ARROW_NO_DEPRECATED_API:-OFF} \
137-
-DARROW_ORC=${ARROW_ORC:-OFF} \
138-
-DARROW_PARQUET=${ARROW_PARQUET:-OFF} \
139-
-DARROW_RUNTIME_SIMD_LEVEL=${ARROW_RUNTIME_SIMD_LEVEL:-MAX} \
140-
-DARROW_S3=${ARROW_S3:-OFF} \
141-
-DARROW_SIMD_LEVEL=${ARROW_SIMD_LEVEL:-DEFAULT} \
142-
-DARROW_SKYHOOK=${ARROW_SKYHOOK:-OFF} \
143-
-DARROW_SUBSTRAIT=${ARROW_SUBSTRAIT:-OFF} \
144-
-DARROW_TEST_LINKAGE=${ARROW_TEST_LINKAGE:-shared} \
145-
-DARROW_TEST_MEMCHECK=${ARROW_TEST_MEMCHECK:-OFF} \
146-
-DARROW_USE_ASAN=${ARROW_USE_ASAN:-OFF} \
147-
-DARROW_USE_CCACHE=${ARROW_USE_CCACHE:-ON} \
148-
-DARROW_USE_GLOG=${ARROW_USE_GLOG:-OFF} \
149-
-DARROW_USE_LD_GOLD=${ARROW_USE_LD_GOLD:-OFF} \
150-
-DARROW_USE_MOLD=${ARROW_USE_MOLD:-OFF} \
151-
-DARROW_USE_PRECOMPILED_HEADERS=${ARROW_USE_PRECOMPILED_HEADERS:-OFF} \
152-
-DARROW_USE_STATIC_CRT=${ARROW_USE_STATIC_CRT:-OFF} \
153-
-DARROW_USE_TSAN=${ARROW_USE_TSAN:-OFF} \
154-
-DARROW_USE_UBSAN=${ARROW_USE_UBSAN:-OFF} \
155-
-DARROW_VERBOSE_THIRDPARTY_BUILD=${ARROW_VERBOSE_THIRDPARTY_BUILD:-OFF} \
156-
-DARROW_WITH_BROTLI=${ARROW_WITH_BROTLI:-OFF} \
157-
-DARROW_WITH_BZ2=${ARROW_WITH_BZ2:-OFF} \
158-
-DARROW_WITH_LZ4=${ARROW_WITH_LZ4:-OFF} \
159-
-DARROW_WITH_OPENTELEMETRY=${ARROW_WITH_OPENTELEMETRY:-OFF} \
160-
-DARROW_WITH_MUSL=${ARROW_WITH_MUSL:-OFF} \
161-
-DARROW_WITH_SNAPPY=${ARROW_WITH_SNAPPY:-OFF} \
162-
-DARROW_WITH_UCX=${ARROW_WITH_UCX:-OFF} \
163-
-DARROW_WITH_UTF8PROC=${ARROW_WITH_UTF8PROC:-ON} \
164-
-DARROW_WITH_ZLIB=${ARROW_WITH_ZLIB:-OFF} \
165-
-DARROW_WITH_ZSTD=${ARROW_WITH_ZSTD:-OFF} \
166-
-DAWSSDK_SOURCE=${AWSSDK_SOURCE:-} \
167-
-DAzure_SOURCE=${Azure_SOURCE:-} \
168-
-Dbenchmark_SOURCE=${benchmark_SOURCE:-} \
169-
-DBOOST_SOURCE=${BOOST_SOURCE:-} \
170-
-DBrotli_SOURCE=${Brotli_SOURCE:-} \
171-
-DBUILD_WARNING_LEVEL=${BUILD_WARNING_LEVEL:-CHECKIN} \
172-
-Dc-ares_SOURCE=${cares_SOURCE:-} \
173-
-DCMAKE_BUILD_TYPE=${ARROW_BUILD_TYPE:-debug} \
174-
-DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE_MAKEFILE:-OFF} \
175-
-DCMAKE_C_FLAGS="${CFLAGS:-}" \
176-
-DCMAKE_CXX_FLAGS="${CXXFLAGS:-}" \
177-
-DCMAKE_CXX_STANDARD="${CMAKE_CXX_STANDARD:-17}" \
178-
-DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR:-lib} \
179-
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX:-${ARROW_HOME}} \
180-
-DCMAKE_UNITY_BUILD=${CMAKE_UNITY_BUILD:-OFF} \
181-
-Dgflags_SOURCE=${gflags_SOURCE:-} \
182-
-Dgoogle_cloud_cpp_storage_SOURCE=${google_cloud_cpp_storage_SOURCE:-} \
183-
-DgRPC_SOURCE=${gRPC_SOURCE:-} \
184-
-DGTest_SOURCE=${GTest_SOURCE:-} \
185-
-Dlz4_SOURCE=${lz4_SOURCE:-} \
186-
-DORC_SOURCE=${ORC_SOURCE:-} \
187-
-DPARQUET_BUILD_EXAMPLES=${PARQUET_BUILD_EXAMPLES:-OFF} \
188-
-DPARQUET_BUILD_EXECUTABLES=${PARQUET_BUILD_EXECUTABLES:-OFF} \
189-
-DPARQUET_REQUIRE_ENCRYPTION=${PARQUET_REQUIRE_ENCRYPTION:-ON} \
190-
-DProtobuf_SOURCE=${Protobuf_SOURCE:-} \
191-
-DRapidJSON_SOURCE=${RapidJSON_SOURCE:-} \
192-
-Dre2_SOURCE=${re2_SOURCE:-} \
193-
-DSnappy_SOURCE=${Snappy_SOURCE:-} \
194-
-DThrift_SOURCE=${Thrift_SOURCE:-} \
195-
-Dutf8proc_SOURCE=${utf8proc_SOURCE:-} \
196-
-Dzstd_SOURCE=${zstd_SOURCE:-} \
197-
-Dxsimd_SOURCE=${xsimd_SOURCE:-} \
198-
-G "${CMAKE_GENERATOR:-Ninja}" \
199-
${ARROW_CMAKE_ARGS} \
200-
${source_dir}
95+
if [ "${ARROW_EMSCRIPTEN:-OFF}" = "ON" ]; then
96+
if [ "${UBUNTU}" = "20.04" ]; then
97+
echo "arrow emscripten build is not supported on Ubuntu 20.04, run with UBUNTU=22.04"
98+
exit -1
99+
fi
100+
n_jobs=2 # Emscripten build fails on docker unless this is set really low
101+
source ~/emsdk/emsdk_env.sh
102+
emcmake cmake \
103+
--preset=ninja-${ARROW_BUILD_TYPE:-debug}-emscripten \
104+
-DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE_MAKEFILE:-OFF} \
105+
-DCMAKE_C_FLAGS="${CFLAGS:-}" \
106+
-DCMAKE_CXX_FLAGS="${CXXFLAGS:-}" \
107+
-DCMAKE_CXX_STANDARD="${CMAKE_CXX_STANDARD:-17}" \
108+
-DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR:-lib} \
109+
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX:-${ARROW_HOME}} \
110+
-DCMAKE_UNITY_BUILD=${CMAKE_UNITY_BUILD:-OFF} \
111+
${ARROW_CMAKE_ARGS} \
112+
${source_dir}
113+
else
114+
cmake \
115+
-Dabsl_SOURCE=${absl_SOURCE:-} \
116+
-DARROW_ACERO=${ARROW_ACERO:-OFF} \
117+
-DARROW_AZURE=${ARROW_AZURE:-OFF} \
118+
-DARROW_BOOST_USE_SHARED=${ARROW_BOOST_USE_SHARED:-ON} \
119+
-DARROW_BUILD_BENCHMARKS_REFERENCE=${ARROW_BUILD_BENCHMARKS:-OFF} \
120+
-DARROW_BUILD_BENCHMARKS=${ARROW_BUILD_BENCHMARKS:-OFF} \
121+
-DARROW_BUILD_EXAMPLES=${ARROW_BUILD_EXAMPLES:-OFF} \
122+
-DARROW_BUILD_INTEGRATION=${ARROW_BUILD_INTEGRATION:-OFF} \
123+
-DARROW_BUILD_SHARED=${ARROW_BUILD_SHARED:-ON} \
124+
-DARROW_BUILD_STATIC=${ARROW_BUILD_STATIC:-ON} \
125+
-DARROW_BUILD_TESTS=${ARROW_BUILD_TESTS:-OFF} \
126+
-DARROW_BUILD_UTILITIES=${ARROW_BUILD_UTILITIES:-ON} \
127+
-DARROW_COMPUTE=${ARROW_COMPUTE:-ON} \
128+
-DARROW_CSV=${ARROW_CSV:-ON} \
129+
-DARROW_CUDA=${ARROW_CUDA:-OFF} \
130+
-DARROW_CXXFLAGS=${ARROW_CXXFLAGS:-} \
131+
-DARROW_CXX_FLAGS_DEBUG="${ARROW_CXX_FLAGS_DEBUG:-}" \
132+
-DARROW_CXX_FLAGS_RELEASE="${ARROW_CXX_FLAGS_RELEASE:-}" \
133+
-DARROW_CXX_FLAGS_RELWITHDEBINFO="${ARROW_CXX_FLAGS_RELWITHDEBINFO:-}" \
134+
-DARROW_C_FLAGS_DEBUG="${ARROW_C_FLAGS_DEBUG:-}" \
135+
-DARROW_C_FLAGS_RELEASE="${ARROW_C_FLAGS_RELEASE:-}" \
136+
-DARROW_C_FLAGS_RELWITHDEBINFO="${ARROW_C_FLAGS_RELWITHDEBINFO:-}" \
137+
-DARROW_DATASET=${ARROW_DATASET:-OFF} \
138+
-DARROW_DEPENDENCY_SOURCE=${ARROW_DEPENDENCY_SOURCE:-AUTO} \
139+
-DARROW_ENABLE_THREADING=${ARROW_ENABLE_THREADING:-ON} \
140+
-DARROW_ENABLE_TIMING_TESTS=${ARROW_ENABLE_TIMING_TESTS:-ON} \
141+
-DARROW_EXTRA_ERROR_CONTEXT=${ARROW_EXTRA_ERROR_CONTEXT:-OFF} \
142+
-DARROW_FILESYSTEM=${ARROW_FILESYSTEM:-ON} \
143+
-DARROW_FLIGHT=${ARROW_FLIGHT:-OFF} \
144+
-DARROW_FLIGHT_SQL=${ARROW_FLIGHT_SQL:-OFF} \
145+
-DARROW_FUZZING=${ARROW_FUZZING:-OFF} \
146+
-DARROW_GANDIVA_PC_CXX_FLAGS=${ARROW_GANDIVA_PC_CXX_FLAGS:-} \
147+
-DARROW_GANDIVA=${ARROW_GANDIVA:-OFF} \
148+
-DARROW_GCS=${ARROW_GCS:-OFF} \
149+
-DARROW_HDFS=${ARROW_HDFS:-ON} \
150+
-DARROW_INSTALL_NAME_RPATH=${ARROW_INSTALL_NAME_RPATH:-ON} \
151+
-DARROW_JEMALLOC=${ARROW_JEMALLOC:-ON} \
152+
-DARROW_JSON=${ARROW_JSON:-ON} \
153+
-DARROW_LARGE_MEMORY_TESTS=${ARROW_LARGE_MEMORY_TESTS:-OFF} \
154+
-DARROW_MIMALLOC=${ARROW_MIMALLOC:-OFF} \
155+
-DARROW_NO_DEPRECATED_API=${ARROW_NO_DEPRECATED_API:-OFF} \
156+
-DARROW_ORC=${ARROW_ORC:-OFF} \
157+
-DARROW_PARQUET=${ARROW_PARQUET:-OFF} \
158+
-DARROW_RUNTIME_SIMD_LEVEL=${ARROW_RUNTIME_SIMD_LEVEL:-MAX} \
159+
-DARROW_S3=${ARROW_S3:-OFF} \
160+
-DARROW_SIMD_LEVEL=${ARROW_SIMD_LEVEL:-DEFAULT} \
161+
-DARROW_SKYHOOK=${ARROW_SKYHOOK:-OFF} \
162+
-DARROW_SUBSTRAIT=${ARROW_SUBSTRAIT:-OFF} \
163+
-DARROW_TEST_LINKAGE=${ARROW_TEST_LINKAGE:-shared} \
164+
-DARROW_TEST_MEMCHECK=${ARROW_TEST_MEMCHECK:-OFF} \
165+
-DARROW_USE_ASAN=${ARROW_USE_ASAN:-OFF} \
166+
-DARROW_USE_CCACHE=${ARROW_USE_CCACHE:-ON} \
167+
-DARROW_USE_GLOG=${ARROW_USE_GLOG:-OFF} \
168+
-DARROW_USE_LD_GOLD=${ARROW_USE_LD_GOLD:-OFF} \
169+
-DARROW_USE_MOLD=${ARROW_USE_MOLD:-OFF} \
170+
-DARROW_USE_PRECOMPILED_HEADERS=${ARROW_USE_PRECOMPILED_HEADERS:-OFF} \
171+
-DARROW_USE_STATIC_CRT=${ARROW_USE_STATIC_CRT:-OFF} \
172+
-DARROW_USE_TSAN=${ARROW_USE_TSAN:-OFF} \
173+
-DARROW_USE_UBSAN=${ARROW_USE_UBSAN:-OFF} \
174+
-DARROW_VERBOSE_THIRDPARTY_BUILD=${ARROW_VERBOSE_THIRDPARTY_BUILD:-OFF} \
175+
-DARROW_WITH_BROTLI=${ARROW_WITH_BROTLI:-OFF} \
176+
-DARROW_WITH_BZ2=${ARROW_WITH_BZ2:-OFF} \
177+
-DARROW_WITH_LZ4=${ARROW_WITH_LZ4:-OFF} \
178+
-DARROW_WITH_OPENTELEMETRY=${ARROW_WITH_OPENTELEMETRY:-OFF} \
179+
-DARROW_WITH_MUSL=${ARROW_WITH_MUSL:-OFF} \
180+
-DARROW_WITH_SNAPPY=${ARROW_WITH_SNAPPY:-OFF} \
181+
-DARROW_WITH_UCX=${ARROW_WITH_UCX:-OFF} \
182+
-DARROW_WITH_UTF8PROC=${ARROW_WITH_UTF8PROC:-ON} \
183+
-DARROW_WITH_ZLIB=${ARROW_WITH_ZLIB:-OFF} \
184+
-DARROW_WITH_ZSTD=${ARROW_WITH_ZSTD:-OFF} \
185+
-DAWSSDK_SOURCE=${AWSSDK_SOURCE:-} \
186+
-DAzure_SOURCE=${Azure_SOURCE:-} \
187+
-Dbenchmark_SOURCE=${benchmark_SOURCE:-} \
188+
-DBOOST_SOURCE=${BOOST_SOURCE:-} \
189+
-DBrotli_SOURCE=${Brotli_SOURCE:-} \
190+
-DBUILD_WARNING_LEVEL=${BUILD_WARNING_LEVEL:-CHECKIN} \
191+
-Dc-ares_SOURCE=${cares_SOURCE:-} \
192+
-DCMAKE_BUILD_TYPE=${ARROW_BUILD_TYPE:-debug} \
193+
-DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE_MAKEFILE:-OFF} \
194+
-DCMAKE_C_FLAGS="${CFLAGS:-}" \
195+
-DCMAKE_CXX_FLAGS="${CXXFLAGS:-}" \
196+
-DCMAKE_CXX_STANDARD="${CMAKE_CXX_STANDARD:-17}" \
197+
-DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR:-lib} \
198+
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX:-${ARROW_HOME}} \
199+
-DCMAKE_UNITY_BUILD=${CMAKE_UNITY_BUILD:-OFF} \
200+
-Dgflags_SOURCE=${gflags_SOURCE:-} \
201+
-Dgoogle_cloud_cpp_storage_SOURCE=${google_cloud_cpp_storage_SOURCE:-} \
202+
-DgRPC_SOURCE=${gRPC_SOURCE:-} \
203+
-DGTest_SOURCE=${GTest_SOURCE:-} \
204+
-Dlz4_SOURCE=${lz4_SOURCE:-} \
205+
-DORC_SOURCE=${ORC_SOURCE:-} \
206+
-DPARQUET_BUILD_EXAMPLES=${PARQUET_BUILD_EXAMPLES:-OFF} \
207+
-DPARQUET_BUILD_EXECUTABLES=${PARQUET_BUILD_EXECUTABLES:-OFF} \
208+
-DPARQUET_REQUIRE_ENCRYPTION=${PARQUET_REQUIRE_ENCRYPTION:-ON} \
209+
-DProtobuf_SOURCE=${Protobuf_SOURCE:-} \
210+
-DRapidJSON_SOURCE=${RapidJSON_SOURCE:-} \
211+
-Dre2_SOURCE=${re2_SOURCE:-} \
212+
-DSnappy_SOURCE=${Snappy_SOURCE:-} \
213+
-DThrift_SOURCE=${Thrift_SOURCE:-} \
214+
-Dutf8proc_SOURCE=${utf8proc_SOURCE:-} \
215+
-Dzstd_SOURCE=${zstd_SOURCE:-} \
216+
-Dxsimd_SOURCE=${xsimd_SOURCE:-} \
217+
-G "${CMAKE_GENERATOR:-Ninja}" \
218+
${ARROW_CMAKE_ARGS} \
219+
${source_dir}
220+
fi
201221

202222
export CMAKE_BUILD_PARALLEL_LEVEL=${CMAKE_BUILD_PARALLEL_LEVEL:-$[${n_jobs} + 1]}
203223
time cmake --build . --target install

ci/scripts/cpp_test.sh

+4
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@ case "$(uname)" in
8080
;;
8181
esac
8282

83+
if [ "${ARROW_EMSCRIPTEN:-OFF}" = "ON" ]; then
84+
n_jobs=1 # avoid spurious fails on emscripten due to loading too many big executables
85+
fi
86+
8387
pushd ${build_dir}
8488

8589
if [ -z "${PYTHON}" ] && ! which python > /dev/null 2>&1; then

ci/scripts/go_bench.sh

100644100755
File mode changed.

cpp/CMakePresets.json

+45-1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,32 @@
4646
"CMAKE_BUILD_TYPE": "RelWithDebInfo"
4747
}
4848
},
49+
{
50+
"name": "features-emscripten",
51+
"hidden": true,
52+
"cacheVariables": {
53+
"ARROW_ACERO": "ON",
54+
"ARROW_BUILD_SHARED": "OFF",
55+
"ARROW_BUILD_STATIC": "ON",
56+
"ARROW_CUDA": "OFF",
57+
"ARROW_DEPENDENCY_SOURCE": "BUNDLED",
58+
"ARROW_DEPENDENCY_USE_SHARED": "OFF",
59+
"ARROW_ENABLE_THREADING": "OFF",
60+
"ARROW_FLIGHT": "OFF",
61+
"ARROW_IPC": "ON",
62+
"ARROW_JEMALLOC": "OFF",
63+
"ARROW_MIMALLOC": "OFF",
64+
"ARROW_ORC": "ON",
65+
"ARROW_RUNTIME_SIMD_LEVEL": "NONE",
66+
"ARROW_S3": "OFF",
67+
"ARROW_SIMD_LEVEL": "NONE",
68+
"ARROW_SUBSTRAIT": "ON",
69+
"ARROW_WITH_BROTLI": "ON",
70+
"ARROW_WITH_OPENTELEMETRY": "OFF",
71+
"ARROW_WITH_SNAPPY": "ON",
72+
"CMAKE_C_BYTE_ORDER": "LITTLE_ENDIAN"
73+
}
74+
},
4975
{
5076
"name": "features-minimal",
5177
"hidden": true,
@@ -341,6 +367,24 @@
341367
"displayName": "Release build with CUDA integration",
342368
"cacheVariables": {}
343369
},
370+
{
371+
"name": "ninja-debug-emscripten",
372+
"inherits": [
373+
"features-emscripten",
374+
"base-debug"
375+
],
376+
"displayName": "Debug build which builds an Emscripten library",
377+
"cacheVariables": {}
378+
},
379+
{
380+
"name": "ninja-release-emscripten",
381+
"inherits": [
382+
"features-emscripten",
383+
"base-release"
384+
],
385+
"displayName": "Release build which builds an Emscripten library",
386+
"cacheVariables": {}
387+
},
344388
{
345389
"name": "ninja-release-flight",
346390
"inherits": [
@@ -447,4 +491,4 @@
447491
}
448492
}
449493
]
450-
}
494+
}
+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Licensed to the Apache Software Foundation (ASF) under one
2+
// or more contributor license agreements. See the NOTICE file
3+
// distributed with this work for additional information
4+
// regarding copyright ownership. The ASF licenses this file
5+
// to you under the Apache License, Version 2.0 (the
6+
// "License"); you may not use this file except in compliance
7+
// with the License. You may obtain a copy of the License at
8+
//
9+
// http://www.apache.org/licenses/LICENSE-2.0
10+
//
11+
// Unless required by applicable law or agreed to in writing,
12+
// software distributed under the License is distributed on an
13+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
// KIND, either express or implied. See the License for the
15+
// specific language governing permissions and limitations
16+
// under the License.
17+
18+
var Module = {
19+
};
20+
21+
// make sure tests can access the current parquet test data files
22+
Module.preRun = () => {ENV.PARQUET_TEST_DATA = process.env.PARQUET_TEST_DATA;
23+
ENV.ARROW_TEST_DATA = process.env.ARROW_TEST_DATA;
24+
};

cpp/cmake_modules/BuildUtils.cmake

+2-2
Original file line numberDiff line numberDiff line change
@@ -760,8 +760,8 @@ function(ADD_TEST_CASE REL_TEST_NAME)
760760
valgrind --suppressions=valgrind.supp --tool=memcheck --gen-suppressions=all \
761761
--num-callers=500 --leak-check=full --leak-check-heuristics=stdstring \
762762
--error-exitcode=1 ${TEST_PATH} ${ARG_TEST_ARGUMENTS}")
763-
elseif(WIN32)
764-
add_test(${TEST_NAME} ${TEST_PATH} ${ARG_TEST_ARGUMENTS})
763+
elseif(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
764+
add_test(NAME ${TEST_NAME} COMMAND ${TEST_NAME} ${ARG_TEST_ARGUMENTS})
765765
else()
766766
add_test(${TEST_NAME}
767767
${BUILD_SUPPORT_DIR}/run-test.sh

0 commit comments

Comments
 (0)