Raw File
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
include(CheckCXXCompilerFlag)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
find_program(CCACHE_PROGRAM ccache)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")

if(CCACHE_PROGRAM)
  message(STATUS "Using compiler cache")
  set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
  set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CCACHE_PROGRAM}")
endif()
project(KaHIP C CXX)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

set(CMAKE_POSITION_INDEPENDENT_CODE OFF)

# if no build mode is specified build in release mode
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
  set(CMAKE_BUILD_TYPE "Release")
endif()

add_definitions()

# tweak compiler flags
#CHECK_CXX_COMPILER_FLAG(-funroll-loops COMPILER_SUPPORTS_FUNROLL_LOOPS)
#if(COMPILER_SUPPORTS_FUNROLL_LOOPS)
#  add_definitions(-funroll-loops)
#endif()
#CHECK_CXX_COMPILER_FLAG(-fno-stack-limit COMPILER_SUPPORTS_FNOSTACKLIMITS)
#if(COMPILER_SUPPORTS_FNOSTACKLIMITS)
#  add_definitions(-fno-stack-limit)
#endif()
CHECK_CXX_COMPILER_FLAG(-Wall COMPILER_SUPPORTS_WALL)
if(COMPILER_SUPPORTS_WALL)
  add_definitions(-Wall)
endif()
CHECK_CXX_COMPILER_FLAG(-Wextra COMPILER_SUPPORTS_WEXTRA)
if(COMPILER_SUPPORTS_WEXTRA)
  add_definitions(-Wextra)
endif()
CHECK_CXX_COMPILER_FLAG(-pedantic COMPILER_SUPPORTS_PEDANTIC)
if(COMPILER_SUPPORTS_PEDANTIC)
  add_definitions(-pedantic)
endif()
#CHECK_CXX_COMPILER_FLAG(-march=native COMPILER_SUPPORTS_MARCH_NATIVE)
#if(COMPILER_SUPPORTS_MARCH_NATIVE)
#  add_definitions(-march=native)
#endif()
#CHECK_CXX_COMPILER_FLAG(-fpermissive COMPILER_SUPPORTS_FPERMISSIVE)
#if(COMPILER_SUPPORTS_FPERMISSIVE)
#  add_definitions(-fpermissive)
#endif()

# check dependencies
# find_package(MPI REQUIRED)
find_package(OpenMP)
if(OpenMP_CXX_FOUND)
  message(STATUS "OpenMP support detected")
  add_definitions(${OpenMP_CXX_FLAGS})
else()
  message(WARNING "OpenMP not available, activating workaround")
  add_library(OpenMP::OpenMP_CXX IMPORTED INTERFACE)
  set_property(TARGET OpenMP::OpenMP_CXX PROPERTY INTERFACE_COMPILE_OPTIONS "")
  include_directories(${CMAKE_CURRENT_SOURCE_DIR}/misc)
endif()

# 64 Bit option
option(64BITMODE "64 bit mode" OFF)
if(64BITMODE)
  add_definitions("-DMODE64BITEDGES")
  add_definitions("-DPOINTER64=1")
endif()


include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/app)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/extern/argtable3-3.0.3)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/extern/flat_hash_map)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/extern/KaHIP/lib)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/extern/KaHIP/lib/io)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/extern/KaHIP/lib/tools)


set(LIB_COMMON_SOURCE_FILES
	extern/KaHIP/lib/algorithms/strongly_connected_components.cpp
  extern/KaHIP/lib/io/graph_io.cpp
  extern/KaHIP/lib/tools/random_functions.cpp
  extern/KaHIP/lib/tools/macros_assertions.h
  extern/KaHIP/lib/tools/macros_common.h
  extern/KaHIP/lib/definitions.h
  extern/KaHIP/lib/data_structure/union_find.h
  app/query_generator.h
  lib/algorithms/topological_sort.cpp
  extern/argtable3-3.0.3/argtable3.c
  extern/flat_hash_map/flat_hash_map.hpp
  extern/flat_hash_map/bytell_hash_map.hpp
  extern/murmur_hash/MurmurHash3.cpp
  )
add_library(libcommon OBJECT ${LIB_COMMON_SOURCE_FILES})


set(LIBREACHABILITY_SOURCE_FILES OBJECT 
  lib/algorithms/bfs.cpp
  lib/reachability/oreach.cpp
  lib/reachability/matrix/full_reach.h
)
add_library(libreachability ${LIBREACHABILITY_SOURCE_FILES})



## reachability
add_executable(reachability app/reachability.cpp $<TARGET_OBJECTS:libcommon> $<TARGET_OBJECTS:libreachability> )
target_link_libraries(reachability ${OpenMP_CXX_LIBRARIES})
install(TARGETS reachability DESTINATION bin)

#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -fsanitize=address,undefined,leak -g -Wall")
# target_link_options(reachability PUBLIC -g)
# target_compile_options(reachability PUBLIC -g)
#target_compile_definitions(reachability PUBLIC NUM_SUPPORTS=16)
#target_compile_definitions(libreachability PUBLIC NUM_SUPPORTS=16)
#target_compile_definitions(reachability PUBLIC MAX_SUPPORT_CANDIDATE_FACTOR_LEVELS=75)
#target_compile_definitions(libreachability PUBLIC MAX_SUPPORT_CANDIDATE_FACTOR_LEVELS=75)
#add_compile_definitions(RDEBUG)
#add_compile_definitions(NUM_SUPPORTS=16)
#add_compile_definitions(MAX_SUPPORT_CANDIDATE_FACTOR_LEVELS=75)
# add_compile_definitions(CHECK_EDGE)
# add_compile_definitions(FULL_REACH)
back to top