Skip to content

Commit a9b2d19

Browse files
committed
update cross build script
1 parent c47ae13 commit a9b2d19

3 files changed

Lines changed: 54 additions & 27 deletions

File tree

.github/workflows/backend.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ jobs:
2424
VCPKG_TRIPLET: x64-windows-static
2525
TOOLCHAIN_FILE: ${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake
2626
steps:
27-
- uses: actions/checkout@v4
27+
- uses: actions/checkout@v6
2828
- name: Checkout vcpkg
29-
uses: actions/checkout@v4
29+
uses: actions/checkout@v6
3030
with:
3131
repository: microsoft/vcpkg
3232
path: vcpkg
@@ -44,7 +44,7 @@ jobs:
4444
$env:VCPKG_ROOT = "${{ env.VCPKG_ROOT }}"
4545
cmake -S . -B build -G "Visual Studio 17 2022" -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE="${{ env.TOOLCHAIN_FILE }}" -DVCPKG_TARGET_TRIPLET=${{ env.VCPKG_TRIPLET }}
4646
cmake --build build --config Release
47-
- uses: actions/upload-artifact@v4
47+
- uses: actions/upload-artifact@v7
4848
with:
4949
name: ttyd.msvc
5050
path: build/Release/ttyd.exe
@@ -53,7 +53,7 @@ jobs:
5353
strategy:
5454
fail-fast: false
5555
matrix:
56-
target: [i686, x86_64, arm, armhf, aarch64, mips, mipsel, mips64, mips64el, s390x, win32]
56+
target: [i686, x86_64, arm, armhf, aarch64, mips, mipsel, mips64, mips64el, ppc64, ppc64le, s390x, win32]
5757
steps:
5858
- uses: actions/checkout@v6
5959
- name: Install packages

CMakeLists.txt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,8 @@ if(LWS_OPENSSL_ENABLED AND NOT LWS_MBEDTLS_ENABLED)
8686
endif()
8787

8888
if(WIN32)
89-
list(APPEND LINK_LIBS shell32 ws2_32)
89+
# libuv static requires dbghelp for MiniDumpWriteDump/Sym* APIs
90+
list(APPEND LINK_LIBS shell32 ws2_32 dbghelp)
9091
if(MSVC)
9192
find_package(getopt CONFIG)
9293
if(getopt_FOUND)
@@ -96,8 +97,6 @@ if(WIN32)
9697
list(APPEND LINK_LIBS getopt::getopt_static)
9798
endif()
9899
endif()
99-
# libuv static requires dbghelp for MiniDumpWriteDump/Sym* APIs
100-
list(APPEND LINK_LIBS dbghelp)
101100
endif()
102101
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/app.rc.in ${CMAKE_CURRENT_BINARY_DIR}/app.rc @ONLY)
103102
list(APPEND SOURCE_FILES ${CMAKE_CURRENT_BINARY_DIR}/app.rc)

scripts/cross-build.sh

Lines changed: 48 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ BUILD_ROOT="${BUILD_ROOT:-/opt/build}"
1111
BUILD_TARGET="${BUILD_TARGET:-x86_64}"
1212

1313
ZLIB_VERSION="${ZLIB_VERSION:-1.3.2}"
14-
JSON_C_VERSION="${JSON_C_VERSION:-0.17}"
15-
MBEDTLS_VERSION="${MBEDTLS_VERSION:-2.28.5}"
16-
LIBUV_VERSION="${LIBUV_VERSION:-1.44.2}"
17-
LIBWEBSOCKETS_VERSION="${LIBWEBSOCKETS_VERSION:-4.3.6}"
14+
JSON_C_VERSION="${JSON_C_VERSION:-0.18}"
15+
OPENSSL_VERSION="${OPENSSL_VERSION:-3.6.1}"
16+
LIBUV_VERSION="${LIBUV_VERSION:-1.52.1}"
17+
LIBWEBSOCKETS_VERSION="${LIBWEBSOCKETS_VERSION:-4.5.7}"
1818

1919
build_zlib() {
2020
echo "=== Building zlib-${ZLIB_VERSION} (${TARGET})..."
@@ -41,17 +41,37 @@ build_json-c() {
4141
popd
4242
}
4343

44-
build_mbedtls() {
45-
echo "=== Building mbedtls-${MBEDTLS_VERSION} (${TARGET})..."
46-
curl -fSsLo- "https://github.com/ARMmbed/mbedtls/archive/v${MBEDTLS_VERSION}.tar.gz" | tar xz -C "${BUILD_DIR}"
47-
pushd "${BUILD_DIR}/mbedtls-${MBEDTLS_VERSION}"
48-
rm -rf build && mkdir -p build && cd build
49-
cmake -DCMAKE_TOOLCHAIN_FILE="${BUILD_DIR}/cross-${TARGET}.cmake" \
50-
-DCMAKE_BUILD_TYPE=RELEASE \
51-
-DCMAKE_INSTALL_PREFIX="${STAGE_DIR}" \
52-
-DENABLE_TESTING=OFF \
53-
..
54-
make -j"$(nproc)" install
44+
map_openssl_target() {
45+
case $1 in
46+
i686) echo linux-generic32 ;;
47+
x86_64) echo linux-x86_64 ;;
48+
arm|armhf|armv7l) echo linux-armv4 ;;
49+
aarch64) echo linux-aarch64 ;;
50+
mips|mipsel) echo linux-mips32 ;;
51+
mips64|mips64el) echo linux64-mips64 ;;
52+
powerpc64) echo linux-ppc64 ;;
53+
powerpc64le) echo linux-ppc64le ;;
54+
s390x) echo linux64-s390x ;;
55+
win32) echo mingw64 ;;
56+
*) echo "unknown openssl target: $1" && exit 1
57+
esac
58+
}
59+
60+
build_openssl() {
61+
openssl_target=$(map_openssl_target "${BUILD_TARGET}")
62+
echo "=== Building openssl-${OPENSSL_VERSION} (${openssl_target})..."
63+
curl -sLo- "https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz" | tar xz -C "${BUILD_DIR}"
64+
pushd "${BUILD_DIR}/openssl-${OPENSSL_VERSION}"
65+
openssl_cflags="-fPIC -latomic"
66+
case ${BUILD_TARGET} in
67+
s390x) openssl_cflags="${openssl_cflags} -march=z10" ;;
68+
win32)
69+
curl -sLo- https://github.com/openssl/openssl/pull/29826.patch | patch -p1
70+
;;
71+
esac
72+
env CC=gcc CROSS_COMPILE="${TARGET}-" CFLAGS="${openssl_cflags}" \
73+
./Configure "${openssl_target}" no-ssl3 no-err -DOPENSSL_SMALL_FOOTPRINT --prefix="${STAGE_DIR}" \
74+
&& make -j"$(nproc)" all > /dev/null && make install_sw
5575
popd
5676
}
5777

@@ -86,16 +106,14 @@ build_libwebsockets() {
86106
curl -fSsLo- "https://github.com/warmcat/libwebsockets/archive/v${LIBWEBSOCKETS_VERSION}.tar.gz" | tar xz -C "${BUILD_DIR}"
87107
pushd "${BUILD_DIR}/libwebsockets-${LIBWEBSOCKETS_VERSION}"
88108
sed -i 's/ websockets_shared//g' cmake/libwebsockets-config.cmake.in
89-
sed -i 's/ OR PC_OPENSSL_FOUND//g' lib/tls/CMakeLists.txt
90-
sed -i '/PC_OPENSSL/d' lib/tls/CMakeLists.txt
91109
rm -rf build && mkdir -p build && cd build
92110
cmake -DCMAKE_TOOLCHAIN_FILE="${BUILD_DIR}/cross-${TARGET}.cmake" \
93111
-DCMAKE_BUILD_TYPE=RELEASE \
94112
-DCMAKE_INSTALL_PREFIX="${STAGE_DIR}" \
95113
-DCMAKE_FIND_LIBRARY_SUFFIXES=".a" \
96114
-DCMAKE_EXE_LINKER_FLAGS="-static" \
97115
-DLWS_WITHOUT_TESTAPPS=ON \
98-
-DLWS_WITH_MBEDTLS=ON \
116+
-DLWS_WITH_SSL=ON \
99117
-DLWS_WITH_LIBUV=ON \
100118
-DLWS_STATIC_PIC=ON \
101119
-DLWS_WITH_SHARED=OFF \
@@ -104,13 +122,21 @@ build_libwebsockets() {
104122
-DLWS_ROLE_RAW_FILE=OFF \
105123
-DLWS_WITH_HTTP2=ON \
106124
-DLWS_WITH_HTTP_BASIC_AUTH=OFF \
125+
-DLWS_WITH_HTTP_STREAM_COMPRESSION=ON \
107126
-DLWS_WITH_UDP=OFF \
108127
-DLWS_WITHOUT_CLIENT=ON \
109128
-DLWS_WITHOUT_EXTENSIONS=OFF \
110129
-DLWS_WITH_LEJP=OFF \
111130
-DLWS_WITH_LEJP_CONF=OFF \
112131
-DLWS_WITH_LWSAC=OFF \
113132
-DLWS_WITH_SEQUENCER=OFF \
133+
-DLWS_WITH_UPNG=OFF \
134+
-DLWS_WITH_JPEG=OFF \
135+
-DLWS_WITH_DLO=OFF \
136+
-DLWS_WITH_SYS_STATE=OFF \
137+
-DLWS_WITH_SYS_SMD=OFF \
138+
-DLWS_WITH_SECURE_STREAMS=OFF \
139+
-DLWS_CTEST_INTERNET_AVAILABLE=OFF \
114140
..
115141
make -j"$(nproc)" install
116142
popd
@@ -159,7 +185,7 @@ build() {
159185
build_zlib
160186
build_json-c
161187
build_libuv
162-
build_mbedtls
188+
build_openssl
163189
build_libwebsockets
164190
build_ttyd
165191
}
@@ -168,10 +194,12 @@ case ${BUILD_TARGET} in
168194
amd64) BUILD_TARGET="x86_64" ;;
169195
arm64) BUILD_TARGET="aarch64" ;;
170196
armv7) BUILD_TARGET="armv7l" ;;
197+
ppc64) BUILD_TARGET="powerpc64" ;;
198+
ppc64le) BUILD_TARGET="powerpc64le" ;;
171199
esac
172200

173201
case ${BUILD_TARGET} in
174-
i686|x86_64|aarch64|mips|mipsel|mips64|mips64el|s390x)
202+
i686|x86_64|aarch64|mips|mipsel|mips64|mips64el|powerpc64|powerpc64le|s390x)
175203
build "${BUILD_TARGET}-linux-musl" "${BUILD_TARGET}"
176204
;;
177205
arm)

0 commit comments

Comments
 (0)