|
| 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 | +) |
0 commit comments