Skip to content

Commit 771e14b

Browse files
authored
GH-47643: [Python][Packaging] Enable CMAKE_INTERPROCEDURAL_OPTIMIZATION for wheels (#47733)
### Rationale for this change Experimentation in #47637 suggested that [enabling inter-procedural optimization (IPO)](https://cmake.org/cmake/help/latest/variable/CMAKE_INTERPROCEDURAL_OPTIMIZATION.html) could not only improve performance in some workloads, but also reduce the code size of Arrow libraries. There's around 2% size reduction on the tested examples: |wheel|size| |---------|--------| |last successful nightly `wheel-manylinux-2-28-cp312-cp312-arm64` | 44605918 bytes| |with change `wheel-manylinux-2-28-cp312-cp312-arm64` | 43807946 bytes| |last successful nightly `wheel-windows-cp311-cp311-amd64` | 28093080 bytes| |with change `wheel-windows-cp311-cp311-amd64` | 27391407 bytes| ### What changes are included in this PR? Add `-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON` to Arrow C++ and wheels for both manylinux and windows. ### Are these changes tested? Yes via CI ### Are there any user-facing changes? No * GitHub Issue: #47643 Authored-by: Raúl Cumplido <[email protected]> Signed-off-by: Raúl Cumplido <[email protected]>
1 parent 349d232 commit 771e14b

File tree

3 files changed

+12
-1
lines changed

3 files changed

+12
-1
lines changed

ci/scripts/python_wheel_windows_build.bat

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ set ARROW_WITH_LZ4=ON
5555
set ARROW_WITH_SNAPPY=ON
5656
set ARROW_WITH_ZLIB=ON
5757
set ARROW_WITH_ZSTD=ON
58+
set CMAKE_INTERPROCEDURAL_OPTIMIZATION=ON
5859
set CMAKE_UNITY_BUILD=ON
5960
set CMAKE_GENERATOR=Visual Studio 17 2022
6061
set CMAKE_PLATFORM=x64
@@ -96,6 +97,7 @@ cmake ^
9697
-DARROW_WITH_ZSTD=%ARROW_WITH_ZSTD% ^
9798
-DCMAKE_BUILD_TYPE=%CMAKE_BUILD_TYPE% ^
9899
-DCMAKE_INSTALL_PREFIX=C:\arrow-dist ^
100+
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=%CMAKE_INTERPROCEDURAL_OPTIMIZATION% ^
99101
-DCMAKE_UNITY_BUILD=%CMAKE_UNITY_BUILD% ^
100102
-DMSVC_LINK_VERBOSE=ON ^
101103
-DPARQUET_REQUIRE_ENCRYPTION=%PARQUET_REQUIRE_ENCRYPTION% ^
@@ -113,6 +115,7 @@ set PYARROW_BUILD_TYPE=%CMAKE_BUILD_TYPE%
113115
set PYARROW_BUILD_VERBOSE=1
114116
set PYARROW_BUNDLE_ARROW_CPP=ON
115117
set PYARROW_CMAKE_GENERATOR=%CMAKE_GENERATOR%
118+
set PYARROW_CMAKE_OPTIONS="-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=%CMAKE_INTERPROCEDURAL_OPTIMIZATION%"
116119
set PYARROW_WITH_ACERO=%ARROW_ACERO%
117120
set PYARROW_WITH_DATASET=%ARROW_DATASET%
118121
set PYARROW_WITH_FLIGHT=%ARROW_FLIGHT%

ci/scripts/python_wheel_xlinux_build.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,12 @@ else
8585
: ${ARROW_JEMALLOC:=ON}
8686
fi
8787

88+
if [[ "${LINUX_WHEEL_KIND:-}" == "musllinux" ]]; then
89+
: ${CMAKE_INTERPROCEDURAL_OPTIMIZATION:=OFF}
90+
else
91+
: ${CMAKE_INTERPROCEDURAL_OPTIMIZATION:=ON}
92+
fi
93+
8894
mkdir /tmp/arrow-build
8995
pushd /tmp/arrow-build
9096

@@ -124,6 +130,7 @@ cmake \
124130
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} \
125131
-DCMAKE_INSTALL_LIBDIR=lib \
126132
-DCMAKE_INSTALL_PREFIX=/tmp/arrow-dist \
133+
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=${CMAKE_INTERPROCEDURAL_OPTIMIZATION} \
127134
-DCMAKE_UNITY_BUILD=${CMAKE_UNITY_BUILD} \
128135
-DPARQUET_REQUIRE_ENCRYPTION=${PARQUET_REQUIRE_ENCRYPTION} \
129136
-DVCPKG_MANIFEST_MODE=OFF \
@@ -142,6 +149,7 @@ echo "=== (${PYTHON_VERSION}) Building wheel ==="
142149
export PYARROW_BUILD_TYPE=${CMAKE_BUILD_TYPE}
143150
export PYARROW_BUNDLE_ARROW_CPP=1
144151
export PYARROW_CMAKE_GENERATOR=${CMAKE_GENERATOR}
152+
export PYARROW_CMAKE_OPTIONS="-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=${CMAKE_INTERPROCEDURAL_OPTIMIZATION}"
145153
export PYARROW_WITH_ACERO=${ARROW_ACERO}
146154
export PYARROW_WITH_AZURE=${ARROW_AZURE}
147155
export PYARROW_WITH_DATASET=${ARROW_DATASET}

dev/tasks/python-wheels/github.linux.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
runs-on: ubuntu-24.04-arm
3232
{% endif %}
3333
env:
34-
{% if linux_wheel_kind == "musllinux" and linux_wheel_version == "1-2" %}
34+
{% if linux_wheel_kind == "musllinux" %}
3535
ALPINE_LINUX: "3.22"
3636
{% endif %}
3737
# archery uses these environment variables

0 commit comments

Comments
 (0)