From 2f45b472aa991efe051f74943dbc709652f0572e Mon Sep 17 00:00:00 2001 From: Ram Mohan Date: Fri, 29 Mar 2024 04:00:19 +0530 Subject: Separate include folders to private and export sets This is to add export set of ultrahdr target with PUBLIC parameter so that its users can access them directly. Clients of the library (sample app) need not to have access to private set Also renamed some of the targets and vars Test: Build --- CMakeLists.txt | 91 +++++++++++++++++++++++++++++++--------------------------- 1 file changed, 48 insertions(+), 43 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b7c789f..aa14f8b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,12 +49,13 @@ endif() ########################################################### # Directories ########################################################### -set(SOURCE_DIR ${CMAKE_SOURCE_DIR}/lib) -set(THIRD_PARTY_DIR ${CMAKE_SOURCE_DIR}/third_party) -set(TESTS_DIR ${CMAKE_SOURCE_DIR}/tests) -set(BENCHMARK_DIR ${CMAKE_SOURCE_DIR}/benchmark) -set(FUZZERS_DIR ${CMAKE_SOURCE_DIR}/fuzzer) -set(EXAMPLES_DIR ${CMAKE_SOURCE_DIR}/examples) +set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib) +set(THIRD_PARTY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party) +set(TESTS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/tests) +set(BENCHMARK_DIR ${CMAKE_CURRENT_SOURCE_DIR}/benchmark) +set(FUZZERS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/fuzzer) +set(EXAMPLES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/examples) +set(EXPORT_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) message(WARNING "Selected in-source build. Preferably, create a build/ directory and build from there.") @@ -81,16 +82,17 @@ option_if_not_defined(UHDR_BUILD_EXAMPLES "Build examples " TRUE) option_if_not_defined(UHDR_BUILD_TESTS "Build unit tests " FALSE) option_if_not_defined(UHDR_BUILD_BENCHMARK "Build benchmark " FALSE) option_if_not_defined(UHDR_BUILD_FUZZERS "Build fuzzers " FALSE) +option_if_not_defined(UHDR_BUILD_DEPS "Build deps and not use pre-installed packages " FALSE) option_if_not_defined(UHDR_ENABLE_LOGS "Build with verbose logging " FALSE) -option_if_not_defined(UHDR_BUILD_ALWAYS "Build all deps and not use pre-installed packages " FALSE) if(UHDR_BUILD_BENCHMARK AND WIN32) message(FATAL_ERROR "Building benchmarks on current platform not supported") endif() +# side effects if(UHDR_BUILD_FUZZERS) - message(STATUS "Enforcing UHDR_BUILD_ALWAYS to TRUE") - set(UHDR_BUILD_ALWAYS TRUE) + set(UHDR_BUILD_DEPS TRUE) # for fuzz testing its best to build all dependencies from source. + # This is to instrument dependencies libs as well endif() ########################################################### @@ -187,7 +189,7 @@ set(UHDR_CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${UHDR_COMPILE_FLAGS_STR}") set(UHDR_CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${UHDR_COMPILE_FLAGS_STR}") # libjpeg-turbo -if(NOT UHDR_BUILD_ALWAYS) +if(NOT UHDR_BUILD_DEPS) find_package(JPEG) endif() if(NOT JPEG_FOUND) @@ -306,42 +308,45 @@ set_property(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ########################################################### # File Lists ########################################################### -file(GLOB UHDR_LIB_LIST "${SOURCE_DIR}/src/*.cpp") -file(GLOB UHDR_TEST_LIST "${TESTS_DIR}/*.cpp") -file(GLOB UHDR_BM_LIST "${BENCHMARK_DIR}/*.cpp") -file(GLOB IMAGE_IO_LIST "${THIRD_PARTY_DIR}/image_io/src/**/*.cc") +file(GLOB UHDR_CORE_SRCS_LIST "${SOURCE_DIR}/src/*.cpp") +file(GLOB UHDR_TEST_SRCS_LIST "${TESTS_DIR}/*.cpp") +file(GLOB UHDR_BM_SRCS_LIST "${BENCHMARK_DIR}/*.cpp") +file(GLOB IMAGE_IO_SRCS_LIST "${THIRD_PARTY_DIR}/image_io/src/**/*.cc") -set(COMMON_INCLUDE_LIST ${CMAKE_SOURCE_DIR} ${SOURCE_DIR}/include/ ${JPEG_INCLUDE_DIRS}) +set(PRIVATE_INCLUDE_DIR ${SOURCE_DIR}/include/ ${JPEG_INCLUDE_DIRS}) set(COMMON_LIBS_LIST ${JPEG_LIBRARIES} Threads::Threads) ########################################################### # Targets ########################################################### -add_library(image_io STATIC ${IMAGE_IO_LIST}) -target_include_directories(image_io PRIVATE +set(IMAGEIO_TARGET_NAME image_io) +add_library(${IMAGEIO_TARGET_NAME} STATIC ${IMAGE_IO_SRCS_LIST}) +target_include_directories(${IMAGEIO_TARGET_NAME} PRIVATE "${THIRD_PARTY_DIR}/image_io/includes" "${THIRD_PARTY_DIR}/image_io/src/modp_b64" "${THIRD_PARTY_DIR}/image_io/src/modp_b64/modp_b64") -add_library(ultrahdr STATIC ${UHDR_LIB_LIST}) +set(UHDR_CORE_LIB_NAME core) +add_library(${UHDR_CORE_LIB_NAME} STATIC ${UHDR_CORE_SRCS_LIST}) if(NOT JPEG_FOUND) - add_dependencies(ultrahdr ${JPEGTURBO_TARGET_NAME}) + add_dependencies(${UHDR_CORE_LIB_NAME} ${JPEGTURBO_TARGET_NAME}) endif() -#target_compile_options(ultrahdr PRIVATE -Wall -Wextra -Wpedantic) -target_include_directories(ultrahdr PRIVATE - ${COMMON_INCLUDE_LIST} +#target_compile_options(${UHDR_CORE_LIB_NAME} PRIVATE -Wall -Wextra -Wpedantic) +target_include_directories(${UHDR_CORE_LIB_NAME} PRIVATE + ${PRIVATE_INCLUDE_DIR} "${THIRD_PARTY_DIR}/image_io/includes/" ) -target_link_libraries(ultrahdr PRIVATE ${COMMON_LIBS_LIST} image_io) +target_include_directories(${UHDR_CORE_LIB_NAME} PUBLIC ${EXPORT_INCLUDE_DIR}) + +target_link_libraries(${UHDR_CORE_LIB_NAME} PRIVATE ${COMMON_LIBS_LIST} ${IMAGEIO_TARGET_NAME}) if(UHDR_BUILD_EXAMPLES) add_executable(ultrahdr_app "${EXAMPLES_DIR}/ultrahdr_app.cpp") - add_dependencies(ultrahdr_app ultrahdr) - target_include_directories(ultrahdr_app PRIVATE ${COMMON_INCLUDE_LIST}) + add_dependencies(ultrahdr_app ${UHDR_CORE_LIB_NAME}) if(UHDR_BUILD_FUZZERS) target_link_options(ultrahdr_app PRIVATE -fsanitize=fuzzer-no-link) endif() - target_link_libraries(ultrahdr_app PRIVATE ultrahdr) + target_link_libraries(ultrahdr_app PRIVATE ${UHDR_CORE_LIB_NAME}) endif() if(UHDR_BUILD_TESTS OR UHDR_BUILD_BENCHMARK) @@ -361,30 +366,30 @@ if(UHDR_BUILD_TESTS OR UHDR_BUILD_BENCHMARK) endif() if(UHDR_BUILD_TESTS) - add_executable(ultrahdr_unit_test ${UHDR_TEST_LIST}) - add_dependencies(ultrahdr_unit_test ${GTEST_TARGET_NAME} ultrahdr) + add_executable(ultrahdr_unit_test ${UHDR_TEST_SRCS_LIST}) + add_dependencies(ultrahdr_unit_test ${GTEST_TARGET_NAME} ${UHDR_CORE_LIB_NAME}) target_include_directories(ultrahdr_unit_test PRIVATE - ${COMMON_INCLUDE_LIST} + ${PRIVATE_INCLUDE_DIR} ${GTEST_INCLUDE_DIRS} ) if(UHDR_BUILD_FUZZERS) target_link_options(ultrahdr_unit_test PRIVATE -fsanitize=fuzzer-no-link) endif() - target_link_libraries(ultrahdr_unit_test ultrahdr ${GTEST_BOTH_LIBRARIES}) + target_link_libraries(ultrahdr_unit_test ${UHDR_CORE_LIB_NAME} ${GTEST_BOTH_LIBRARIES}) add_test(NAME UHDRUnitTests, COMMAND ultrahdr_unit_test) endif() if(UHDR_BUILD_BENCHMARK) - add_executable(ultrahdr_bm ${UHDR_BM_LIST}) - add_dependencies(ultrahdr_bm ${BM_TARGET_NAME} ultrahdr) + add_executable(ultrahdr_bm ${UHDR_BM_SRCS_LIST}) + add_dependencies(ultrahdr_bm ${BM_TARGET_NAME} ${UHDR_CORE_LIB_NAME}) target_include_directories(ultrahdr_bm PRIVATE - ${COMMON_INCLUDE_LIST} + ${PRIVATE_INCLUDE_DIR} ${BENCHMARK_INCLUDE_DIR} ) if(UHDR_BUILD_FUZZERS) target_link_options(ultrahdr_bm PRIVATE -fsanitize=fuzzer-no-link) endif() - target_link_libraries(ultrahdr_bm ultrahdr ${BENCHMARK_LIBRARIES}) + target_link_libraries(ultrahdr_bm ${UHDR_CORE_LIB_NAME} ${BENCHMARK_LIBRARIES}) set(RES_FILE "${TESTS_DIR}/data/UltrahdrBenchmarkTestRes-1.0.zip") set(RES_FILE_MD5SUM "96651c5c07505c37aa017c57f480e6c1") @@ -424,24 +429,24 @@ endif() if(UHDR_BUILD_FUZZERS) add_executable(ultrahdr_enc_fuzzer ${FUZZERS_DIR}/ultrahdr_enc_fuzzer.cpp) - add_dependencies(ultrahdr_enc_fuzzer ultrahdr) - target_include_directories(ultrahdr_enc_fuzzer PRIVATE ${COMMON_INCLUDE_LIST}) + add_dependencies(ultrahdr_enc_fuzzer ${UHDR_CORE_LIB_NAME}) + target_include_directories(ultrahdr_enc_fuzzer PRIVATE ${PRIVATE_INCLUDE_DIR}) if(DEFINED ENV{LIB_FUZZING_ENGINE}) target_link_options(ultrahdr_enc_fuzzer PRIVATE $ENV{LIB_FUZZING_ENGINE}) else() target_link_options(ultrahdr_enc_fuzzer PRIVATE -fsanitize=fuzzer) endif() - target_link_libraries(ultrahdr_enc_fuzzer ultrahdr) + target_link_libraries(ultrahdr_enc_fuzzer ${UHDR_CORE_LIB_NAME}) add_executable(ultrahdr_dec_fuzzer ${FUZZERS_DIR}/ultrahdr_dec_fuzzer.cpp) - add_dependencies(ultrahdr_dec_fuzzer ultrahdr) - target_include_directories(ultrahdr_dec_fuzzer PRIVATE ${COMMON_INCLUDE_LIST}) + add_dependencies(ultrahdr_dec_fuzzer ${UHDR_CORE_LIB_NAME}) + target_include_directories(ultrahdr_dec_fuzzer PRIVATE ${PRIVATE_INCLUDE_DIR}) if(DEFINED ENV{LIB_FUZZING_ENGINE}) target_link_options(ultrahdr_dec_fuzzer PRIVATE $ENV{LIB_FUZZING_ENGINE}) else() target_link_options(ultrahdr_dec_fuzzer PRIVATE -fsanitize=fuzzer) endif() - target_link_libraries(ultrahdr_dec_fuzzer ultrahdr) + target_link_libraries(ultrahdr_dec_fuzzer ${UHDR_CORE_LIB_NAME}) endif() ########################################################### @@ -542,11 +547,11 @@ function(combine_static_libs output_lib list_of_targets list_of_addl_libs) endif() endfunction() -if(UHDR_BUILD_ALWAYS) - set(INPUT_TARGETS ultrahdr image_io ${JPEGTURBO_TARGET_NAME}) +if(UHDR_BUILD_DEPS) + set(INPUT_TARGETS ${UHDR_CORE_LIB_NAME} ${IMAGEIO_TARGET_NAME} ${JPEGTURBO_TARGET_NAME}) set(ADDL_LIBS ${JPEG_LIBRARIES}) else() - set(INPUT_TARGETS ultrahdr image_io) + set(INPUT_TARGETS ${UHDR_CORE_LIB_NAME} ${IMAGEIO_TARGET_NAME}) set(ADDL_LIBS "") endif() -- cgit v1.2.3