diff --git a/cmake/FindLIBDEFLATE.cmake b/cmake/FindLIBDEFLATE.cmake new file mode 100644 index 00000000..5584ebc4 --- /dev/null +++ b/cmake/FindLIBDEFLATE.cmake @@ -0,0 +1,49 @@ +# SPDX-License-Identifier: GPL-3.0-or-later; (c) 2025 Andrew D Smith (author) +#[=======================================================================[.rst: +FindLIBDEFLATE +-------------- + +Find the native libdeflate includes and library. + +#]=======================================================================] + +# FindLIBDEFLATE.cmake +# Custom CMake module to find libdeflate + +# Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES +# ADS: this is taken from the FindBoost.cmake file +if(LIBDEFLATE_USE_STATIC_LIBS) + set(_libdeflate_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES + ${CMAKE_FIND_LIBRARY_SUFFIXES} + ) + if(WIN32) + list(INSERT CMAKE_FIND_LIBRARY_SUFFIXES 0 .lib .a) + else() + set(CMAKE_FIND_LIBRARY_SUFFIXES .a) + endif() +endif() + +find_path(LIBDEFLATE_INCLUDE_DIR NAMES libdeflate.h) +find_library(LIBDEFLATE_LIBRARY NAMES deflate libdeflate) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LIBDEFLATE + REQUIRED_VARS LIBDEFLATE_LIBRARY LIBDEFLATE_INCLUDE_DIR + VERSION_VAR LIBDEFLATE_VERSION +) + +if(LIBDEFLATE_FOUND AND NOT TARGET LIBDEFLATE::LIBDEFLATE) + add_library(LIBDEFLATE::LIBDEFLATE UNKNOWN IMPORTED) + set_target_properties(LIBDEFLATE::LIBDEFLATE PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${LIBDEFLATE_INCLUDE_DIR}" + IMPORTED_LOCATION "${LIBDEFLATE_LIBRARY}" + ) +endif() + +# Restore the original find library ordering +# ADS: this is take from the FindBoost.cmake file +if(LIBDEFLATE_USE_STATIC_LIBS) + set(CMAKE_FIND_LIBRARY_SUFFIXES + ${_libdeflate_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES} + ) +endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e6363ffa..fd909283 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -13,6 +13,10 @@ # You should have received a copy of the GNU General Public License along with # this program. If not, see . +# Packages +if(USE_LIBDEFLATE) + find_package(LIBDEFLATE REQUIRED) +endif() if(BUILD_NANOPORE) find_package(HTSLIB 1.20 REQUIRED) add_compile_definitions(BUILD_NANOPORE) @@ -20,13 +24,15 @@ else() find_package(HTSLIB REQUIRED) endif() find_package(Threads REQUIRED) +find_package(ZLIB REQUIRED) -if(NOT TARGET bamxx) - add_subdirectory(bamxx) -endif() +# Subdirs if(NOT TARGET smithlab_cpp) add_subdirectory(smithlab_cpp) endif() +if(NOT TARGET bamxx) + add_subdirectory(bamxx) +endif() add_subdirectory(common) add_subdirectory(radmeth) add_subdirectory(utils) @@ -46,4 +52,13 @@ target_link_libraries(dnmtools PUBLIC dnmtools_radmeth_objs dnmtools_mlml_objs dnmtools_amrfinder_objs + bamxx + HTSLIB::HTSLIB + ZLIB::ZLIB + Threads::Threads ) +if(USE_LIBDEFLATE) + target_link_libraries(dnmtools PUBLIC + LIBDEFLATE::LIBDEFLATE + ) +endif() diff --git a/src/amrfinder/CMakeLists.txt b/src/amrfinder/CMakeLists.txt index 30ae2170..d05bc3db 100644 --- a/src/amrfinder/CMakeLists.txt +++ b/src/amrfinder/CMakeLists.txt @@ -45,4 +45,5 @@ target_link_libraries(dnmtools_amrfinder_objs PUBLIC ${LIBRARY_OBJECTS} smithlab_cpp bamxx + Threads::Threads ) diff --git a/src/radmeth/CMakeLists.txt b/src/radmeth/CMakeLists.txt index 89d96ab3..61001ba8 100644 --- a/src/radmeth/CMakeLists.txt +++ b/src/radmeth/CMakeLists.txt @@ -45,4 +45,5 @@ target_link_libraries(dnmtools_radmeth_objs PUBLIC ${LIBRARY_OBJECTS} smithlab_cpp bamxx + Threads::Threads )