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