libjxl

FORK: libjxl patches used on blog
git clone https://git.neptards.moe/blog/libjxl.git
Log | Files | Refs | Submodules | README | LICENSE

CMakeLists.txt (5541B)


      1 # Copyright (c) the JPEG XL Project Authors. All rights reserved.
      2 #
      3 # Use of this source code is governed by a BSD-style
      4 # license that can be found in the LICENSE file.
      5 
      6 set(JPEGXL_MAJOR_VERSION 0)
      7 set(JPEGXL_MINOR_VERSION 10)
      8 set(JPEGXL_PATCH_VERSION 4)
      9 set(JPEGXL_LIBRARY_VERSION
     10     "${JPEGXL_MAJOR_VERSION}.${JPEGXL_MINOR_VERSION}.${JPEGXL_PATCH_VERSION}")
     11 
     12 # This is the library API/ABI compatibility version. Changing this value makes
     13 # the shared library incompatible with previous version. A program linked
     14 # against this shared library SOVERSION will not run with an older SOVERSION.
     15 # It is important to update this value when making incompatible API/ABI changes
     16 # so that programs that depend on libjxl can update their dependencies. Semantic
     17 # versioning allows 0.y.z to have incompatible changes in minor versions.
     18 set(JPEGXL_SO_MINOR_VERSION 10)
     19 if (JPEGXL_MAJOR_VERSION EQUAL 0)
     20   set(JPEGXL_LIBRARY_SOVERSION
     21       "${JPEGXL_MAJOR_VERSION}.${JPEGXL_SO_MINOR_VERSION}")
     22 else()
     23   set(JPEGXL_LIBRARY_SOVERSION "${JPEGXL_MAJOR_VERSION}")
     24 endif()
     25 
     26 
     27 # List of warning and feature flags for our library and tests.
     28 if (MSVC)
     29   set(JPEGXL_INTERNAL_FLAGS
     30     # TODO(janwas): add flags
     31   )
     32 else ()
     33   set(JPEGXL_INTERNAL_FLAGS
     34     # F_FLAGS
     35     -fmerge-all-constants
     36     -fno-builtin-fwrite
     37     -fno-builtin-fread
     38 
     39     # WARN_FLAGS
     40     -Wall
     41     -Wextra
     42     -Wc++11-compat
     43     -Warray-bounds
     44     -Wformat-security
     45     -Wimplicit-fallthrough
     46     -Wno-register  # Needed by public headers in lcms
     47     -Wno-unused-function
     48     -Wno-unused-parameter
     49     -Wnon-virtual-dtor
     50     -Woverloaded-virtual
     51     -Wvla
     52   )
     53 
     54   # Warning flags supported by clang.
     55   if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
     56     list(APPEND JPEGXL_INTERNAL_FLAGS
     57       -Wdeprecated-increment-bool
     58       # TODO(deymo): Add -Wextra-semi once we update third_party/highway.
     59       # -Wextra-semi
     60       -Wfloat-overflow-conversion
     61       -Wfloat-zero-conversion
     62       -Wfor-loop-analysis
     63       -Wgnu-redeclared-enum
     64       -Winfinite-recursion
     65       -Wliteral-conversion
     66       -Wno-c++98-compat
     67       -Wno-unused-command-line-argument
     68       -Wprivate-header
     69       -Wself-assign
     70       -Wstring-conversion
     71       -Wtautological-overlap-compare
     72       -Wthread-safety-analysis
     73       -Wundefined-func-template
     74       -Wunreachable-code
     75       -Wunused-comparison
     76     )
     77     if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.0)
     78       list(APPEND HWY_FLAGS -Wc++2a-extensions)
     79     endif()
     80   endif()  # Clang
     81 
     82   if (WIN32)
     83     list(APPEND JPEGXL_INTERNAL_FLAGS
     84       -Wno-cast-align
     85       -Wno-double-promotion
     86       -Wno-float-equal
     87       -Wno-format-nonliteral
     88       -Wno-shadow
     89       -Wno-sign-conversion
     90       -Wno-zero-as-null-pointer-constant
     91     )
     92 
     93     if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
     94       list(APPEND JPEGXL_INTERNAL_FLAGS
     95         -Wno-used-but-marked-unused
     96         -Wno-unused-template
     97         -Wno-unused-member-function
     98         -Wno-shadow-field-in-constructor
     99         -Wno-language-extension-token
    100         -Wno-global-constructors
    101         -Wno-c++98-compat-pedantic
    102       )
    103     endif()  # Clang
    104   else()  # WIN32
    105     list(APPEND JPEGXL_INTERNAL_FLAGS
    106       -fsized-deallocation
    107       -fno-exceptions
    108 
    109       # Language flags
    110       -fmath-errno
    111     )
    112 
    113     if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
    114       list(APPEND JPEGXL_INTERNAL_FLAGS
    115         -fnew-alignment=8
    116         -fno-cxx-exceptions
    117         -fno-slp-vectorize
    118         -fno-vectorize
    119 
    120         -disable-free
    121         -disable-llvm-verifier
    122       )
    123     endif()  # Clang
    124   endif()  # WIN32
    125 endif()  #!MSVC
    126 
    127 if (JPEGXL_ENABLE_SKCMS)
    128   list(APPEND JPEGXL_INTERNAL_FLAGS -DJPEGXL_ENABLE_SKCMS=1)
    129 endif ()
    130 
    131 # strips the -internal suffix from all the elements in LIST
    132 function(strip_internal OUTPUT_VAR LIB_LIST)
    133   foreach(lib IN LISTS ${LIB_LIST})
    134     string(REGEX REPLACE "-internal$" "" lib "${lib}")
    135     list(APPEND out_list "${lib}")
    136   endforeach()
    137   set(${OUTPUT_VAR} ${out_list} PARENT_SCOPE)
    138 endfunction()
    139 
    140 # set variables for jxl_cms.cmake and jxl.cmake
    141 if(IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}")
    142     set(PKGCONFIG_TARGET_INCLUDES "${CMAKE_INSTALL_INCLUDEDIR}")
    143 else()
    144     set(PKGCONFIG_TARGET_INCLUDES "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
    145 endif()
    146 if(IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}")
    147     set(PKGCONFIG_TARGET_LIBS "${CMAKE_INSTALL_LIBDIR}")
    148 else()
    149     set(PKGCONFIG_TARGET_LIBS "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}")
    150 endif()
    151 
    152 include(CheckCXXSymbolExists)
    153 set(PKGCONFIG_CXX_LIB "")
    154 check_cxx_symbol_exists(__GLIBCXX__ iostream LIBSTDCXX)
    155 check_cxx_symbol_exists(_LIBCPP_VERSION iostream LIBCXX)
    156 if(LIBSTDCXX)
    157   set(PKGCONFIG_CXX_LIB "-lstdc++")
    158 elseif(LIBCXX)
    159   set(PKGCONFIG_CXX_LIB "-lc++")
    160 endif()
    161 
    162 # The jxl_cms library definition.
    163 include(jxl_cms.cmake)
    164 # The jxl library definition.
    165 include(jxl.cmake)
    166 
    167 # Other libraries outside the core jxl library.
    168 if(JPEGXL_ENABLE_TOOLS OR BUILD_TESTING)
    169   include(jxl_extras.cmake)
    170 endif()
    171 include(jxl_threads.cmake)
    172 if (JPEGXL_ENABLE_JPEGLI)
    173   include(jpegli.cmake)
    174 endif()
    175 
    176 # For simplicity all the library headers, both source and generated ones, are
    177 # gathered in the binary folder. There is no distinction on which libraries use
    178 # which header since it is expected that all developer libraries are available
    179 # together at build time.
    180 install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/jxl
    181   DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
    182 
    183 if(BUILD_TESTING)
    184   include(GoogleTest)
    185 endif()
    186 
    187 # Tests for the jxl library.
    188 include(jxl_tests.cmake)
    189 
    190 if(BUILD_TESTING)
    191   # Google benchmark for the jxl library
    192   include(jxl_benchmark.cmake)
    193 endif()