Skip to content

Commit f1f4ac9

Browse files
committed
Now unify in-place build/CI build scripts
1 parent 1a9c401 commit f1f4ac9

File tree

3 files changed

+108
-195
lines changed

3 files changed

+108
-195
lines changed

.github/workflows/wheels.yml

+4-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ on:
44
push:
55
branches:
66
- master
7+
- cibuildwheel
78
tags:
89
- 'v*'
910

@@ -29,10 +30,11 @@ jobs:
2930
- name: Build wheels
3031
uses: pypa/[email protected]
3132
env:
32-
CIBW_BEFORE_ALL: sh install-deps.sh
33-
CIBW_ENVIRONMENT: LIBGIT2_VERSION=1.3.0 LIBSSH2_VERSION=1.10.0
33+
CIBW_BEFORE_ALL: sh build.sh
34+
CIBW_ENVIRONMENT: LIBGIT2_VERSION=1.3.0 LIBSSH2_VERSION=1.10.0 LIBGIT2=/project/ci
3435
CIBW_ENVIRONMENT_MACOS: LIBGIT2_VERSION=1.3.0 LIBSSH2_VERSION=1.10.0 DYLD_LIBRARY_PATH=/usr/local/lib OPENSSL_VERSION=3.0.0
3536
CIBW_SKIP: "*-musllinux*"
37+
CIBW_REPAIR_WHEEL_COMMAND_LINUX: "DYLD_LIBRARY_PATH=/project/ci/lib64 auditwheel repair -w {dest_dir} {wheel}"
3638
CIBW_REPAIR_WHEEL_COMMAND_MACOS: "DYLD_LIBRARY_PATH=/usr/local/lib delocate-listdeps {wheel} && DYLD_LIBRARY_PATH=/usr/local/lib delocate-wheel --require-archs {delocate_archs} -w {dest_dir} {wheel}"
3739
CIBW_ARCHS_MACOS: x86_64 universal2
3840
CIBW_ARCHS_LINUX: x86_64 aarch64

build.sh

+104-16
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
# LIBSSH2_OPENSSL - Where to find openssl
1313
# LIBSSH2_PREFIX - Where to find libssh2
1414
# LIBSSH2_VERSION=<Version> - Build the given version of libssh2
15-
# LIBGIT2_VERSION=<Versoin> - Build the given version of libgit2
15+
# LIBGIT2_VERSION=<Version> - Build the given version of libgit2
16+
# OPENSSL_VERSION=<Version> - Build the given version of OpenSSL
17+
# (only needed for Mac universal on CI)
1618
#
1719
# Either use LIBSSH2_PREFIX, or LIBSSH2_VERSION, or none (if libssh2 is already
1820
# in the path, or if you don't want to use it).
@@ -55,13 +57,24 @@ KERNEL=`uname -s`
5557
BUILD_TYPE=${BUILD_TYPE:-Debug}
5658
PYTHON=${PYTHON:-python3}
5759

58-
PYTHON_TAG=$($PYTHON build_tag.py)
60+
if [ "$CIBUILDWHEEL" != "1" ]; then
61+
PYTHON_TAG=$($PYTHON build_tag.py)
62+
fi
63+
5964
PREFIX="${PREFIX:-$(pwd)/ci/$PYTHON_TAG}"
6065
export LDFLAGS="-Wl,-rpath,$PREFIX/lib"
6166

62-
# Create a virtual environment
63-
$PYTHON -m venv $PREFIX
64-
cd ci
67+
if [ "$CIBUILDWHEEL" = "1" ]; then
68+
rm -rf ci
69+
mkdir ci || true
70+
cd ci
71+
if [ "$KERNEL" = "Linux" ]; then
72+
yum install wget openssl-devel libssh2-devel zlib-devel -y
73+
fi
74+
else
75+
# Create a virtual environment
76+
$PYTHON -m venv $PREFIX
77+
fi
6578

6679
# Install zlib
6780
# XXX Build libgit2 with USE_BUNDLED_ZLIB instead?
@@ -76,17 +89,67 @@ if [ -n "$ZLIB_VERSION" ]; then
7689
cd ..
7790
fi
7891

92+
# Install openssl
93+
if [ -n "$OPENSSL_VERSION" ]; then
94+
if [ "$CIBUILDWHEEL" != "1" ] || [ "$KERNEL" != "Darwin" ]; then
95+
echo "OPENSSL_VERSION should only be set when building"
96+
echo "macOS universal2 wheels on GitHub!"
97+
echo "Please unset and try again"
98+
exit 1
99+
fi
100+
FILENAME=openssl-$OPENSSL_VERSION
101+
wget https://www.openssl.org/source/$FILENAME.tar.gz -N --no-check-certificate
102+
103+
tar xf $FILENAME.tar.gz
104+
mv $FILENAME openssl-x86
105+
106+
tar xf $FILENAME.tar.gz
107+
mv $FILENAME openssl-arm
108+
109+
cd openssl-x86
110+
./Configure darwin64-x86_64-cc shared
111+
make
112+
cd ../openssl-arm
113+
./Configure enable-rc5 zlib darwin64-arm64-cc no-asm
114+
make
115+
cd ..
116+
117+
mkdir openssl-universal
118+
119+
LIBSSL=$(basename openssl-x86/libssl.*.dylib)
120+
lipo -create openssl-x86/libssl.*.dylib openssl-arm/libssl.*.dylib -output openssl-universal/$LIBSSL
121+
LIBCRYPTO=$(basename openssl-x86/libcrypto.*.dylib)
122+
lipo -create openssl-x86/libcrypto.*.dylib openssl-arm/libcrypto.*.dylib -output openssl-universal/$LIBCRYPTO
123+
cd openssl-universal
124+
install_name_tool -id "@rpath/$LIBSSL" $LIBSSL
125+
install_name_tool -id "@rpath/$LIBCRYPTO" $LIBCRYPTO
126+
OPENSSL_PREFIX=$(pwd)
127+
cd ..
128+
fi
129+
79130
# Install libssh2
80131
if [ -n "$LIBSSH2_VERSION" ]; then
81132
FILENAME=libssh2-$LIBSSH2_VERSION
82133
wget https://www.libssh2.org/download/$FILENAME.tar.gz -N --no-check-certificate
83134
tar xf $FILENAME.tar.gz
84135
cd $FILENAME
85-
cmake . \
86-
-DCMAKE_INSTALL_PREFIX=$PREFIX \
87-
-DBUILD_SHARED_LIBS=ON \
88-
-DBUILD_EXAMPLES=OFF \
89-
-DBUILD_TESTING=OFF
136+
if [ "$KERNEL" = "Darwin" ] && [ "$CIBUILDWHEEL" = "1" ]; then
137+
cmake . \
138+
-DCMAKE_INSTALL_PREFIX=$PREFIX \
139+
-DBUILD_SHARED_LIBS=ON \
140+
-DBUILD_EXAMPLES=OFF \
141+
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
142+
-DOPENSSL_CRYPTO_LIBRARY="../openssl-universal/$LIBCRYPTO" \
143+
-DOPENSSL_SSL_LIBRARY="../openssl-universal/$LIBSSL" \
144+
-DOPENSSL_INCLUDE_DIR="../openssl-x86/include" \
145+
-DBUILD_TESTING=OFF
146+
else
147+
cmake . \
148+
-DCMAKE_INSTALL_PREFIX=$PREFIX \
149+
-DBUILD_SHARED_LIBS=ON \
150+
-DBUILD_EXAMPLES=OFF \
151+
-DBUILD_TESTING=OFF
152+
fi
90153
cmake --build . --target install
91154
cd ..
92155
LIBSSH2_PREFIX=$PREFIX
@@ -98,18 +161,43 @@ if [ -n "$LIBGIT2_VERSION" ]; then
98161
wget https://github.com/libgit2/libgit2/archive/refs/tags/v$LIBGIT2_VERSION.tar.gz -N -O $FILENAME.tar.gz
99162
tar xf $FILENAME.tar.gz
100163
cd $FILENAME
101-
CMAKE_PREFIX_PATH=$OPENSSL_PREFIX:$LIBSSH2_PREFIX cmake . \
102-
-DCMAKE_INSTALL_PREFIX=$PREFIX \
103-
-DBUILD_SHARED_LIBS=ON \
104-
-DBUILD_CLAR=OFF \
105-
-DCMAKE_BUILD_TYPE=$BUILD_TYPE
164+
if [ "$KERNEL" = "Darwin" ] && [ "$CIBUILDWHEEL" = "1" ]; then
165+
CMAKE_PREFIX_PATH=$OPENSSL_PREFIX:$LIBSSH2_PREFIX cmake . \
166+
-DBUILD_SHARED_LIBS=ON \
167+
-DBUILD_CLAR=OFF \
168+
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
169+
-DOPENSSL_CRYPTO_LIBRARY="../openssl-universal/$LIBCRYPTO" \
170+
-DOPENSSL_SSL_LIBRARY="../openssl-universal/$LIBSSL" \
171+
-DOPENSSL_INCLUDE_DIR="../openssl-x86/include" \
172+
-DCMAKE_BUILD_TYPE=$BUILD_TYPE
173+
else
174+
CMAKE_PREFIX_PATH=$OPENSSL_PREFIX:$LIBSSH2_PREFIX cmake . \
175+
-DCMAKE_INSTALL_PREFIX=$PREFIX \
176+
-DBUILD_SHARED_LIBS=ON \
177+
-DBUILD_CLAR=OFF \
178+
-DCMAKE_BUILD_TYPE=$BUILD_TYPE
179+
fi
106180
cmake --build . --target install
107181
cd ..
108182
export LIBGIT2=$PREFIX
109183
fi
110184

185+
if [ "$CIBUILDWHEEL" = "1" ]; then
186+
# This is gross. auditwheel/delocate-wheel are not so good
187+
# at finding libraries in random places, so we have to
188+
# put them in the loader path.
189+
if [ "$KERNEL" = "Darwin" ]; then
190+
cp -r $OPENSSL_PREFIX/*.dylib /usr/local/lib
191+
cp -r $LIBSSH2_PREFIX/lib/*.dylib /usr/local/lib
192+
cp -r $FILENAME/*.dylib /usr/local/lib
193+
else
194+
cp -r $PREFIX/lib64/*.so* /usr/local/lib
195+
fi
196+
# we're done building dependencies, cibuildwheel action will take over
197+
exit 0
198+
fi
199+
111200
# Build pygit2
112-
cd ..
113201
$PREFIX/bin/pip install -U pip wheel
114202
if [ "$1" = "wheel" ]; then
115203
shift

install-deps.sh

-177
This file was deleted.

0 commit comments

Comments
 (0)