libjpeg-turbo.cmake 3.73 KB
Newer Older
yuguo's avatar
yuguo committed
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
include(ExternalProject)

set(LIBJPEG_INCLUDE_DIR ${THIRD_PARTY_DIR}/libjpeg-turbo/include)
set(LIBJPEG_LIBRARY_DIR ${THIRD_PARTY_DIR}/libjpeg-turbo/lib)

set(LIBJPEG_URL https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/2.1.3.tar.gz)
use_mirror(VARIABLE LIBJPEG_URL URL ${LIBJPEG_URL})

if(WIN32)

elseif(APPLE AND ("${CMAKE_GENERATOR}" STREQUAL "Xcode"))
  set(LIBJPEG_BUILD_SRC_DIR ${CMAKE_CURRENT_BINARY_DIR}/libjpeg-turbo/src/libjpeg-turbo)
  set(LIBJPEG_BUILD_LIBRARY_DIR
      ${CMAKE_CURRENT_BINARY_DIR}/libjpeg-turbo/src/libjpeg-turbo/${CMAKE_BUILD_TYPE})
  set(LIBJPEG_LIBRARY_NAMES libturbojpeg.a)
else()
  set(LIBJPEG_BUILD_SRC_DIR ${CMAKE_CURRENT_BINARY_DIR}/libjpeg-turbo/src/libjpeg-turbo)
  set(LIBJPEG_BUILD_LIBRARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/libjpeg-turbo/src/libjpeg-turbo)
  set(LIBJPEG_LIBRARY_NAMES libturbojpeg.a)
endif()

foreach(LIBRARY_NAME ${LIBJPEG_LIBRARY_NAMES})
  list(APPEND LIBJPEG_STATIC_LIBRARIES ${LIBJPEG_LIBRARY_DIR}/${LIBRARY_NAME})
  list(APPEND LIBJPEG_BUILD_STATIC_LIBRARIES ${LIBJPEG_BUILD_LIBRARY_DIR}/${LIBRARY_NAME})
endforeach()

set(LIBJPEG_HEADERS
    "${LIBJPEG_BUILD_SRC_DIR}/cderror.h"
    "${LIBJPEG_BUILD_SRC_DIR}/cdjpeg.h"
    "${LIBJPEG_BUILD_SRC_DIR}/cmyk.h"
    "${LIBJPEG_BUILD_SRC_DIR}/jchuff.h"
    "${LIBJPEG_BUILD_SRC_DIR}/jconfig.h"
    "${LIBJPEG_BUILD_SRC_DIR}/jdcoefct.h"
    "${LIBJPEG_BUILD_SRC_DIR}/jdct.h"
    "${LIBJPEG_BUILD_SRC_DIR}/jdhuff.h"
    "${LIBJPEG_BUILD_SRC_DIR}/jdmainct.h"
    "${LIBJPEG_BUILD_SRC_DIR}/jdmaster.h"
    "${LIBJPEG_BUILD_SRC_DIR}/jdsample.h"
    "${LIBJPEG_BUILD_SRC_DIR}/jerror.h"
    "${LIBJPEG_BUILD_SRC_DIR}/jinclude.h"
    "${LIBJPEG_BUILD_SRC_DIR}/jmemsys.h"
    "${LIBJPEG_BUILD_SRC_DIR}/jmorecfg.h"
    "${LIBJPEG_BUILD_SRC_DIR}/jpegcomp.h"
    "${LIBJPEG_BUILD_SRC_DIR}/jpegint.h"
    "${LIBJPEG_BUILD_SRC_DIR}/jpeglib.h"
    "${LIBJPEG_BUILD_SRC_DIR}/jpeg_nbits_table.h"
    "${LIBJPEG_BUILD_SRC_DIR}/jsimddct.h"
    "${LIBJPEG_BUILD_SRC_DIR}/jsimd.h"
    "${LIBJPEG_BUILD_SRC_DIR}/jversion.h"
    "${LIBJPEG_BUILD_SRC_DIR}/tjutil.h"
    "${LIBJPEG_BUILD_SRC_DIR}/transupp.h"
    "${LIBJPEG_BUILD_SRC_DIR}/turbojpeg.h")

if(THIRD_PARTY)

  ExternalProject_Add(
    libjpeg-turbo
    PREFIX libjpeg-turbo
    URL ${LIBJPEG_URL}
    URL_MD5 627b980fad0573e08e4c3b80b290fc91
    UPDATE_COMMAND ""
    INSTALL_COMMAND ""
    BUILD_IN_SOURCE 1
    BUILD_BYPRODUCTS ${LIBJPEG_STATIC_LIBRARIES}
    CMAKE_CACHE_ARGS
      -DCMAKE_C_COMPILER_LAUNCHER:STRING=${CMAKE_C_COMPILER_LAUNCHER}
      -DCMAKE_CXX_COMPILER_LAUNCHER:STRING=${CMAKE_CXX_COMPILER_LAUNCHER}
      -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
      -DCMAKE_CXX_FLAGS_DEBUG:STRING=${CMAKE_CXX_FLAGS_DEBUG}
      -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON)

  # put libjpeg-turbo includes in the directory where they are expected
  add_custom_target(libjpeg_create_header_dir COMMAND ${CMAKE_COMMAND} -E make_directory
                                                      ${LIBJPEG_INCLUDE_DIR} DEPENDS libjpeg-turbo)

  add_custom_target(libjpeg_copy_headers_to_destination DEPENDS libjpeg_create_header_dir)

  foreach(header_file ${LIBJPEG_HEADERS})
    add_custom_command(
      TARGET libjpeg_copy_headers_to_destination PRE_BUILD
      COMMAND ${CMAKE_COMMAND} -E copy_if_different ${header_file} ${LIBJPEG_INCLUDE_DIR})
  endforeach()

  # pub libjpeg libs in the directory where they are expected
  add_custom_target(libjpeg_create_library_dir COMMAND ${CMAKE_COMMAND} -E make_directory
                                                       ${LIBJPEG_LIBRARY_DIR} DEPENDS libjpeg-turbo)

  add_custom_target(
    libjpeg_copy_libs_to_destination
    COMMAND ${CMAKE_COMMAND} -E copy_if_different ${LIBJPEG_BUILD_STATIC_LIBRARIES}
            ${LIBJPEG_LIBRARY_DIR} DEPENDS libjpeg_create_library_dir)

endif(THIRD_PARTY)