|
| 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 Qt5_DIR=/$MSYS_FLAVOR/lib/cmake/Qt5 \ |
| 111 | + -D OpenCASCADE_DIR=$GITHUB_WORKSPACE/occt/cmake |
| 112 | + - name: Build project |
| 113 | + run: | |
| 114 | + cmake --build "$GITHUB_WORKSPACE/occt-samples-qt-make" --config Release |
| 115 | + - name: Install project |
| 116 | + run: | |
| 117 | + cmake --build "$GITHUB_WORKSPACE/occt-samples-qt-make" --config Release --target install |
| 118 | + # the produced binaries cannot be launched, hence don't waste the time |
| 119 | + #cp -f -r $GITHUB_WORKSPACE/occt/win64/gcc/bin/*.dll $GITHUB_WORKSPACE/occt-samples-qt/ |
| 120 | + #cp -f -r /$MSYS_FLAVOR/bin/*.dll $GITHUB_WORKSPACE/occt-samples-qt/ |
0 commit comments