Skip to content

Commit 398dcee

Browse files
committed
CI/CD - add MinGW build job
1 parent eb48691 commit 398dcee

2 files changed

Lines changed: 121 additions & 0 deletions

File tree

.github/workflows/build.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,5 @@ concurrency:
1010
jobs:
1111
linux:
1212
uses: ./.github/workflows/build_linux.yml
13+
wnt:
14+
uses: ./.github/workflows/build_wnt.yml

.github/workflows/build_wnt.yml

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
name: Build (Windows/MinGW)
2+
on:
3+
workflow_call:
4+
5+
jobs:
6+
# This job performs building using MinGW cross-compilation toolchain on Linux
7+
# with Qt packages installed from MSYS2 Pacman repositories (without installing MSYS2 itself).
8+
#
9+
# This works, however final DLLs cannot be loaded on Windows
10+
# with 'not found symbol _ZSt21ios_base_library_initv' due to mixture
11+
# of GCC versions on Linux (GCC13) and MSYS2 (GCC15) and bug fixes
12+
# in GCC14+ for MinGW (unrelated ELF rules applied to MinGW builds).
13+
#
14+
# Should become more useful when using newer Ubuntu images
15+
# (Ubuntu 25.04+ also introduced ucrt64 packages like g++-mingw-w64-x86-64-ucrt64)
16+
build-lin-mingw:
17+
runs-on: ubuntu-24.04
18+
env:
19+
TOOLCHAIN_PREFIX: x86_64-w64-mingw32
20+
CMAKE_TOOLCHAIN: ${{ github.workspace }}/x86_64-w64-mingw32-posix.cmake
21+
MSYS_FLAVOR: mingw64
22+
MSYS_PREFIX: mingw-w64-x86_64
23+
MSYS_UCRT_FLAVOR: ucrt64
24+
MSYS_UCRT_PREFIX: mingw-w64-ucrt-x86_64
25+
steps:
26+
- name: Clone Tree
27+
uses: actions/checkout@v6
28+
with:
29+
path: occt-samples-qt.git
30+
fetch-depth: 1
31+
- name: Clone OCCT
32+
uses: actions/checkout@v6
33+
with:
34+
repository: gkv311/OCCT
35+
path: occt.git
36+
ref: 'v7_7_x'
37+
fetch-depth: 1
38+
- name: Install Dependencies
39+
run: |
40+
cat <<EOF >> "$CMAKE_TOOLCHAIN"
41+
set(CMAKE_SYSTEM_NAME Windows)
42+
set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc-posix)
43+
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++-posix)
44+
set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres)
45+
set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX})
46+
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
47+
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
48+
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
49+
EOF
50+
cat "$CMAKE_TOOLCHAIN"
51+
# g++-mingw-w64-x86-64-ucrt64 requires Ubuntu 25.04+
52+
sudo apt-get update
53+
sudo apt-get install -y \
54+
g++ cmake ninja-build \
55+
mingw-w64-common mingw-w64-tools binutils-mingw-w64-x86-64 \
56+
g++-mingw-w64-x86-64-posix gcc-mingw-w64-x86-64-posix
57+
- name: Install Dependencies from MSYS2
58+
run: |
59+
sudo apt-get install -y pacman-package-manager
60+
# ucrt64 (mingw-w64-ucrt-x86_64-gtkmm-4.0) should be used only with g++-mingw-w64-x86-64-ucrt64
61+
sudo sh -c "echo '[${{ env.MSYS_FLAVOR }}]' >> /etc/pacman.conf"
62+
# TODO fix PGP keys setup
63+
sudo sh -c "echo 'SigLevel = Never' >> /etc/pacman.conf"
64+
sudo sh -c "echo 'Server = https://mirror.msys2.org/mingw/${{ env.MSYS_FLAVOR }}/' >> /etc/pacman.conf"
65+
sudo sh -c "echo 'Server = https://repo.msys2.org/mingw/${{ env.MSYS_FLAVOR }}/' >> /etc/pacman.conf"
66+
sudo pacman --noconfirm -Syu
67+
sudo pacman --noconfirm -Sy ${{ env.MSYS_PREFIX }}-freetype \
68+
${{ env.MSYS_PREFIX }}-qt5-base ${{ env.MSYS_PREFIX }}-qt5-declarative ${{ env.MSYS_PREFIX }}-qt5-quickcontrols2
69+
- name: Configure occt
70+
run: |
71+
# disable most OCCT Modules and specify minimal set of toolkits to build
72+
# (BUILD_ADDITIONAL_TOOLKITS) required by sample to speed up building
73+
cmake -G Ninja -S $GITHUB_WORKSPACE/occt.git -B "$GITHUB_WORKSPACE/occt-make" \
74+
-D CMAKE_TOOLCHAIN_FILE="$CMAKE_TOOLCHAIN" \
75+
-D CMAKE_BUILD_TYPE="Release" \
76+
-D INSTALL_DIR:PATH=$GITHUB_WORKSPACE/occt \
77+
-D BUILD_RELEASE_DISABLE_EXCEPTIONS:BOOL=OFF \
78+
-D BUILD_DOC_Overview:BOOL=OFF \
79+
-D BUILD_Inspector:BOOL=OFF \
80+
-D BUILD_MODULE_Draw:BOOL=OFF \
81+
-D BUILD_MODULE_DataExchange:BOOL=OFF \
82+
-D BUILD_MODULE_ApplicationFramework:BOOL=OFF \
83+
-D BUILD_MODULE_Visualization:BOOL=OFF \
84+
-D BUILD_MODULE_ModelingAlgorithms:BOOL=OFF \
85+
-D BUILD_MODULE_DETools:BOOL=OFF \
86+
-D BUILD_ADDITIONAL_TOOLKITS:STRING="TKOpenGl TKV3d TKHLR TKMesh TKService TKShHealing TKPrim TKTopAlgo TKGeomAlgo TKBRep TKGeomBase TKG3d TKG2d TKMath TKernel" \
87+
-D USE_FREETYPE:BOOL=ON \
88+
-D 3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2:FILEPATH="/$MSYS_FLAVOR/include/freetype2" \
89+
-D 3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build:FILEPATH="/$MSYS_FLAVOR/include/freetype2" \
90+
-D 3RDPARTY_FREETYPE_LIBRARY_DIR:PATH="/$MSYS_FLAVOR/lib" \
91+
-D 3RDPARTY_FREETYPE_LIBRARY:FILEPATH="/$MSYS_FLAVOR/lib/libfreetype.dll.a" \
92+
-D 3RDPARTY_FREETYPE_DLL_DIR:PATH="/$MSYS_FLAVOR/bin" \
93+
-D 3RDPARTY_FREETYPE_DLL:FILEPATH="/$MSYS_FLAVOR/bin/libfreetype-6.dll" \
94+
-D USE_FREEIMAGE:BOOL=OFF
95+
- name: Build occt
96+
run: |
97+
cmake --build "$GITHUB_WORKSPACE/occt-make" --config Release
98+
- name: Install occt
99+
run: |
100+
cmake --build "$GITHUB_WORKSPACE/occt-make" --config Release --target install
101+
- name: Configure project
102+
run: |
103+
export PKG_CONFIG_PATH=
104+
export PKG_CONFIG_LIBDIR=/$MSYS_FLAVOR/lib/pkgconfig
105+
cmake -G Ninja -S $GITHUB_WORKSPACE/occt-samples-qt.git -B "$GITHUB_WORKSPACE/occt-samples-qt-make" \
106+
-D CMAKE_TOOLCHAIN_FILE="$CMAKE_TOOLCHAIN" \
107+
-D CMAKE_BUILD_TYPE="Release" \
108+
-D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/occt-samples-qt \
109+
-D QT_VERSION=Qt5 \
110+
-D OpenCASCADE_DIR=$GITHUB_WORKSPACE/occt/cmake
111+
- name: Build project
112+
run: |
113+
cmake --build "$GITHUB_WORKSPACE/occt-samples-qt-make" --config Release
114+
- name: Install project
115+
run: |
116+
cmake --build "$GITHUB_WORKSPACE/occt-samples-qt-make" --config Release --target install
117+
# the produced binaries cannot be launched, hence don't waste the time
118+
#cp -f -r $GITHUB_WORKSPACE/occt/win64/gcc/bin/*.dll $GITHUB_WORKSPACE/occt-samples-qt/
119+
#cp -f -r /$MSYS_FLAVOR/bin/*.dll $GITHUB_WORKSPACE/occt-samples-qt/

0 commit comments

Comments
 (0)