diff --git a/CMakeLists.txt b/CMakeLists.txt index 09eafb5..a39f90f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,8 @@ project(seqwish) # We build using c++14 set(CMAKE_CXX_STANDARD 14) +include(GNUInstallDirs) + set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) @@ -26,6 +28,8 @@ if(NOT DEFINED EXTRA_FLAGS) "Extra compilation flags for C and CXX." FORCE) endif() +set(SEQWISH_LINK_SHARED_LIBRARY OFF CACHE BOOL "Do not link against the libseqwish shared library") + if (${CMAKE_BUILD_TYPE} MATCHES Release) set(EXTRA_FLAGS "-Ofast ${EXTRA_FLAGS}") set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG") # reset CXX_FLAGS to replace -O3 with -Ofast @@ -82,7 +86,7 @@ include(${CMAKE_ROOT}/Modules/ExternalProject.cmake) # sdsl-lite (full build using its cmake config) ExternalProject_Add(sdsl-lite SOURCE_DIR "${CMAKE_SOURCE_DIR}/deps/sdsl-lite" - CMAKE_ARGS "${CMAKE_ARGS};-DCMAKE_INSTALL_PREFIX=" + CMAKE_ARGS "${CMAKE_ARGS};-DCMAKE_CXX_FLAGS=-fPIC;-DCMAKE_C_FLAGS=-fPIC;-DCMAKE_INSTALL_PREFIX=" UPDATE_COMMAND "" INSTALL_COMMAND "") ExternalProject_Get_property(sdsl-lite INSTALL_DIR) @@ -203,27 +207,125 @@ set(mio_INCLUDE "${SOURCE_DIR}/include") #set(CMAKE_BUILD_TYPE Debug) set(CMAKE_BUILD_TYPE Release) +# set up our target libraries and specify its dependencies and includes +add_library( libseqwish_static + ${CMAKE_SOURCE_DIR}/src/utils.cpp + ${CMAKE_SOURCE_DIR}/src/tempfile.cpp + ${CMAKE_SOURCE_DIR}/src/main.cpp + ${CMAKE_SOURCE_DIR}/src/seqindex.cpp + ${CMAKE_SOURCE_DIR}/src/paf.cpp + ${CMAKE_SOURCE_DIR}/src/sxs.cpp + ${CMAKE_SOURCE_DIR}/src/cigar.cpp + ${CMAKE_SOURCE_DIR}/src/alignments.cpp + ${CMAKE_SOURCE_DIR}/src/pos.cpp + ${CMAKE_SOURCE_DIR}/src/match.cpp + ${CMAKE_SOURCE_DIR}/src/transclosure.cpp + ${CMAKE_SOURCE_DIR}/src/links.cpp + ${CMAKE_SOURCE_DIR}/src/compact.cpp + ${CMAKE_SOURCE_DIR}/src/dna.cpp + ${CMAKE_SOURCE_DIR}/src/gfa.cpp + ${CMAKE_SOURCE_DIR}/src/vgp.cpp + ${CMAKE_SOURCE_DIR}/src/exists.cpp + ${CMAKE_SOURCE_DIR}/src/time.cpp + ${CMAKE_SOURCE_DIR}/src/mmap.cpp + ) +add_dependencies(libseqwish_static tayweeargs) +add_dependencies(libseqwish_static sdsl-lite) +add_dependencies(libseqwish_static gzipreader) +add_dependencies(libseqwish_static mmmulti) +add_dependencies(libseqwish_static iitii) +add_dependencies(libseqwish_static ips4o) +add_dependencies(libseqwish_static bbhash) +add_dependencies(libseqwish_static atomicbitvector) +add_dependencies(libseqwish_static atomicqueue) +add_dependencies(libseqwish_static ska) +add_dependencies(libseqwish_static paryfor) +add_dependencies(libseqwish_static mio) +target_include_directories(libseqwish_static PUBLIC + "${sdsl-lite_INCLUDE}" + "${sdsl-lite-divsufsort_INCLUDE}" + "${tayweeargs_INCLUDE}" + "${gzipreader_INCLUDE}" + "${ips4o_INCLUDE}" + "${mmmulti_INCLUDE}" + "${iitii_INCLUDE}" + "${bbhash_INCLUDE}" + "${atomicbitvector_INCLUDE}" + "${atomicqueue_INCLUDE}" + "${ska_INCLUDE}" + "${paryfor_INCLUDE}" + "${mio_INCLUDE}") +target_link_libraries(libseqwish_static + "${sdsl-lite_LIB}/libsdsl.a" + "${sdsl-lite-divsufsort_LIB}/libdivsufsort.a" + "${sdsl-lite-divsufsort_LIB}/libdivsufsort64.a" + "-latomic" + Threads::Threads + jemalloc + z) +set_target_properties(libseqwish_static PROPERTIES OUTPUT_NAME "seqwish") + +add_library( libseqwish SHARED + ${CMAKE_SOURCE_DIR}/src/utils.cpp + ${CMAKE_SOURCE_DIR}/src/tempfile.cpp + ${CMAKE_SOURCE_DIR}/src/main.cpp + ${CMAKE_SOURCE_DIR}/src/seqindex.cpp + ${CMAKE_SOURCE_DIR}/src/paf.cpp + ${CMAKE_SOURCE_DIR}/src/sxs.cpp + ${CMAKE_SOURCE_DIR}/src/cigar.cpp + ${CMAKE_SOURCE_DIR}/src/alignments.cpp + ${CMAKE_SOURCE_DIR}/src/pos.cpp + ${CMAKE_SOURCE_DIR}/src/match.cpp + ${CMAKE_SOURCE_DIR}/src/transclosure.cpp + ${CMAKE_SOURCE_DIR}/src/links.cpp + ${CMAKE_SOURCE_DIR}/src/compact.cpp + ${CMAKE_SOURCE_DIR}/src/dna.cpp + ${CMAKE_SOURCE_DIR}/src/gfa.cpp + ${CMAKE_SOURCE_DIR}/src/vgp.cpp + ${CMAKE_SOURCE_DIR}/src/exists.cpp + ${CMAKE_SOURCE_DIR}/src/time.cpp + ${CMAKE_SOURCE_DIR}/src/mmap.cpp + ${CMAKE_SOURCE_DIR}/src/version.cpp + ) +add_dependencies(libseqwish tayweeargs) +add_dependencies(libseqwish sdsl-lite) +add_dependencies(libseqwish gzipreader) +add_dependencies(libseqwish mmmulti) +add_dependencies(libseqwish iitii) +add_dependencies(libseqwish ips4o) +add_dependencies(libseqwish bbhash) +add_dependencies(libseqwish atomicbitvector) +add_dependencies(libseqwish atomicqueue) +add_dependencies(libseqwish ska) +add_dependencies(libseqwish paryfor) +add_dependencies(libseqwish mio) +target_include_directories(libseqwish PUBLIC + "${sdsl-lite_INCLUDE}" + "${sdsl-lite-divsufsort_INCLUDE}" + "${tayweeargs_INCLUDE}" + "${gzipreader_INCLUDE}" + "${ips4o_INCLUDE}" + "${mmmulti_INCLUDE}" + "${iitii_INCLUDE}" + "${bbhash_INCLUDE}" + "${atomicbitvector_INCLUDE}" + "${atomicqueue_INCLUDE}" + "${ska_INCLUDE}" + "${paryfor_INCLUDE}" + "${mio_INCLUDE}") +target_link_libraries(libseqwish + "${sdsl-lite_LIB}/libsdsl.a" + "${sdsl-lite-divsufsort_LIB}/libdivsufsort.a" + "${sdsl-lite-divsufsort_LIB}/libdivsufsort64.a" + "-latomic" + Threads::Threads + jemalloc + z) +set_target_properties(libseqwish PROPERTIES OUTPUT_NAME "seqwish") + # set up our target executable and specify its dependencies and includes add_executable(seqwish - ${CMAKE_SOURCE_DIR}/src/utils.cpp - ${CMAKE_SOURCE_DIR}/src/tempfile.cpp ${CMAKE_SOURCE_DIR}/src/main.cpp - ${CMAKE_SOURCE_DIR}/src/seqindex.cpp - ${CMAKE_SOURCE_DIR}/src/paf.cpp - ${CMAKE_SOURCE_DIR}/src/sxs.cpp - ${CMAKE_SOURCE_DIR}/src/cigar.cpp - ${CMAKE_SOURCE_DIR}/src/alignments.cpp - ${CMAKE_SOURCE_DIR}/src/pos.cpp - ${CMAKE_SOURCE_DIR}/src/match.cpp - ${CMAKE_SOURCE_DIR}/src/transclosure.cpp - ${CMAKE_SOURCE_DIR}/src/links.cpp - ${CMAKE_SOURCE_DIR}/src/compact.cpp - ${CMAKE_SOURCE_DIR}/src/dna.cpp - ${CMAKE_SOURCE_DIR}/src/gfa.cpp - ${CMAKE_SOURCE_DIR}/src/vgp.cpp - ${CMAKE_SOURCE_DIR}/src/exists.cpp - ${CMAKE_SOURCE_DIR}/src/time.cpp - ${CMAKE_SOURCE_DIR}/src/mmap.cpp ${CMAKE_SOURCE_DIR}/src/version.cpp ) add_dependencies(seqwish tayweeargs) @@ -252,6 +354,11 @@ target_include_directories(seqwish PUBLIC "${ska_INCLUDE}" "${paryfor_INCLUDE}" "${mio_INCLUDE}") +if( SEQWISH_LINK_SHARED_LIBRARY ) + target_link_libraries( seqwish libseqwish ) +else() + target_link_libraries( seqwish libseqwish_static ) +endif() target_link_libraries(seqwish "${sdsl-lite_LIB}/libsdsl.a" "${sdsl-lite-divsufsort_LIB}/libdivsufsort.a" @@ -269,4 +376,6 @@ endif() file(MAKE_DIRECTORY ${CMAKE_SOURCE_DIR}/include) execute_process(COMMAND bash ${CMAKE_SOURCE_DIR}/scripts/generate_git_version.sh ${CMAKE_SOURCE_DIR}/include) -install(TARGETS seqwish DESTINATION bin) +install(TARGETS seqwish DESTINATION "${CMAKE_INSTALL_BIDIR}") +install(TARGETS libseqwish LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") +install(TARGETS libseqwish_static ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")