Skip to content

Commit

Permalink
patched cmake from issue_136_paired_reads branch
Browse files Browse the repository at this point in the history
  • Loading branch information
biocodz committed Sep 4, 2019
1 parent 17ee60b commit 7e31c75
Show file tree
Hide file tree
Showing 4 changed files with 148 additions and 52 deletions.
2 changes: 2 additions & 0 deletions 3rdparty/alp/CMakeLists.txt
Expand Up @@ -8,6 +8,8 @@
cmake_minimum_required(VERSION 3.13)
project(alp CXX)

set(CMAKE_CXX_STANDARD 11)

set(ALP_HDRS
njn_approx.hpp
njn_doubletype.hpp
Expand Down
26 changes: 25 additions & 1 deletion CMakeLists.txt
Expand Up @@ -67,6 +67,12 @@ set(DIRENTWIN_URL https://github.com/tronkko/dirent CACHE STRING "Dirent-Windows
set(DIRENTWIN_HOME ${EXTERNAL_DEPS}/dirent CACHE PATH "Dirent-Windows interface installation directory")
set(CONCURRENTQUEUE_URL https://github.com/cameron314/concurrentqueue CACHE STRING "Concurrent queue library GitHub URL")
set(CONCURRENTQUEUE_HOME ${EXTERNAL_DEPS}/concurrentqueue CACHE PATH "Concurrent queue library installation directory")
#set(gflags_DIR ${EXTERNAL_DEPS}/gflags/dist/lib/cmake/gflags CACHE PATH "GFlags library configuration")

option(ROCKSDB_STATIC "Use static RocksDB library" ON)
option(ZLIB_STATIC "Use static ZLib library" ON)

option(PORTABLE "Build portable/statically linked executable" ON)

option(WITH_MD_LIBRARY "build with MD" ON)
if(WIN32 AND MSVC)
Expand All @@ -84,11 +90,29 @@ if(WIN32 AND MSVC)
CMAKE_C_FLAGS_RELWITHDEBINFO)
if(${flag_var} MATCHES "/MD")
string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
endif(${flag_var} MATCHES "/MD")
endif()
endforeach(flag_var)
endif()
endif()

option(WITH_RUNTIME_DEBUG "Build with MDd/MTd on Windows. Ignored on non-Windows" OFF)
if(WIN32 AND MSVC)
if(NOT WITH_RUNTIME_DEBUG)
foreach(flag_var
CMAKE_CXX_FLAGS_DEBUG
CMAKE_C_FLAGS_DEBUG
)
if(${flag_var} MATCHES "/MDd")
string(REGEX REPLACE "/MDd" "/MD" ${flag_var} "${${flag_var}}")
elseif(${flag_var} MATCHES "/MTd")
string(REGEX REPLACE "/MTd" "/MT" ${flag_var} "${${flag_var}}")
endif()
endforeach(flag_var)
endif()
endif()

message("CMAKE_CXX_FLAGS_DEBUG: ${CMAKE_CXX_FLAGS_DEBUG}")
message("CMAKE_C_FLAGS_DEBUG: ${CMAKE_C_FLAGS_DEBUG}")

option(WITH_TESTS "Select whether to build tests" OFF)

Expand Down
123 changes: 95 additions & 28 deletions src/sortmerna/CMakeLists.txt
Expand Up @@ -12,21 +12,61 @@ set(CMAKE_CXX_STANDARD 14)

find_package(Threads REQUIRED)

find_package(RocksDB
REQUIRED
find_package(RocksDB CONFIG REQUIRED
PATHS ${ROCKSDB_HOME}
NO_DEFAULT_PATH
)

# fix for RocksDBTargets.cmake, which makes both static and shared libraries always dependent on libz.so
if(RocksDB_FOUND)
message("RocksDB package OK")
else()
message("RocksDB package NOK")
endif()

#
get_target_property(lib RocksDB::rocksdb-shared LOCATION)
message("RocksDB::rocksdb-shared LOCATION: ${lib}")
get_target_property(lib RocksDB::rocksdb-shared LOCATION_DEBUG)
message("RocksDB::rocksdb-shared LOCATION_DEBUG: ${lib}")
get_target_property(lib RocksDB::rocksdb-shared IMPORTED_LOCATION_DEBUG)
message("RocksDB::rocksdb-shared LOCATION_DEBUG: ${lib}")
get_target_property(cfg RocksDB::rocksdb-shared IMPORTED_CONFIGURATIONS)
message("RocksDB::rocksdb-shared IMPORTED_CONFIGURATIONS: ${cfg}")
get_target_property(lib RocksDB::rocksdb-shared IMPORTED_IMPLIB)
message("RocksDB::rocksdb-shared IMPORTED_IMPLIB: ${lib}")

get_target_property(lib RocksDB::rocksdb LIBRARY_OUTPUT_NAME)
message("RocksDB::rocksdb LIBRARY_OUTPUT_NAME: ${lib}")

if(ROCKSDB_STATIC)
message("Using Static RocksDB lib")
set(ROCKSDB_LIB RocksDB::rocksdb)
else()
message("Using Shared RocksDB lib")
set(ROCKSDB_LIB RocksDB::rocksdb-shared)
#if(WIN32 AND MSVC)
# set_target_properties(RocksDB::rocksdb-shared PROPERTIES
# IMPORTED_IMPLIB "${ROCKSDB_HOME}/lib/rocksdb-shared.lib"
# )
#endif()
endif()

get_property(trans_deps TARGET ${ROCKSDB_LIB} PROPERTY INTERFACE_LINK_LIBRARIES)
message("${ROCKSDB_LIB} transitive link dependencies: ${trans_deps}")

# fix RocksDBTargets.cmake, which makes both static and shared libraries always dependent on libz.so
if(NOT WIN32)
if(ZLIB_LIBRARY_RELEASE)
# modify the dependent libraries of the RocksDB::rocksdb target
set_target_properties(RocksDB::rocksdb PROPERTIES
INTERFACE_LINK_LIBRARIES "${ZLIB_LIBRARY_RELEASE};-lpthread"
INTERFACE_LINK_LIBRARIES "${ZLIB_LIBRARY_RELEASE};Threads::Threads"
)
endif()
endif()

get_property(trans_deps TARGET RocksDB::rocksdb PROPERTY INTERFACE_LINK_LIBRARIES)
message("rocksdb transitive link dependencies AFTER modification: ${trans_deps}")

include(FindZLIB)
# prevent CONFIG search mode
find_package(ZLIB MODULE REQUIRED)
Expand All @@ -35,6 +75,26 @@ include(FindRapidJson)
# prevent CONFIG search mode
find_package(RapidJson MODULE REQUIRED)

# set additional compile flags
if(MSVC)
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi /nologo /EHsc /GS /Gd /GR /GF /fp:precise /Zc:wchar_t /Zc:forScope /errorReport:queue")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /FC /d2Zi+ /W4 /wd4127 /wd4800 /wd4996 /wd4351 /wd4100 /wd4204 /wd4324")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wextra -Wall -Xlinker -v") # -Xlinker -v / --verbose (linked libraries info) '-Wl,-Map,mapfile.txt' '-Wl,-v'
#set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -v -da -Q") # for segfault
# | | |_show which function is causing the crash.
# | |_dumps the RTL to a file after each stage
# |_show how the program was invoked
#set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -v -da -Q -O0") # for segfault
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing")
endif()

#set(MY_OPTS -g -Wall) # using quotes "-g -Wall" throws error
#target_compile_options(smr_objs PUBLIC ${MY_OPTS})
#target_compile_options(smr_objs PUBLIC "$<$<CONFIG:DEBUG>:${MY_OPTS}>")
#target_compile_options(smr_objs PUBLIC "$<$<CONFIG:RELEASE>:${MY_OPTS}>")
#set_target_properties(smr_objs PROPERTIES COMPILE_OPTIONS ${MY_OPTS})

set(SMR_SRCS
alignment.cpp
bitvector.cpp
Expand Down Expand Up @@ -63,26 +123,36 @@ set(SMR_SRCS
add_library(smr_objs OBJECT ${SMR_SRCS})
target_link_libraries(smr_objs
PUBLIC
ZLIB::ZLIB
RocksDB::rocksdb
RapidJSON::RapidJSON
alp
${ROCKSDB_LIB}
RapidJSON::RapidJSON
ZLIB::ZLIB
)
if(WIN32)
target_include_directories(smr_objs
PRIVATE
PUBLIC
${CMAKE_SOURCE_DIR}/include
$<TARGET_PROPERTY:winapi,INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:cmph,INCLUDE_DIRECTORIES>
${DIRENTWIN_HOME}/include
${EXTERNAL_DEPS}/concurrentqueue
)
else()
target_include_directories(smr_objs PRIVATE
${CMAKE_SOURCE_DIR}/include
${EXTERNAL_DEPS}/concurrentqueue
target_include_directories(smr_objs
PUBLIC
${CMAKE_SOURCE_DIR}/include
$<TARGET_PROPERTY:cmph,INCLUDE_DIRECTORIES>
${EXTERNAL_DEPS}/concurrentqueue
)
endif()

get_property(trans_deps TARGET smr_objs PROPERTY INTERFACE_LINK_LIBRARIES)
message("SMR Objects transitive link dependencies: ${trans_deps}")

get_target_property(COMPILE_OPT smr_objs COMPILE_OPTIONS)
get_target_property(COMPILE_FLG smr_objs COMPILE_FLAGS)
message("SMR Objects COMPILE_OPT: ${COMPILE_OPT} COMPILE_FLG: ${COMPILE_FLG}")

# SMR
add_executable(sortmerna main.cpp)
if(WIN32)
Expand All @@ -97,36 +167,33 @@ if(WIN32)
smr_objs
winapi
alp
$<TARGET_OBJECTS:cmph>
ZLIB::ZLIB
RocksDB::rocksdb
${ROCKSDB_LIB}
RapidJSON::RapidJSON
Rpcrt4.lib
Cabinet.lib # rocksdb:XPRESS::CreateCompressor,Compress,CloseCompressor,CreateDecompressor,Decompress,CloseDecompressor
)
add_dependencies(sortmerna
winapi
alp
build_version
smr_objs
)
else()
target_include_directories(sortmerna
PRIVATE
${EXTERNAL_DEPS}/concurrentqueue
${CMAKE_SOURCE_DIR}/include
)
#get_property(rocksdb_trans_deps TARGET RocksDB::rocksdb PROPERTY INTERFACE_LINK_LIBRARIES)
#message("rocksdb_trans_deps: ${rocksdb_trans_deps}")
target_link_libraries(sortmerna
build_version
smr_objs
alp
ZLIB::ZLIB
RocksDB::rocksdb
RapidJSON::RapidJSON
${CMAKE_THREAD_LIBS_INIT}
)
add_dependencies(sortmerna
alp
smr_objs
build_version
alp # this is a transitive dependency of smr_objs but the linking fails without it. Why?
$<TARGET_OBJECTS:cmph>
${ROCKSDB_LIB}
${CMAKE_DL_LIBS}
# the following are all transitive dependencies of smr_objs i.e. no need to link:
# RapidJSON::RapidJSON ZLIB::ZLIB Threads::Threads (rockdb deps)
)

if(PORTABLE)
target_link_options(sortmerna PRIVATE -static)
endif(PORTABLE)
endif()
49 changes: 26 additions & 23 deletions tests/sortmerna/CMakeLists.txt
Expand Up @@ -13,29 +13,32 @@ message("tests PROJECT_BINARY_DIR = ${PROJECT_BINARY_DIR}")
message("tests CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
message("tests CMAKE_CFG_INTDIR = ${CMAKE_CFG_INTDIR}")

set(tests
kvdb
set(TEST_SRCS
kvdb.cpp
#main.cpp
)

include_directories("${CMAKE_SOURCE_DIR}/include" ${CMAKE_SOURCE_DIR}/src/winapi/include)
add_executable(tests ${TEST_SRCS})
#target_include_directories(tests
#PRIVATE
# ${CMAKE_SOURCE_DIR}/include
# #${CMAKE_SOURCE_DIR}/src/winapi/include
#)
if(WIN32)
target_link_libraries(tests
build_version
alp
smr_objs
winapi
$<TARGET_OBJECTS:cmph>
)
else()
target_link_libraries(tests
build_version
alp
smr_objs
$<TARGET_OBJECTS:cmph>
)
endif()

foreach(test ${tests})
add_executable("test_${test}" ${test}.cpp $<TARGET_OBJECTS:smr_objs>)
if(WIN32)
target_link_libraries( "test_${test}"
alp
z
rocksdb
Rpcrt4.lib
Cabinet.lib
)
else()
target_link_libraries( "test_${test}"
alp
z
rocksdb
)
endif()
endforeach()

add_dependencies(test_kvdb sortmerna)
#add_executable("test_${test}" ${test}.cpp $<TARGET_OBJECTS:smr_objs>)

0 comments on commit 7e31c75

Please sign in to comment.