Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CMake: Use BUILD_SHARED_LIBS intead of ENABLED_SHARED, ENABLE_STATIC #440

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 20 additions & 42 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -218,10 +218,8 @@ macro(boolean_number var)
endif()
endmacro()

option(ENABLE_SHARED "Build shared libraries" TRUE)
boolean_number(ENABLE_SHARED)
option(ENABLE_STATIC "Build static libraries" TRUE)
boolean_number(ENABLE_STATIC)
option(BUILD_SHARED_LIBS "Build shared libraries(.dll/.so) instead of static ones(.lib/.a)" TRUE)
boolean_number(BUILD_SHARED_LIBS)
option(REQUIRE_SIMD "Generate a fatal error if SIMD extensions are not available for this platform (default is to fall back to a non-SIMD build)" FALSE)
boolean_number(REQUIRE_SIMD)
option(PNG_SUPPORTED "Enable PNG support (requires libpng)" TRUE)
Expand All @@ -235,7 +233,7 @@ boolean_number(WITH_ARITH_ENC)
if(CMAKE_C_COMPILER_ABI MATCHES "ELF X32")
set(WITH_JAVA 0)
else()
option(WITH_JAVA "Build Java wrapper for the TurboJPEG API library (implies ENABLE_SHARED=1)" FALSE)
option(WITH_JAVA "Build Java wrapper for the TurboJPEG API library (implies BUILD_SHARED_LIBS=1)" FALSE)
boolean_number(WITH_JAVA)
endif()
option(WITH_JPEG7 "Emulate libjpeg v7 API/ABI (this makes ${CMAKE_PROJECT_NAME} backward-incompatible with libjpeg v6b)" FALSE)
Expand All @@ -259,23 +257,12 @@ macro(report_option var desc)
endmacro()

if(WITH_JAVA)
set(ENABLE_SHARED 1)
set(BUILD_SHARED_LIBS 1)
endif()

# Explicitly setting CMAKE_POSITION_INDEPENDENT_CODE=FALSE disables PIC for all
# targets, which will cause the shared library builds to fail. Thus, if shared
# libraries are enabled and CMAKE_POSITION_INDEPENDENT_CODE is explicitly set
# to FALSE, we need to unset it, thus restoring the default behavior
# (automatically using PIC for shared library targets.)
if(DEFINED CMAKE_POSITION_INDEPENDENT_CODE AND
NOT CMAKE_POSITION_INDEPENDENT_CODE AND ENABLE_SHARED)
unset(CMAKE_POSITION_INDEPENDENT_CODE CACHE)
endif()

report_option(ENABLE_SHARED "Shared libraries")
report_option(ENABLE_STATIC "Static libraries")
report_option(BUILD_SHARED_LIBS "Shared libraries")

if(ENABLE_SHARED)
if(BUILD_SHARED_LIBS)
set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR})
endif()

Expand Down Expand Up @@ -631,7 +618,7 @@ if(WITH_SIMD)
endif()
else()
add_library(simd OBJECT jsimd_none.c)
if(NOT WIN32 AND (CMAKE_POSITION_INDEPENDENT_CODE OR ENABLE_SHARED))
if(NOT WIN32 AND (CMAKE_POSITION_INDEPENDENT_CODE OR BUILD_SHARED_LIBS))
set_target_properties(simd PROPERTIES POSITION_INDEPENDENT_CODE 1)
endif()
endif()
Expand All @@ -640,11 +627,11 @@ if(WITH_JAVA)
add_subdirectory(java)
endif()

if(ENABLE_SHARED)
if(BUILD_SHARED_LIBS)
add_subdirectory(sharedlib)
endif()

if(ENABLE_STATIC)
if(NOT BUILD_SHARED_LIBS)
add_library(jpeg-static STATIC ${JPEG_SOURCES} $<TARGET_OBJECTS:simd>
${SIMD_OBJS})
if(NOT MSVC)
Expand All @@ -653,7 +640,7 @@ if(ENABLE_STATIC)
endif()

if(WITH_TURBOJPEG)
if(ENABLE_SHARED)
if(BUILD_SHARED_LIBS)
set(TURBOJPEG_SOURCES ${JPEG_SOURCES} $<TARGET_OBJECTS:simd> ${SIMD_OBJS}
turbojpeg.c transupp.c jdatadst-tj.c jdatasrc-tj.c rdbmp.c rdppm.c
wrbmp.c wrppm.c)
Expand Down Expand Up @@ -708,10 +695,10 @@ if(WITH_TURBOJPEG)
target_link_libraries(tjexample turbojpeg)
if(UNIX)
target_link_libraries(tjexample m)
endif()
endif()
endif()

if(ENABLE_STATIC)
if(NOT BUILD_SHARED_LIBS)
add_library(turbojpeg-static STATIC ${JPEG_SOURCES} $<TARGET_OBJECTS:simd>
${SIMD_OBJS} turbojpeg.c transupp.c jdatadst-tj.c jdatasrc-tj.c rdbmp.c
rdppm.c wrbmp.c wrppm.c)
Expand Down Expand Up @@ -753,7 +740,7 @@ else()
endif()
endif()

if(ENABLE_STATIC)
if(NOT BUILD_SHARED_LIBS)
add_executable(cjpeg-static cjpeg.c cdjpeg.c rdgif.c rdppm.c rdjpeg.c rdswitch.c
${CJPEG_BMP_SOURCES})
set_property(TARGET cjpeg-static PROPERTY COMPILE_FLAGS ${COMPILE_FLAGS})
Expand All @@ -763,14 +750,6 @@ if(ENABLE_STATIC)
endif()

if(PNG_SUPPORTED)
# to avoid finding shared library from CMake cache
unset(PNG_LIBRARY CACHE)
unset(PNG_LIBRARY_RELEASE CACHE)
unset(PNG_LIBRARY_DEBUG CACHE)
unset(ZLIB_LIBRARY CACHE)
unset(ZLIB_LIBRARY_RELEASE CACHE)
unset(ZLIB_LIBRARY_DEBUG CACHE)

if (APPLE)
find_package(ZLIB REQUIRED) # macos doesn't have static zlib
endif()
Expand Down Expand Up @@ -971,10 +950,9 @@ if(WITH_JAVA)
endif()

set(TEST_LIBTYPES "")
if(ENABLE_SHARED)
if(BUILD_SHARED_LIBS)
set(TEST_LIBTYPES ${TEST_LIBTYPES} shared)
endif()
if(ENABLE_STATIC)
else()
set(TEST_LIBTYPES ${TEST_LIBTYPES} static)
endif()

Expand Down Expand Up @@ -1494,7 +1472,7 @@ endif()
set(EXE ${CMAKE_EXECUTABLE_SUFFIX})

if(WITH_TURBOJPEG)
if(ENABLE_SHARED)
if(BUILD_SHARED_LIBS)
install(TARGETS turbojpeg EXPORT ${CMAKE_PROJECT_NAME}Targets
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
Expand All @@ -1508,11 +1486,11 @@ if(WITH_TURBOJPEG)
DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL)
endif()
endif()
if(ENABLE_STATIC)
if(NOT BUILD_SHARED_LIBS)
install(TARGETS turbojpeg-static EXPORT ${CMAKE_PROJECT_NAME}Targets
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
if(NOT ENABLE_SHARED)
if(NOT BUILD_SHARED_LIBS)
if(GENERATOR_IS_MULTI_CONFIG)
set(DIR "${CMAKE_CURRENT_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}")
else()
Expand All @@ -1526,11 +1504,11 @@ if(WITH_TURBOJPEG)
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()

if(ENABLE_STATIC)
if(NOT BUILD_SHARED_LIBS)
install(TARGETS jpeg-static EXPORT ${CMAKE_PROJECT_NAME}Targets
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
if(NOT ENABLE_SHARED)
if(NOT BUILD_SHARED_LIBS)
if(GENERATOR_IS_MULTI_CONFIG)
set(DIR "${CMAKE_CURRENT_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}")
else()
Expand Down
4 changes: 2 additions & 2 deletions appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,15 @@ before_build:
build_script:
## Build shared
- cmake -B shared -A %PLATFORM%
-DENABLE_SHARED=1 -DENABLE_STATIC=0
-DBUILD_SHARED_LIBS=1
-DREQUIRE_SIMD=1
-DCMAKE_TOOLCHAIN_FILE=C:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake

- cmake --build shared --config Release

## Build static
- cmake -B static -A %PLATFORM%
-DENABLE_SHARED=0 -DENABLE_STATIC=1
-DBUILD_SHARED_LIBS=0
-DREQUIRE_SIMD=1
-DCMAKE_TOOLCHAIN_FILE=C:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake
-DVCPKG_TARGET_TRIPLET=%ARCH%-windows-static
Expand Down
2 changes: 1 addition & 1 deletion fuzz/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
if(NOT ENABLE_STATIC)
if(BUILD_SHARED_LIBS)
message(FATAL_ERROR "Fuzz targets require static libraries.")
endif()
if(NOT WITH_TURBOJPEG)
Expand Down
2 changes: 1 addition & 1 deletion fuzz/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ if [ $# -ge 1 ]; then
FUZZER_SUFFIX="`echo $1 | sed 's/\./_/g'`"
fi

cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_STATIC=1 -DENABLE_SHARED=0 \
cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_SHARED_LIBS=0 \
-DCMAKE_C_FLAGS_RELWITHDEBINFO="-g -DNDEBUG" \
-DCMAKE_CXX_FLAGS_RELWITHDEBINFO="-g -DNDEBUG" -DCMAKE_INSTALL_PREFIX=$WORK \
-DWITH_FUZZ=1 -DFUZZ_BINDIR=$OUT -DFUZZ_LIBRARY=$LIB_FUZZING_ENGINE \
Expand Down
8 changes: 0 additions & 8 deletions sharedlib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -91,14 +91,6 @@ set_property(TARGET cjpeg PROPERTY COMPILE_FLAGS ${COMPILE_FLAGS})
target_link_libraries(cjpeg jpeg)

if(PNG_SUPPORTED)
# to avoid finding static library from CMake cache
unset(PNG_LIBRARY CACHE)
unset(PNG_LIBRARY_RELEASE CACHE)
unset(PNG_LIBRARY_DEBUG CACHE)
unset(ZLIB_LIBRARY CACHE)
unset(ZLIB_LIBRARY_RELEASE CACHE)
unset(ZLIB_LIBRARY_DEBUG CACHE)

find_package(PNG 1.6 REQUIRED)
find_package(ZLIB REQUIRED)
target_include_directories(cjpeg PUBLIC ${PNG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR})
Expand Down
12 changes: 6 additions & 6 deletions simd/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ if(CMAKE_ASM_NASM_COMPILER_TYPE MATCHES "yasm")
endforeach()
endif()

if(NOT WIN32 AND (CMAKE_POSITION_INDEPENDENT_CODE OR ENABLE_SHARED))
if(NOT WIN32 AND (CMAKE_POSITION_INDEPENDENT_CODE OR BUILD_SHARED_LIBS))
set(CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -DPIC")
endif()

Expand Down Expand Up @@ -202,7 +202,7 @@ set(SIMD_OBJS ${SIMD_OBJS} PARENT_SCOPE)
else()
add_library(simd OBJECT ${SIMD_SOURCES} ${CPU_TYPE}/jsimd.c)
endif()
if(NOT WIN32 AND (CMAKE_POSITION_INDEPENDENT_CODE OR ENABLE_SHARED))
if(NOT WIN32 AND (CMAKE_POSITION_INDEPENDENT_CODE OR BUILD_SHARED_LIBS))
set_target_properties(simd PROPERTIES POSITION_INDEPENDENT_CODE 1)
endif()

Expand Down Expand Up @@ -394,7 +394,7 @@ endif()

add_library(simd OBJECT ${SIMD_SOURCES} arm/aarch${BITS}/jsimd.c)

if(CMAKE_POSITION_INDEPENDENT_CODE OR ENABLE_SHARED)
if(CMAKE_POSITION_INDEPENDENT_CODE OR BUILD_SHARED_LIBS)
set_target_properties(simd PROPERTIES POSITION_INDEPENDENT_CODE 1)
endif()

Expand Down Expand Up @@ -436,7 +436,7 @@ endif()

add_library(simd OBJECT mips/jsimd_dspr2.S mips/jsimd.c)

if(CMAKE_POSITION_INDEPENDENT_CODE OR ENABLE_SHARED)
if(CMAKE_POSITION_INDEPENDENT_CODE OR BUILD_SHARED_LIBS)
set_target_properties(simd PROPERTIES POSITION_INDEPENDENT_CODE 1)
endif()

Expand Down Expand Up @@ -487,7 +487,7 @@ endforeach()

add_library(simd OBJECT ${SIMD_SOURCES} mips64/jsimd.c)

if(CMAKE_POSITION_INDEPENDENT_CODE OR ENABLE_SHARED)
if(CMAKE_POSITION_INDEPENDENT_CODE OR BUILD_SHARED_LIBS)
set_target_properties(simd PROPERTIES POSITION_INDEPENDENT_CODE 1)
endif()

Expand Down Expand Up @@ -527,7 +527,7 @@ set_source_files_properties(${SIMD_SOURCES} PROPERTIES

add_library(simd OBJECT ${SIMD_SOURCES} powerpc/jsimd.c)

if(CMAKE_POSITION_INDEPENDENT_CODE OR ENABLE_SHARED)
if(CMAKE_POSITION_INDEPENDENT_CODE OR BUILD_SHARED_LIBS)
set_target_properties(simd PROPERTIES POSITION_INDEPENDENT_CODE 1)
endif()

Expand Down