Files

91 lines
2.8 KiB
CMake

cmake_minimum_required(VERSION 3.15)
cmake_policy(SET CMP0091 NEW)
cmake_policy(SET CMP0042 NEW)
if(POLICY CMP0135)
cmake_policy(SET CMP0135 NEW) # DOWNLOAD_EXTRACT_TIMESTAMP
endif()
include(ExternalProject)
project (jpeg-turbo)
# define NPI_VERSION
add_definitions(-DNAPI_VERSION=10)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
include_directories(${CMAKE_JS_INC})
set(SOURCE_FILES
"src/buffersize.cc"
"src/buffersize.h"
"src/compress.cc"
"src/compress.h"
"src/decompress.cc"
"src/decompress.h"
"src/enums.cc"
"src/enums.h"
"src/util.cc"
"src/util.h"
"src/exports.cc"
"src/consts.h"
)
set(libjpeg-turbo_version "3.1.3")
set(libjpeg-turbo_url "https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/${libjpeg-turbo_version}/libjpeg-turbo-${libjpeg-turbo_version}.tar.gz")
set(libjpeg-turbo_sha256 "075920b826834ac4ddf97661cc73491047855859affd671d52079c6867c1c6c0")
if(UNIX AND NOT APPLE)
# build shared on linux, to avoid conflicts with libjpeg built into electron
set(ENABLE_SHARED 1)
set(ENABLE_STATIC 0)
else()
# build static elsewhere
set(ENABLE_SHARED 0)
set(ENABLE_STATIC 1)
endif()
# Download and build libjpeg-turbo
ExternalProject_Add(libjpeg-turbo
URL ${libjpeg-turbo_url}
URL_HASH SHA256=${libjpeg-turbo_sha256}
CMAKE_ARGS -DENABLE_SHARED=${ENABLE_SHARED} -DENABLE_STATIC=${ENABLE_STATIC} -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} -DREQUIRE_SIMD=ON ${LIBJPEG_TURBO_OPTIONS}
INSTALL_COMMAND ""
)
ExternalProject_Get_Property(libjpeg-turbo SOURCE_DIR)
set(JPEG_INCLUDE_DIR ${SOURCE_DIR}/src)
ExternalProject_Get_Property(libjpeg-turbo BINARY_DIR)
set(JPEG_LIB_DIR ${BINARY_DIR})
set(JPEG_LIB turbojpeg)
if (MSVC)
# Windows uses a different path for some reason
set(JPEG_LIB_DIR ${JPEG_LIB_DIR}/Release)
set(JPEG_LIB turbojpeg-static)
endif()
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH "$ORIGIN")
add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES} ${CMAKE_JS_SRC})
set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node")
target_include_directories(${PROJECT_NAME} PRIVATE ${JPEG_INCLUDE_DIR})
target_link_directories(${PROJECT_NAME} PRIVATE ${JPEG_LIB_DIR})
target_link_libraries(${PROJECT_NAME} ${CMAKE_JS_LIB} ${JPEG_LIB})
add_dependencies(${PROJECT_NAME} libjpeg-turbo)
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)
if(MSVC AND CMAKE_JS_NODELIB_DEF AND CMAKE_JS_NODELIB_TARGET)
# Generate node.lib
execute_process(COMMAND ${CMAKE_AR} /def:${CMAKE_JS_NODELIB_DEF} /out:${CMAKE_JS_NODELIB_TARGET} ${CMAKE_STATIC_LINKER_FLAGS})
endif()
if(UNIX AND NOT APPLE)
# copy built lib into build dir
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${JPEG_LIB_DIR}/libturbojpeg.so.0 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}
)
endif()