diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 059fd39..104f6c5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -97,3 +97,49 @@ jobs: -DCMAKE_OSX_ARCHITECTURES='${{ matrix.architectures }}' cmake --build build --config Release sudo cmake --install build --config Release + + windows: + name: Windows (${{ matrix.arch }}-bit, Qt ${{ matrix.qt_version_major }}) + runs-on: windows-latest + + strategy: + matrix: + include: + - qt_version: 5.15.2 + qt_version_major: 5 + qt_arch: win64_msvc2019_64 + arch: 32 + - qt_version: 6.8.1 + qt_version_major: 6 + qt_arch: win64_msvc2022_64 + arch: 64 + + defaults: + run: + shell: bash + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + submodules: 'recursive' + + - name: Install Qt + uses: jurplel/install-qt-action@v4 + with: + version: ${{ matrix.qt_version }} + arch: ${{ matrix.qt_arch }} + cache: true + + - name: Build + run: | + pushd aseprite + patch -p1 < ../aseprite-fix-zlib-include.patch + patch -p1 < ../aseprite-msvc-dynamic-runtime.patch + pushd laf + patch -p1 < ../../laf-msvc-dynamic-runtime.patch + popd + popd + cmake -B build -DCMAKE_BUILD_TYPE=Release + cmake --build build --config Release + cmake --install build --config Release diff --git a/CMakeLists.txt b/CMakeLists.txt index ab63edb..6bd6bbc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.14) +cmake_minimum_required(VERSION 3.16) project(qaseprite LANGUAGES CXX) @@ -18,7 +18,7 @@ set(ENABLE_WEBP off) add_subdirectory(aseprite EXCLUDE_FROM_ALL) -add_library(qaseprite SHARED +add_library(qaseprite MODULE qaseprite.cpp qaseprite.json ) @@ -49,4 +49,5 @@ endif() install( TARGETS qaseprite + RUNTIME DESTINATION "${QT_INSTALL_PREFIX}/${QT_INSTALL_PLUGINS}/imageformats" LIBRARY DESTINATION "${QT_INSTALL_PREFIX}/${QT_INSTALL_PLUGINS}/imageformats") diff --git a/aseprite-fix-zlib-include.patch b/aseprite-fix-zlib-include.patch new file mode 100644 index 0000000..b436c09 --- /dev/null +++ b/aseprite-fix-zlib-include.patch @@ -0,0 +1,13 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index af09ed229..b1bd0189b 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -234,7 +234,7 @@ else() + set(ZLIB_LIBRARIES ${ZLIB_LIBRARY}) + set(ZLIB_INCLUDE_DIRS + ${ZLIB_DIR} +- ${CMAKE_BINARY_DIR}/third_party/zlib) # Zlib generated zconf.h file ++ ${CMAKE_CURRENT_BINARY_DIR}/third_party/zlib) # Zlib generated zconf.h file + set(ZLIB_INCLUDE_DIR ${ZLIB_INCLUDE_DIRS} CACHE PATH "") + endif() + include_directories(${ZLIB_INCLUDE_DIRS}) diff --git a/aseprite-msvc-dynamic-runtime.patch b/aseprite-msvc-dynamic-runtime.patch new file mode 100644 index 0000000..b3653b9 --- /dev/null +++ b/aseprite-msvc-dynamic-runtime.patch @@ -0,0 +1,13 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index b1bd0189b..c4b6ed0c0 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -7,7 +7,7 @@ cmake_minimum_required(VERSION 3.16) + set(CMAKE_CXX_STANDARD 17) + set(CMAKE_CXX_STANDARD_REQUIRED ON) + set(CMAKE_CXX_EXTENSIONS OFF) # We use -std=c++17 instead of -std=gnu++17 in macOS +-set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") ++set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") + + if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING diff --git a/laf-msvc-dynamic-runtime.patch b/laf-msvc-dynamic-runtime.patch new file mode 100644 index 0000000..021624c --- /dev/null +++ b/laf-msvc-dynamic-runtime.patch @@ -0,0 +1,43 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index b846431..2c2646a 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -8,7 +8,7 @@ cmake_minimum_required(VERSION 3.16) + # the static version of the libc runtime + set(CMAKE_USER_MAKE_RULES_OVERRIDE ${CMAKE_CURRENT_SOURCE_DIR}/cmake/c_flag_overrides.cmake) + set(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cxx_flag_overrides.cmake) +-set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") ++set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") + + project(laf C CXX) + +diff --git a/cmake/c_flag_overrides.cmake b/cmake/c_flag_overrides.cmake +index 4096532..7cf2a28 100644 +--- a/cmake/c_flag_overrides.cmake ++++ b/cmake/c_flag_overrides.cmake +@@ -1,6 +1,6 @@ + if(MSVC) +- set(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") +- set(CMAKE_C_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1 /D NDEBUG") +- set(CMAKE_C_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG") +- set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") ++ set(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MDd /Zi /Ob0 /Od /RTC1") ++ set(CMAKE_C_FLAGS_MINSIZEREL_INIT "/MD /O1 /Ob1 /D NDEBUG") ++ set(CMAKE_C_FLAGS_RELEASE_INIT "/MD /O2 /Ob2 /D NDEBUG") ++ set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MD /Zi /O2 /Ob1 /D NDEBUG") + endif() +diff --git a/cmake/cxx_flag_overrides.cmake b/cmake/cxx_flag_overrides.cmake +index a73eb94..f0ee19b 100644 +--- a/cmake/cxx_flag_overrides.cmake ++++ b/cmake/cxx_flag_overrides.cmake +@@ -1,6 +1,6 @@ + if(MSVC) +- set(CMAKE_CXX_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") +- set(CMAKE_CXX_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1 /D NDEBUG") +- set(CMAKE_CXX_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG") +- set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") ++ set(CMAKE_CXX_FLAGS_DEBUG_INIT "/D_DEBUG /MDd /Zi /Ob0 /Od /RTC1") ++ set(CMAKE_CXX_FLAGS_MINSIZEREL_INIT "/MD /O1 /Ob1 /D NDEBUG") ++ set(CMAKE_CXX_FLAGS_RELEASE_INIT "/MD /O2 /Ob2 /D NDEBUG") ++ set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "/MD /Zi /O2 /Ob1 /D NDEBUG") + endif()