Skip to content

Commit a485852

Browse files
committed
ci(client-cpp): fix glibc217 toolchain; replace glibc224 with glibc228 packages
Use manylinux image default gcc/g++ without GLIBCXX macros. glibc228 builds on manylinux_2_28 (glibc max 2.28). Remove IOTDB_EXTRA_CXX_FLAGS wiring.
1 parent 1d65f66 commit a485852

9 files changed

Lines changed: 99 additions & 199 deletions

File tree

.github/scripts/package-client-cpp-manylinux-glibc217.sh

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,10 @@
1414
# See the License for the specific language governing permissions and
1515
# limitations under the License.
1616
#
17-
# Legacy libstdc++ ABI (_GLIBCXX_USE_CXX11_ABI=0) on manylinux2014; max glibc 2.17.
17+
# manylinux2014 baseline package; image default toolchain; max glibc 2.17.
1818
set -euxo pipefail
1919

2020
MAX_GLIBC=2.17
21-
IOTDB_EXTRA_CXX_FLAGS=-D_GLIBCXX_USE_CXX11_ABI=0
2221

2322
MACHINE=$(uname -m)
2423
case "${MACHINE}" in
@@ -64,31 +63,18 @@ fi
6463
export PATH="${CMAKE_DIR}/bin:${JAVA_HOME}/bin:${PATH}"
6564
export JAVA_HOME
6665

67-
# manylinux images expose gcc under devtoolset paths, not /usr/bin/gcc.
68-
SYSTEM_GCC=$(command -v gcc)
69-
SYSTEM_GXX=$(command -v g++)
70-
if [[ -z "${SYSTEM_GCC}" || ! -x "${SYSTEM_GCC}" ]]; then
71-
echo "ERROR: gcc not found on PATH" >&2
72-
exit 1
73-
fi
74-
if [[ -z "${SYSTEM_GXX}" || ! -x "${SYSTEM_GXX}" ]]; then
75-
echo "ERROR: g++ not found on PATH" >&2
76-
exit 1
77-
fi
78-
79-
export CC="${SYSTEM_GCC}"
80-
export CXX="${SYSTEM_GXX}"
81-
82-
"${SYSTEM_GCC}" --version
83-
"${SYSTEM_GXX}" --version
66+
echo "=== Toolchain (image default) ==="
67+
command -v gcc g++ || true
68+
gcc --version | head -1
69+
g++ --version | head -1
70+
g++ -dM -E -x c++ /dev/null | grep GLIBCXX_USE_CXX11_ABI || true
8471
cmake --version
8572
java -version
8673

8774
cd "${GITHUB_WORKSPACE:?GITHUB_WORKSPACE is not set}"
8875
./mvnw clean package -P with-cpp -pl iotdb-client/client-cpp -am -DskipTests \
8976
-Dspotless.skip=true \
90-
-Dclient.cpp.package.classifier="${PACKAGE_CLASSIFIER}" \
91-
"-Diotdb.extra.cxx.flags=${IOTDB_EXTRA_CXX_FLAGS}"
77+
-Dclient.cpp.package.classifier="${PACKAGE_CLASSIFIER}"
9278

9379
SO="iotdb-client/client-cpp/target/install/lib/libiotdb_session.so"
9480
test -f "${SO}"
@@ -116,7 +102,7 @@ fi
116102

117103
echo "glibc compatibility check passed (max=${max_glibc} <= ${MAX_GLIBC})"
118104

119-
echo "=== Optional example link test (legacy ABI) ==="
105+
echo "=== Example link test (image default g++) ==="
120106
INSTALL_ROOT="${GITHUB_WORKSPACE}/iotdb-client/client-cpp/target/install"
121107
EXAMPLE_SRC="${GITHUB_WORKSPACE}/example/client-cpp-example/src"
122108
LINKTEST_BUILD="/tmp/client-cpp-example-linktest-glibc217"
@@ -125,8 +111,7 @@ mkdir -p "${LINKTEST_BUILD}"
125111
unset CC CXX CFLAGS CXXFLAGS
126112
"${CMAKE_DIR}/bin/cmake" -S "${EXAMPLE_SRC}" -B "${LINKTEST_BUILD}" \
127113
-DCMAKE_BUILD_TYPE=Release \
128-
-DIOTDB_SDK_ROOT="${INSTALL_ROOT}" \
129-
-DCMAKE_CXX_FLAGS=-D_GLIBCXX_USE_CXX11_ABI=0
114+
-DIOTDB_SDK_ROOT="${INSTALL_ROOT}"
130115
"${CMAKE_DIR}/bin/cmake" --build "${LINKTEST_BUILD}" --target SessionExample -j"$(nproc)"
131116
test -x "${LINKTEST_BUILD}/SessionExample"
132117
echo "Example link test passed"

.github/scripts/package-client-cpp-manylinux-glibc224.sh renamed to .github/scripts/package-client-cpp-manylinux-glibc228.sh

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,22 @@
1414
# See the License for the specific language governing permissions and
1515
# limitations under the License.
1616
#
17-
# cxx11 libstdc++ ABI on manylinux_2_24; max glibc 2.24.
17+
# manylinux_2_28 baseline package; image default toolchain; max glibc 2.28.
1818
set -euxo pipefail
1919

20-
MAX_GLIBC=2.24
21-
IOTDB_EXTRA_CXX_FLAGS=-D_GLIBCXX_USE_CXX11_ABI=1
20+
MAX_GLIBC=2.28
2221

2322
MACHINE=$(uname -m)
2423
case "${MACHINE}" in
2524
x86_64)
2625
CMAKE_PKG_ARCH=linux-x86_64
2726
JDK_API_ARCH=linux/x64
28-
DEFAULT_CLASSIFIER=linux-x86_64-glibc224
27+
DEFAULT_CLASSIFIER=linux-x86_64-glibc228
2928
;;
3029
aarch64)
3130
CMAKE_PKG_ARCH=linux-aarch64
3231
JDK_API_ARCH=linux/aarch64
33-
DEFAULT_CLASSIFIER=linux-aarch64-glibc224
32+
DEFAULT_CLASSIFIER=linux-aarch64-glibc228
3433
;;
3534
*)
3635
echo "Unsupported architecture: ${MACHINE}" >&2
@@ -64,30 +63,18 @@ fi
6463
export PATH="${CMAKE_DIR}/bin:${JAVA_HOME}/bin:${PATH}"
6564
export JAVA_HOME
6665

67-
SYSTEM_GCC=$(command -v gcc)
68-
SYSTEM_GXX=$(command -v g++)
69-
if [[ -z "${SYSTEM_GCC}" || ! -x "${SYSTEM_GCC}" ]]; then
70-
echo "ERROR: gcc not found on PATH" >&2
71-
exit 1
72-
fi
73-
if [[ -z "${SYSTEM_GXX}" || ! -x "${SYSTEM_GXX}" ]]; then
74-
echo "ERROR: g++ not found on PATH" >&2
75-
exit 1
76-
fi
77-
78-
export CC="${SYSTEM_GCC}"
79-
export CXX="${SYSTEM_GXX}"
80-
81-
"${SYSTEM_GCC}" --version
82-
"${SYSTEM_GXX}" --version
66+
echo "=== Toolchain (image default) ==="
67+
command -v gcc g++ || true
68+
gcc --version | head -1
69+
g++ --version | head -1
70+
g++ -dM -E -x c++ /dev/null | grep GLIBCXX_USE_CXX11_ABI || true
8371
cmake --version
8472
java -version
8573

8674
cd "${GITHUB_WORKSPACE:?GITHUB_WORKSPACE is not set}"
8775
./mvnw clean package -P with-cpp -pl iotdb-client/client-cpp -am -DskipTests \
8876
-Dspotless.skip=true \
89-
-Dclient.cpp.package.classifier="${PACKAGE_CLASSIFIER}" \
90-
"-Diotdb.extra.cxx.flags=${IOTDB_EXTRA_CXX_FLAGS}"
77+
-Dclient.cpp.package.classifier="${PACKAGE_CLASSIFIER}"
9178

9279
SO="iotdb-client/client-cpp/target/install/lib/libiotdb_session.so"
9380
test -f "${SO}"
@@ -115,17 +102,16 @@ fi
115102

116103
echo "glibc compatibility check passed (max=${max_glibc} <= ${MAX_GLIBC})"
117104

118-
echo "=== Optional example link test (cxx11 ABI) ==="
105+
echo "=== Example link test (image default g++) ==="
119106
INSTALL_ROOT="${GITHUB_WORKSPACE}/iotdb-client/client-cpp/target/install"
120107
EXAMPLE_SRC="${GITHUB_WORKSPACE}/example/client-cpp-example/src"
121-
LINKTEST_BUILD="/tmp/client-cpp-example-linktest-glibc224"
108+
LINKTEST_BUILD="/tmp/client-cpp-example-linktest-glibc228"
122109
rm -rf "${LINKTEST_BUILD}"
123110
mkdir -p "${LINKTEST_BUILD}"
124111
unset CC CXX CFLAGS CXXFLAGS
125112
"${CMAKE_DIR}/bin/cmake" -S "${EXAMPLE_SRC}" -B "${LINKTEST_BUILD}" \
126113
-DCMAKE_BUILD_TYPE=Release \
127-
-DIOTDB_SDK_ROOT="${INSTALL_ROOT}" \
128-
-DCMAKE_CXX_FLAGS=-D_GLIBCXX_USE_CXX11_ABI=1
114+
-DIOTDB_SDK_ROOT="${INSTALL_ROOT}"
129115
"${CMAKE_DIR}/bin/cmake" --build "${LINKTEST_BUILD}" --target SessionExample -j"$(nproc)"
130116
test -x "${LINKTEST_BUILD}/SessionExample"
131117
echo "Example link test passed"

.github/workflows/client-cpp-package.yml

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -257,33 +257,33 @@ jobs:
257257
path: ${{ steps.pkg.outputs.path }}
258258
if-no-files-found: error
259259

260-
package-linux-glibc224:
261-
name: Package (linux-x86_64-glibc224)
260+
package-linux-glibc228:
261+
name: Package (linux-x86_64-glibc228)
262262
needs: [should-package, resolve-matrix]
263263
if: needs.should-package.outputs.run == 'true' && needs.resolve-matrix.outputs.run_linux == 'true'
264-
# Checkout/cache on host; build in manylinux_2_24 via docker run (glibc 2.24 baseline, cxx11 ABI).
264+
# Checkout/cache on host; build in manylinux_2_28 via docker run (glibc 2.28 baseline).
265265
runs-on: ubuntu-latest
266266
steps:
267267
- uses: actions/checkout@v5
268268
- name: Cache Maven packages
269269
uses: actions/cache@v5
270270
with:
271271
path: ~/.m2
272-
key: linux-glibc224-m2-${{ hashFiles('**/pom.xml') }}
272+
key: linux-glibc228-m2-${{ hashFiles('**/pom.xml') }}
273273
restore-keys: |
274-
linux-glibc224-m2-
275-
- name: Package client-cpp (glibc 2.24 baseline, cxx11 ABI)
274+
linux-glibc228-m2-
275+
- name: Package client-cpp (glibc 2.28 baseline)
276276
shell: bash
277277
run: |
278278
set -euxo pipefail
279-
chmod +x .github/scripts/package-client-cpp-manylinux-glibc224.sh
279+
chmod +x .github/scripts/package-client-cpp-manylinux-glibc228.sh
280280
docker run --rm \
281281
-v "${{ github.workspace }}:/workspace" \
282282
-v "${HOME}/.m2:/root/.m2" \
283283
-w /workspace \
284284
-e GITHUB_WORKSPACE=/workspace \
285-
quay.io/pypa/manylinux_2_24_x86_64 \
286-
bash .github/scripts/package-client-cpp-manylinux-glibc224.sh
285+
quay.io/pypa/manylinux_2_28_x86_64 \
286+
bash .github/scripts/package-client-cpp-manylinux-glibc228.sh
287287
- name: Restore workspace ownership after container build
288288
if: always()
289289
run: sudo chown -R "$(id -u):$(id -g)" "${{ github.workspace }}"
@@ -293,7 +293,7 @@ jobs:
293293
run: |
294294
set -euo pipefail
295295
shopt -s nullglob
296-
zips=(iotdb-client/client-cpp/target/client-cpp-*-linux-x86_64-glibc224.zip)
296+
zips=(iotdb-client/client-cpp/target/client-cpp-*-linux-x86_64-glibc228.zip)
297297
if [ "${#zips[@]}" -ne 1 ]; then
298298
echo "Expected exactly one package zip, got: ${zips[*]:-(none)}"
299299
exit 1
@@ -307,33 +307,33 @@ jobs:
307307
path: ${{ steps.pkg.outputs.path }}
308308
if-no-files-found: error
309309

310-
package-linux-aarch64-glibc224:
311-
name: Package (linux-aarch64-glibc224)
310+
package-linux-aarch64-glibc228:
311+
name: Package (linux-aarch64-glibc228)
312312
needs: [should-package, resolve-matrix]
313313
if: needs.should-package.outputs.run == 'true' && needs.resolve-matrix.outputs.run_linux == 'true'
314-
# Checkout/cache on host; build in manylinux_2_24 aarch64 via docker run.
314+
# Checkout/cache on host; build in manylinux_2_28 aarch64 via docker run.
315315
runs-on: ubuntu-22.04-arm
316316
steps:
317317
- uses: actions/checkout@v5
318318
- name: Cache Maven packages
319319
uses: actions/cache@v5
320320
with:
321321
path: ~/.m2
322-
key: linux-aarch64-glibc224-m2-${{ hashFiles('**/pom.xml') }}
322+
key: linux-aarch64-glibc228-m2-${{ hashFiles('**/pom.xml') }}
323323
restore-keys: |
324-
linux-aarch64-glibc224-m2-
325-
- name: Package client-cpp (glibc 2.24 baseline, cxx11 ABI)
324+
linux-aarch64-glibc228-m2-
325+
- name: Package client-cpp (glibc 2.28 baseline)
326326
shell: bash
327327
run: |
328328
set -euxo pipefail
329-
chmod +x .github/scripts/package-client-cpp-manylinux-glibc224.sh
329+
chmod +x .github/scripts/package-client-cpp-manylinux-glibc228.sh
330330
docker run --rm \
331331
-v "${{ github.workspace }}:/workspace" \
332332
-v "${HOME}/.m2:/root/.m2" \
333333
-w /workspace \
334334
-e GITHUB_WORKSPACE=/workspace \
335-
quay.io/pypa/manylinux_2_24_aarch64 \
336-
bash .github/scripts/package-client-cpp-manylinux-glibc224.sh
335+
quay.io/pypa/manylinux_2_28_aarch64 \
336+
bash .github/scripts/package-client-cpp-manylinux-glibc228.sh
337337
- name: Restore workspace ownership after container build
338338
if: always()
339339
run: sudo chown -R "$(id -u):$(id -g)" "${{ github.workspace }}"
@@ -343,7 +343,7 @@ jobs:
343343
run: |
344344
set -euo pipefail
345345
shopt -s nullglob
346-
zips=(iotdb-client/client-cpp/target/client-cpp-*-linux-aarch64-glibc224.zip)
346+
zips=(iotdb-client/client-cpp/target/client-cpp-*-linux-aarch64-glibc228.zip)
347347
if [ "${#zips[@]}" -ne 1 ]; then
348348
echo "Expected exactly one package zip, got: ${zips[*]:-(none)}"
349349
exit 1

example/client-cpp-example/README.md

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,20 +47,19 @@ publishes one zip per platform/toolchain:
4747

4848
| Deployment target | Classifier suffix |
4949
|-------------------|-------------------|
50-
| Linux x86_64, glibc ≥ 2.24 (default g++, cxx11 ABI) | `linux-x86_64-glibc224` |
51-
| Linux aarch64, glibc ≥ 2.24 (default g++, cxx11 ABI) | `linux-aarch64-glibc224` |
52-
| Linux x86_64, glibc ≥ 2.17 (legacy ABI, app needs `-D_GLIBCXX_USE_CXX11_ABI=0`) | `linux-x86_64-glibc217` |
53-
| Linux aarch64, glibc ≥ 2.17 (legacy ABI) | `linux-aarch64-glibc217` |
50+
| Linux x86_64, glibc ≥ 2.28 (default g++) | `linux-x86_64-glibc228` |
51+
| Linux aarch64, glibc ≥ 2.28 (default g++) | `linux-aarch64-glibc228` |
52+
| Linux x86_64, glibc ≥ 2.17 (legacy libstdc++ ABI) | `linux-x86_64-glibc217` |
53+
| Linux aarch64, glibc ≥ 2.17 (legacy libstdc++ ABI) | `linux-aarch64-glibc217` |
5454
| macOS x86_64 | `mac-x86_64` |
5555
| macOS arm64 | `mac-aarch64` |
5656
| Windows (match your Visual Studio version) | `windows-x86_64-vs2017``vs2026` |
5757

5858
The current build compiles Thrift 0.21 from source at CMake configure time.
5959
Legacy `-Diotdb-tools-thrift.version=...` flags applied to the **old**
60-
pre-built Thrift workflow only. On Linux, prefer **`glibc224`** when your
61-
distro has glibc ≥ 2.24 and you build with the default compiler ABI. Use
62-
**`glibc217`** only when the target host cannot run glibc 2.24+ binaries or
63-
when you must match the legacy libstdc++ ABI (`-D_GLIBCXX_USE_CXX11_ABI=0`).
60+
pre-built Thrift workflow only. On Linux, prefer **`glibc228`** when your
61+
distro has glibc ≥ 2.28 and you build with the system default `g++`. Use
62+
**`glibc217`** only when the target host cannot run glibc 2.28+ binaries.
6463
See [client-cpp README](../../iotdb-client/client-cpp/README.md).
6564

6665
## SDK layout (after unpack)

example/client-cpp-example/README_zh.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,19 +46,19 @@ CI 发版([client-cpp-package.yml](../../.github/workflows/client-cpp-package.
4646

4747
| 目标环境 | classifier 后缀 |
4848
|----------|-----------------|
49-
| Linux x86_64,glibc ≥ 2.24(默认 g++,cxx11 ABI| `linux-x86_64-glibc224` |
50-
| Linux aarch64,glibc ≥ 2.24(默认 g++,cxx11 ABI| `linux-aarch64-glibc224` |
51-
| Linux x86_64,glibc ≥ 2.17(旧 ABI,应用需 `-D_GLIBCXX_USE_CXX11_ABI=0`| `linux-x86_64-glibc217` |
52-
| Linux aarch64,glibc ≥ 2.17(旧 ABI) | `linux-aarch64-glibc217` |
49+
| Linux x86_64,glibc ≥ 2.28(默认 g++) | `linux-x86_64-glibc228` |
50+
| Linux aarch64,glibc ≥ 2.28(默认 g++) | `linux-aarch64-glibc228` |
51+
| Linux x86_64,glibc ≥ 2.17(旧 libstdc++ ABI| `linux-x86_64-glibc217` |
52+
| Linux aarch64,glibc ≥ 2.17(旧 libstdc++ ABI) | `linux-aarch64-glibc217` |
5353
| macOS x86_64 | `mac-x86_64` |
5454
| macOS arm64 | `mac-aarch64` |
5555
| Windows + 与工程相同的 VS 版本 | `windows-x86_64-vs2017``vs2026` |
5656

5757
当前 CMake 构建在配置阶段从源码编译 Thrift 0.21,**不再**通过
5858
`-Diotdb-tools-thrift.version=0.14.1.1-gcc4-SNAPSHOT` 等旧参数控制 glibc。
59-
Linux 上若目标机 glibc ≥ 2.24 且使用默认编译器 ABI,请优先选用
60-
**`glibc224`** 包;仅当目标机无法使用 glibc 2.24+ 二进制,或必须与旧
61-
libstdc++ ABI(`-D_GLIBCXX_USE_CXX11_ABI=0`)一致时,才选用 **`glibc217`** 包。
59+
Linux 上若目标机 glibc ≥ 2.28 且使用系统默认 `g++`,请优先选用
60+
**`glibc228`** 包;仅当目标机无法使用 glibc 2.28+ 二进制时,才选用
61+
**`glibc217`**。应用侧无需设置额外的 ABI 编译宏
6262
详见 [client-cpp README](../../iotdb-client/client-cpp/README.md)
6363

6464
## SDK 目录结构(解压后)

iotdb-client/client-cpp/CMakeLists.txt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,6 @@ endif()
3434

3535
if(NOT MSVC)
3636
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -g -O2")
37-
if(IOTDB_EXTRA_CXX_FLAGS)
38-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${IOTDB_EXTRA_CXX_FLAGS}")
39-
endif()
4037
endif()
4138

4239
if(MSVC)
@@ -47,9 +44,6 @@ endif()
4744
option(WITH_SSL "Build with OpenSSL support" OFF)
4845
option(BUILD_TESTING "Build IT test executables" OFF)
4946
option(IOTDB_OFFLINE "Disable all network access during configure" OFF)
50-
# e.g. -D_GLIBCXX_USE_CXX11_ABI=0 for legacy Linux release zips (Maven: -Diotdb.extra.cxx.flags=...)
51-
set(IOTDB_EXTRA_CXX_FLAGS ""
52-
CACHE STRING "Extra flags appended to CMAKE_CXX_FLAGS (libstdc++ ABI, etc.)")
5347

5448
set(IOTDB_DEPS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third-party"
5549
CACHE PATH "Local tarball cache for third-party dependencies (lives under client-cpp/)")

0 commit comments

Comments
 (0)