Skip to content

Commit af3a7f5

Browse files
committed
build: transition to cmake
1 parent 195dd9d commit af3a7f5

File tree

3 files changed

+255
-5
lines changed

3 files changed

+255
-5
lines changed

.github/workflows/ci.yml

+17-5
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,11 @@
2828
},
2929
"jobs" : {
3030
"build-win32" : {
31-
"runs-on" : "ubuntu-20.04",
31+
"runs-on" : "ubuntu-latest",
32+
"container" : {
33+
"image" : "ghcr.io/homebrew/ubuntu20.04:latest",
34+
"options" : "--user 0"
35+
},
3236
"strategy" : {
3337
"matrix" : {
3438
"platform" : [
@@ -93,21 +97,25 @@
9397
},
9498
{
9599
"name" : "Set up default build tools",
96-
"run" : "brew install make nasm cmake meson ninja"
100+
"run" : "sudo -H -u linuxbrew bash -c 'cd /home/linuxbrew && /home/linuxbrew/.linuxbrew/bin/brew install p7zip make nasm cmake meson ninja'"
97101
},
98102
{
99103
"name" : "Set up mingw-w64 for GCC",
100104
"if" : "matrix.platform.compiler == 'gcc'",
101-
"run" : "brew install mingw-w64"
105+
"run" : "sudo -H -u linuxbrew bash -c 'cd /home/linuxbrew && /home/linuxbrew/.linuxbrew/bin/brew install mingw-w64'"
102106
},
103107
{
104108
"name" : "Set up mingw-w64 for Clang",
105109
"if" : "matrix.platform.compiler == 'clang'",
106110
"run" : "curl -LO https://github.com/mstorsjo/llvm-mingw/releases/download/20220323/llvm-mingw-20220323-msvcrt-ubuntu-18.04-x86_64.tar.xz\ntar xvf llvm-mingw-20220323-msvcrt-ubuntu-18.04-x86_64.tar.xz\nmv llvm-mingw-20220323-msvcrt-ubuntu-18.04-x86_64 /opt/llvm-mingw\nexport PATH=\"/opt/llvm-mingw/bin:$PATH\"\necho \"/opt/llvm-mingw/bin\" >> $GITHUB_PATH"
107111
},
112+
{
113+
"name" : "Configure project",
114+
"run" : "cmake -S . -B build -DMY_ARCHIVE_NAME=${GITHUB_REPOSITORY#*/}.${{ matrix.platform.target-arch }}.${{ matrix.platform.compiler }}.7z -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_SYSTEM_PROCESSOR=${{ matrix.platform.cmake-system-compiler }} -DCMAKE_FIND_ROOT_PATH=/dev/null -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY -DCMAKE_C_COMPILER=${{ matrix.platform.triplet }}-gcc -DCMAKE_CXX_COMPILER=${{ matrix.platform.triplet }}-g++ -DCMAKE_RC_COMPILER=${{ matrix.platform.triplet }}-windres -DCMAKE_BUILD_TYPE=Release"
115+
},
108116
{
109117
"name" : "Compile project",
110-
"run" : "make TARGET_ARCH=${{ matrix.platform.target-arch }} ARCHIVE=\\$\\(PROJECT_BASENAME\\).${{ matrix.platform.target-arch }}.${{ matrix.platform.compiler }}.7z archive -j$(getconf _NPROCESSORS_ONLN)"
118+
"run" : "cmake --build build --target archive"
111119
},
112120
{
113121
"name" : "Upload artifact",
@@ -123,7 +131,11 @@
123131
"needs" : [
124132
"build-win32"
125133
],
126-
"runs-on" : "ubuntu-20.04",
134+
"runs-on" : "ubuntu-latest",
135+
"container" : {
136+
"image" : "ubuntu:20.04",
137+
"options" : "--user 0"
138+
},
127139
"timeout-minutes" : 5,
128140
"if" : "startsWith(github.ref, 'refs/tags/v')",
129141
"steps" : [

CMakeLists.txt

+191
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
# Copyright (c) ifjxl developers
2+
3+
cmake_minimum_required(VERSION 3.0)
4+
project(ifjxl)
5+
6+
if((NOT DEFINED CMAKE_BUILD_TYPE) OR (NOT CMAKE_BUILD_TYPE) OR (CMAKE_BUILD_TYPE STREQUAL ""))
7+
set(CMAKE_BUILD_TYPE RelWithDebInfo)
8+
endif()
9+
10+
set(DEPENDENCY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/build-libraries)
11+
file(MAKE_DIRECTORY ${DEPENDENCY_OUTPUT_DIRECTORY}/include)
12+
13+
if((NOT DEFINED MY_LIBRARY_PROCESSOR) OR (NOT MY_LIBRARY_PROCESSOR) OR (MY_LIBRARY_PROCESSOR STREQUAL ""))
14+
set(MY_LIBRARY_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR})
15+
if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i686")
16+
set(MY_LIBRARY_PROCESSOR intel32)
17+
endif()
18+
if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "amd64")
19+
set(MY_LIBRARY_PROCESSOR intel64)
20+
endif()
21+
if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "arm")
22+
set(MY_LIBRARY_PROCESSOR arm32)
23+
endif()
24+
if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "arm64")
25+
set(MY_LIBRARY_PROCESSOR arm64)
26+
endif()
27+
endif()
28+
29+
include(ExternalProject)
30+
ExternalProject_Add(libjxl-build
31+
GIT_REPOSITORY https://github.com/libjxl/libjxl.git
32+
GIT_TAG v0.11.1
33+
GIT_SHALLOW TRUE
34+
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
35+
CONFIGURE_COMMAND
36+
${CMAKE_COMMAND}
37+
-B <BINARY_DIR>
38+
-S <SOURCE_DIR>
39+
-DCMAKE_SYSTEM_NAME=Windows
40+
-DCMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}
41+
-DCMAKE_FIND_ROOT_PATH=/dev/null
42+
-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER
43+
-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY
44+
-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY
45+
-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY
46+
-DCMAKE_DISABLE_FIND_PACKAGE_PkgConfig=TRUE
47+
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
48+
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
49+
-DCMAKE_RC_COMPILER=${CMAKE_RC_COMPILER}
50+
-DCMAKE_INSTALL_PREFIX=${DEPENDENCY_OUTPUT_DIRECTORY}
51+
-DCMAKE_BUILD_TYPE=Release
52+
-DJPEGXL_ENABLE_OPENEXR=FALSE
53+
-DJPEGXL_ENABLE_TOOLS=FALSE
54+
-DJPEGXL_ENABLE_BENCHMARK=FALSE
55+
"-DCMAKE_CXX_FLAGS=-DHWY_DISABLED_TARGETS=\"HWY_AVX2|HWY_AVX3\""
56+
-DJPEGXL_ENABLE_JNI=OFF
57+
-DJPEGXL_ENABLE_MANPAGES=OFF
58+
-DJPEGXL_BUNDLE_GFLAGS=ON
59+
-DBUILD_TESTING=OFF
60+
-DJPEGXL_ENABLE_TOOLS=OFF
61+
-DJPEGXL_ENABLE_VIEWERS=OFF
62+
-DJPEGXL_STATIC=ON
63+
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> && ${CMAKE_COMMAND} --build <BINARY_DIR> --target install
64+
BUILD_BYPRODUCTS ${DEPENDENCY_OUTPUT_DIRECTORY}/lib/libjxl.a ${DEPENDENCY_OUTPUT_DIRECTORY}/lib/libjxl_threads.a ${DEPENDENCY_OUTPUT_DIRECTORY}/lib/libhwy.a ${DEPENDENCY_OUTPUT_DIRECTORY}/lib/libbrotlicommon.a ${DEPENDENCY_OUTPUT_DIRECTORY}/lib/libbrotlidec.a
65+
INSTALL_COMMAND ""
66+
)
67+
add_library(libjxl_threads STATIC IMPORTED)
68+
set_property(TARGET libjxl_threads PROPERTY IMPORTED_LOCATION "${DEPENDENCY_OUTPUT_DIRECTORY}/lib/libjxl_threads.a")
69+
add_dependencies(libjxl_threads libjxl-build)
70+
add_library(libhwy STATIC IMPORTED)
71+
set_property(TARGET libhwy PROPERTY IMPORTED_LOCATION "${DEPENDENCY_OUTPUT_DIRECTORY}/lib/libhwy.a")
72+
add_dependencies(libhwy libjxl-build)
73+
add_library(libbrotlicommon STATIC IMPORTED)
74+
set_property(TARGET libbrotlicommon PROPERTY IMPORTED_LOCATION "${DEPENDENCY_OUTPUT_DIRECTORY}/lib/libbrotlicommon.a")
75+
add_dependencies(libbrotlicommon libjxl-build)
76+
add_library(libbrotlidec STATIC IMPORTED)
77+
set_property(TARGET libbrotlidec PROPERTY IMPORTED_LOCATION "${DEPENDENCY_OUTPUT_DIRECTORY}/lib/libbrotlidec.a")
78+
add_dependencies(libbrotlidec libjxl-build)
79+
add_library(libjxl STATIC IMPORTED)
80+
set_property(TARGET libjxl PROPERTY IMPORTED_LOCATION "${DEPENDENCY_OUTPUT_DIRECTORY}/lib/libjxl.a")
81+
add_dependencies(libjxl libjxl-build)
82+
target_include_directories(libjxl INTERFACE "${DEPENDENCY_OUTPUT_DIRECTORY}/include")
83+
target_link_libraries(libjxl INTERFACE libjxl_threads libhwy libbrotlicommon libbrotlidec)
84+
85+
if((NOT DEFINED CUR_GIT_TAG) OR (NOT CUR_GIT_TAG) OR (CUR_GIT_TAG STREQUAL ""))
86+
set(CUR_GIT_TAG Unknown)
87+
find_package(Git)
88+
if(GIT_FOUND)
89+
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git)
90+
execute_process(COMMAND ${GIT_EXECUTABLE} describe --abbrev=0 --tags
91+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
92+
OUTPUT_VARIABLE TMP_GIT_TAG
93+
RESULT_VARIABLE TMP_RES
94+
OUTPUT_STRIP_TRAILING_WHITESPACE)
95+
if(TMP_RES EQUAL "0")
96+
set(CUR_GIT_TAG ${TMP_GIT_TAG})
97+
endif()
98+
endif()
99+
endif()
100+
endif()
101+
102+
set(MY_LIBRARY_RC_COMMENTS "Source code for the latest version of this product is located on the World Wide Web at https://github.com/uyjulian/ifjxl")
103+
set(MY_LIBRARY_RC_FILEDESCRIPTION "JPEG XL Plugin for Susie Image Viewer")
104+
set(MY_LIBRARY_RC_FILEVERSION "${CUR_GIT_TAG}")
105+
set(MY_LIBRARY_RC_INTERNALNAME "ifjxl")
106+
set(MY_LIBRARY_RC_LEGALCOPYRIGHT "Copyright (C) 2022-2022 Julian Uy; This product is licensed under the MIT license.")
107+
set(MY_LIBRARY_RC_ORIGINALFILENAME "ifjxl.spi")
108+
set(MY_LIBRARY_RC_PRODUCTNAME "JPEG XL Plugin for Susie Image Viewer")
109+
set(MY_LIBRARY_RC_PRODUCTVERSION "${CUR_GIT_TAG}")
110+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/dllres.rc.cmakein ${CMAKE_CURRENT_BINARY_DIR}/dllres.rc)
111+
set(MY_LIBRARY_NAME ${PROJECT_NAME})
112+
list(APPEND MY_LIBRARY_DEFINITIONS
113+
-DUNICODE
114+
-D_UNICODE
115+
-DNDEBUG
116+
-DWIN32
117+
-D_WIN32
118+
-D_WINDOWS
119+
-DJXL_STATIC_DEFINE
120+
-DJXL_THREADS_STATIC_DEFINE
121+
)
122+
list(APPEND MY_LIBRARY_CFLAGS
123+
-Wno-unused-value
124+
-Wno-format
125+
-flto
126+
)
127+
list(APPEND MY_LIBRARY_CXXFLAGS
128+
${MY_LIBRARY_CFLAGS}
129+
-fpermissive
130+
)
131+
list(APPEND MY_LIBRARY_LDFLAGS
132+
-static
133+
-static-libstdc++
134+
-static-libgcc
135+
-municode
136+
-Wl,--subsystem,windows
137+
-Wl,--kill-at
138+
-fPIC
139+
)
140+
list(APPEND MY_LIBRARY_LIBS
141+
libjxl
142+
)
143+
list(APPEND MY_LIBRARY_SRC
144+
extractor.c
145+
spi00in.c
146+
${CMAKE_CURRENT_BINARY_DIR}/dllres.rc
147+
)
148+
list(APPEND MY_LIBRARY_INC
149+
${CMAKE_CURRENT_SOURCE_DIR}
150+
)
151+
152+
add_library(${MY_LIBRARY_NAME} MODULE)
153+
if(NOT ((${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i686") OR (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "amd64")))
154+
set_target_properties(${MY_LIBRARY_NAME} PROPERTIES OUTPUT_NAME ${MY_LIBRARY_NAME}_${MY_LIBRARY_PROCESSOR})
155+
endif()
156+
set_target_properties(${MY_LIBRARY_NAME} PROPERTIES PREFIX "")
157+
if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "amd64")
158+
set_target_properties(${MY_LIBRARY_NAME} PROPERTIES SUFFIX ".sph")
159+
else()
160+
set_target_properties(${MY_LIBRARY_NAME} PROPERTIES SUFFIX ".spi")
161+
endif()
162+
set_target_properties(${MY_LIBRARY_NAME} PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
163+
target_sources(${MY_LIBRARY_NAME} PRIVATE ${MY_LIBRARY_SRC})
164+
target_compile_options(${MY_LIBRARY_NAME} PUBLIC $<$<COMPILE_LANGUAGE:C>:${MY_LIBRARY_CFLAGS}>)
165+
target_compile_options(${MY_LIBRARY_NAME} PUBLIC $<$<COMPILE_LANGUAGE:CXX>:${MY_LIBRARY_CXXFLAGS}>)
166+
target_compile_definitions(${MY_LIBRARY_NAME} PUBLIC ${MY_LIBRARY_DEFINITIONS})
167+
target_include_directories(${MY_LIBRARY_NAME} PUBLIC ${MY_LIBRARY_INC})
168+
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.13.0")
169+
target_link_options(${MY_LIBRARY_NAME} PUBLIC ${MY_LIBRARY_LDFLAGS})
170+
endif()
171+
target_link_libraries(${MY_LIBRARY_NAME} ${MY_LIBRARY_LIBS})
172+
set_target_properties(${MY_LIBRARY_NAME} PROPERTIES LINKER_LANGUAGE CXX)
173+
174+
if((NOT DEFINED MY_ARCHIVE_NAME) OR (NOT MY_ARCHIVE_NAME) OR (MY_ARCHIVE_NAME STREQUAL ""))
175+
if((NOT DEFINED USE_ARCHIVE_HAS_GIT_TAG) OR (NOT USE_ARCHIVE_HAS_GIT_TAG) OR (USE_ARCHIVE_HAS_GIT_TAG STREQUAL ""))
176+
set(USE_ARCHIVE_HAS_GIT_TAG FALSE)
177+
endif()
178+
if(USE_ARCHIVE_HAS_GIT_TAG)
179+
set(MY_ARCHIVE_NAME ${MY_LIBRARY_NAME}.${MY_LIBRARY_PROCESSOR}.${CUR_GIT_TAG}.7z)
180+
else()
181+
set(MY_ARCHIVE_NAME ${MY_LIBRARY_NAME}.${MY_LIBRARY_PROCESSOR}.7z)
182+
endif()
183+
endif()
184+
add_custom_command(
185+
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${MY_ARCHIVE_NAME}
186+
COMMAND rm -f ${CMAKE_CURRENT_BINARY_DIR}/${MY_ARCHIVE_NAME} && 7z a ${CMAKE_CURRENT_BINARY_DIR}/${MY_ARCHIVE_NAME} $<TARGET_FILE:${MY_LIBRARY_NAME}>
187+
DEPENDS ${MY_LIBRARY_NAME}
188+
)
189+
add_custom_target(archive
190+
DEPENDS ${MY_ARCHIVE_NAME}
191+
)

dllres.rc.cmakein

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/////////////////////////////////////////////
2+
// //
3+
// Copyright (C) 2019-2019 Julian Uy //
4+
// https://sites.google.com/site/awertyb //
5+
// //
6+
// See details of license at "LICENSE" //
7+
// //
8+
/////////////////////////////////////////////
9+
10+
#include "windows.h"
11+
12+
#define MACRO_TO_STRING(x) #x
13+
14+
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
15+
16+
VS_VERSION_INFO VERSIONINFO
17+
FILEVERSION 1, 0, 0, 0
18+
PRODUCTVERSION 1, 0, 0, 0
19+
FILEFLAGSMASK 0x3fL
20+
#ifdef _DEBUG
21+
FILEFLAGS 0x1L
22+
#else
23+
FILEFLAGS 0x0L
24+
#endif
25+
FILEOS 0x40004L
26+
FILETYPE 0x1L
27+
FILESUBTYPE 0x0L
28+
BEGIN
29+
BLOCK "StringFileInfo"
30+
BEGIN
31+
BLOCK "041104b0"
32+
BEGIN
33+
VALUE "Comments", "@MY_LIBRARY_RC_COMMENTS@"
34+
VALUE "FileDescription", "@MY_LIBRARY_RC_FILEDESCRIPTION@"
35+
VALUE "FileVersion", "@MY_LIBRARY_RC_FILEVERSION@"
36+
VALUE "InternalName", "@MY_LIBRARY_RC_INTERNALNAME@"
37+
VALUE "LegalCopyright", "@MY_LIBRARY_RC_LEGALCOPYRIGHT@"
38+
VALUE "OriginalFilename", "@MY_LIBRARY_RC_ORIGINALFILENAME@"
39+
VALUE "ProductName", "@MY_LIBRARY_RC_PRODUCTNAME@"
40+
VALUE "ProductVersion", "@MY_LIBRARY_RC_PRODUCTVERSION@"
41+
END
42+
END
43+
BLOCK "VarFileInfo"
44+
BEGIN
45+
VALUE "Translation", 0x411, 1200
46+
END
47+
END

0 commit comments

Comments
 (0)