Skip to content

Commit 31c1cce

Browse files
committed
Added: CI mingw build
1 parent 6db2748 commit 31c1cce

4 files changed

Lines changed: 64 additions & 4 deletions

File tree

.github/workflows/cmake-multi-platform.yml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
matrix:
2626
os: [windows-latest, ubuntu-latest]
2727
build_type: [Release]
28-
c_compiler: [gcc, clang, cl]
28+
c_compiler: [gcc, clang, cl, mingw]
2929
include:
3030
- os: windows-latest
3131
c_compiler: cl
@@ -43,6 +43,8 @@ jobs:
4343
c_compiler: clang
4444
- os: ubuntu-latest
4545
c_compiler: cl
46+
- os: windows-latest
47+
c_compiler: mingw
4648

4749
steps:
4850
- uses: actions/checkout@v3
@@ -83,3 +85,9 @@ jobs:
8385
if: matrix.os == 'ubuntu-latest'
8486
run: |
8587
./ImageLoaderExample
88+
89+
- name: Test Ubuntu (mingw)
90+
working-directory: ${{ steps.strings.outputs.build-output-dir }}/Example
91+
if: matrix.os == 'ubuntu-latest'
92+
run: |
93+
./ImageLoaderExample.exe

Codecs/CodecJPG/CMakeLists.txt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,13 @@ endif()
2121

2222
# ======== Platform-specific file extensions ========
2323
if(WIN32)
24-
set(JPG_RUNTIME_NAME "turbojpeg.dll")
25-
set(JPG_IMPLIB_NAME "turbojpeg.lib")
24+
if (MINGW)
25+
set(JPG_RUNTIME_NAME "libturbojpeg.dll")
26+
set(JPG_IMPLIB_NAME "libturbojpeg.dll.a")
27+
else()
28+
set(JPG_RUNTIME_NAME "turbojpeg.dll")
29+
set(JPG_IMPLIB_NAME "turbojpeg.lib")
30+
endif()
2631
elseif(APPLE)
2732
set(JPG_RUNTIME_NAME "libturbojpeg.dylib")
2833
set(JPG_IMPLIB_NAME "") # No import libs on macOS
@@ -50,6 +55,10 @@ set(LibJpegTurboArgs
5055
-DCMAKE_INSTALL_PREFIX=${TurboJpegBinBaseDir}/install
5156
)
5257

58+
if (CMAKE_TOOLCHAIN_FILE)
59+
get_filename_component(CMAKE_TOOLCHAIN_FILE_ABSOLUTE "${CMAKE_TOOLCHAIN_FILE}" ABSOLUTE)
60+
list(APPEND LibJpegTurboArgs -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE_ABSOLUTE})
61+
endif()
5362
# Enable NASM on Windows if needed
5463
if(WIN32 AND NOT ${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux")
5564
list(APPEND LibJpegTurboArgs -DCMAKE_ASM_NASM_COMPILER=${NASMPATH})

External/libpng

Submodule libpng updated 1 file

mingw-w64-x86_64.cmake

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
2+
#Usage: cmake -DCMAKE_TOOLCHAIN_FILE=mingw-w64-x86_64.cmake
3+
4+
set(CMAKE_SYSTEM_NAME Windows)
5+
6+
7+
set(TOOLCHAIN_PREFIX x86_64-w64-mingw32)
8+
9+
# cross compilers to use for C, C++ and Fortran
10+
set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc)
11+
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++)
12+
set(CMAKE_Fortran_COMPILER ${TOOLCHAIN_PREFIX}-gfortran)
13+
set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres)
14+
15+
set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX})
16+
17+
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
18+
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
19+
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
20+
set(CMAKE_SYSTEM_PROCESSOR x86_64)
21+
set(CMAKE_SYSTEM_VERSION 10)
22+
23+
24+
function (createSymLink target symlink)
25+
cmake_path(GET symlink PARENT_PATH parentPath)
26+
file(MAKE_DIRECTORY ${parentPath})
27+
execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${target} ${symlink})
28+
endfunction()
29+
30+
# MINGW defaults max SDK version to Windows server 2003 (0x0502)
31+
# For supporting newer functionality, overriding is needed, otherwise code won't compile
32+
# override with Windows 10 (0x0A00) SDK version
33+
add_compile_definitions(_WIN32_WINNT=0x0A00)
34+
35+
set(CASE_SENSITIVE_FIX_FOR_MINGW_PATH ${CMAKE_CURRENT_BINARY_DIR}/mingw-w64)
36+
createSymLink(/usr/x86_64-w64-mingw32/include/windows.h ${CASE_SENSITIVE_FIX_FOR_MINGW_PATH}/Include/Windows.h)
37+
createSymLink(/usr/x86_64-w64-mingw32/include/shlobj.h ${CASE_SENSITIVE_FIX_FOR_MINGW_PATH}/Include/ShlObj.h)
38+
createSymLink(/usr/x86_64-w64-mingw32/include/dbghelp.h ${CASE_SENSITIVE_FIX_FOR_MINGW_PATH}/Include/DbgHelp.h)
39+
createSymLink(/usr/x86_64-w64-mingw32/include/commctrl.h ${CASE_SENSITIVE_FIX_FOR_MINGW_PATH}/Include/CommCtrl.h)
40+
createSymLink(/usr/x86_64-w64-mingw32/include/shellscalingapi.h ${CASE_SENSITIVE_FIX_FOR_MINGW_PATH}/Include/ShellScalingApi.h)
41+
createSymLink(/usr/x86_64-w64-mingw32/include/psapi.h ${CASE_SENSITIVE_FIX_FOR_MINGW_PATH}/Include/Psapi.h)
42+
43+
include_directories(${CASE_SENSITIVE_FIX_FOR_MINGW_PATH}/Include)

0 commit comments

Comments
 (0)