Skip to content

Commit

Permalink
refactor cmake project
Browse files Browse the repository at this point in the history
add support for building modular interfaces depending on an external
prebuilt libshogun
  • Loading branch information
vigsterkr committed Feb 11, 2017
1 parent c44e96e commit a21aedb
Show file tree
Hide file tree
Showing 46 changed files with 909 additions and 1,378 deletions.
599 changes: 26 additions & 573 deletions CMakeLists.txt

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions NEWS
Expand Up @@ -20,6 +20,11 @@
* Cleanup, efficiency updates, and API Changes:
- Port multi-threading to use OpenMP backend in Kernel [Viktor Gal]
- Fix false sharing in EuclideanDistance [Viktor Gal]
- Fix out of source build of the whole project [Viktor Gal]
- Add LIBSHOGUN cmake flag to turn off libshogun compilation [Viktor Gal]
- Export Shogun target with cmake to enable to build modular interfaces to a
pre-compiled libshogun on the system without requiring to compile
libshogun itself [Viktor Gal]

2016-11-04 Viktor Gal <viktor.gal@shogun-toolbox.org>

Expand Down
13 changes: 5 additions & 8 deletions cmake/CommonModularInterface.cmake
@@ -1,10 +1,7 @@
MACRO(GENERATE_MODULAR_TARGET MODULAR_NAME MODULAR_DIR MODULAR_LIBARIES)
if(SYSTEM_INCLUDES)
INCLUDE_DIRECTORIES(SYSTEM ${SYSTEM_INCLUDES})
endif()
INCLUDE_DIRECTORIES(${INCLUDES})

# transform defines to -D<definition> string
get_target_property(ShogunIncludes shogun::shogun INTERFACE_INCLUDE_DIRECTORIES)
INCLUDE_DIRECTORIES(${ShogunIncludes})

# set compiler SWIG generated cxx compiler flags
SET(CMAKE_CXX_FLAGS ${SWIG_CXX_COMPILER_FLAGS})
Expand Down Expand Up @@ -33,7 +30,7 @@ FOREACH(file ${MODULAR_FILES})
ENDFOREACH()

ADD_CUSTOM_TARGET(${MODULAR_NAME}_modular_src
DEPENDS shogun ${modular_files}
DEPENDS shogun::shogun ${modular_files}
COMMENT "copying SWIG files")

INCLUDE(${SWIG_USE_FILE})
Expand All @@ -43,7 +40,7 @@ IF(DEFINED TARGET_SWIGFLAGS)
ENDIF()
SET(SWIG_MODULE_${MODULAR_NAME}_modular_EXTRA_DEPS ${modular_files})
SWIG_ADD_MODULE(${MODULAR_NAME}_modular ${MODULAR_NAME} modshogun.i sg_print_functions.cpp)
SWIG_LINK_LIBRARIES(${MODULAR_NAME}_modular shogun ${MODULAR_LIBARIES})
SWIG_LINK_LIBRARIES(${MODULAR_NAME}_modular shogun::shogun ${MODULAR_LIBARIES})
SET_TARGET_PROPERTIES(${SWIG_MODULE_${MODULAR_NAME}_modular_REAL_NAME} PROPERTIES OUTPUT_NAME ${PREPEND_TARGET}modshogun)
ADD_DEPENDENCIES(${SWIG_MODULE_${MODULAR_NAME}_modular_REAL_NAME} ${MODULAR_NAME}_modular_src)

Expand All @@ -59,7 +56,7 @@ IF(DOXYGEN_FOUND)
OUTPUT modshogun
COMMAND ${DOXYGEN_EXECUTABLE}
ARGS modshogun.doxy
DEPENDS shogun
DEPENDS shogun::shogun
COMMENT "Generating doxygen doc"
)

Expand Down
12 changes: 6 additions & 6 deletions cmake/FindARPACK.cmake
@@ -1,17 +1,17 @@
SET(ARPACK_SEARCH_PATHS ${ARPACK_DIR})

FIND_LIBRARY(ARPACK_LIB NAMES arpack parpack PATHS ${ARPACK_SEARCH_PATHS})
FIND_LIBRARY(ARPACK_LIBRARIES NAMES arpack parpack PATHS ${ARPACK_SEARCH_PATHS})

SET(ARPACK_FOUND FALSE)
IF (ARPACK_LIB)
IF (ARPACK_LIBRARIES)
SET(ARPACK_FOUND TRUE)
MARK_AS_ADVANCED(ARPACK_LIB)
ENDIF (ARPACK_LIB)
MARK_AS_ADVANCED(ARPACK_LIBRARIES)
ENDIF (ARPACK_LIBRARIES)

IF (ARPACK_FOUND)
IF (NOT ARPACK_LIB_FIND_QUIETLY)
MESSAGE(STATUS "Found Arpack : ${ARPACK_LIB}")
GET_FILENAME_COMPONENT(ARPACK_PATH ${ARPACK_LIB} PATH CACHE)
MESSAGE(STATUS "Found Arpack : ${ARPACK_LIBRARIES}")
GET_FILENAME_COMPONENT(ARPACK_PATH ${ARPACK_LIBRARIES} PATH CACHE)
SET(ARPACK_INCLUDE_DIR ${ARPACK_PATH}/../include CACHE FILEPATH "ARPACK include directory.")
ENDIF (NOT ARPACK_LIB_FIND_QUIETLY)
ELSE(ARPACK_FOUND)
Expand Down
20 changes: 14 additions & 6 deletions cmake/FindCCache.cmake
Expand Up @@ -4,18 +4,26 @@ find_program(CCACHE
find_program(CCACHE_SWIG
NAMES ccache-swig)

if (CCACHE)
execute_process(COMMAND ${CCACHE} --version ERROR_QUIET OUTPUT_VARIABLE CCACHE_VERSION_OUT)
string(REGEX MATCH "ccache[ \t]+version[ \t]+([0-9.]+)" _ccache_version "${CCACHE_VERSION_OUT}")
SET(CCACHE_VERSION "${CMAKE_MATCH_1}")
endif()

# handle REQUIRED and QUIET options
include(FindPackageHandleStandardArgs)
if (CMAKE_VERSION LESS 2.8.3)
find_package_handle_standard_args(CCache DEFAULT_MSG CCACHE)
find_package_handle_standard_args(CCache DEFAULT_MSG CCACHE CCACHE_VERSION)
else ()
find_package_handle_standard_args(CCache REQUIRED_VARS CCACHE)
find_package_handle_standard_args(CCache REQUIRED_VARS CCACHE CCACHE_VERSION)
endif ()

if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
SET(CCACHE_FLAGS "-Qunused-arguments -fcolor-diagnostics")
#set env CCACHE_CPP2=yes
SET(ENV{CCACHE_CPP} YES)
if (CCACHE_FOUND)
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
SET(CCACHE_FLAGS "-Qunused-arguments -fcolor-diagnostics")
#set env CCACHE_CPP2=yes
SET(ENV{CCACHE_CPP} YES)
endif()
endif()

mark_as_advanced (
Expand Down
3 changes: 1 addition & 2 deletions cmake/FindCPLEX.cmake
Expand Up @@ -23,13 +23,12 @@ FIND_PATH(CPLEX_BIN_DIR

IF(CPLEX_FOUND)
SET(CPLEX_INCLUDE_DIRS ${CPLEX_INCLUDE_DIR})
SET(CPLEX_LIBRARIES ${CPLEX_LIBRARY})
IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
SET(CPLEX_LIBRARIES "${CPLEX_LIBRARIES};m;pthread")
ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
ENDIF(CPLEX_FOUND)

MARK_AS_ADVANCED(CPLEX_LIBRARY CPLEX_INCLUDE_DIR CPLEX_BIN_DIR)
MARK_AS_ADVANCED(CPLEX_LIBRARIES CPLEX_INCLUDE_DIR CPLEX_BIN_DIR)

IF(CPLEX_FOUND)
SET(LEMON_HAVE_LP TRUE)
Expand Down
144 changes: 0 additions & 144 deletions cmake/FindDoxygen.cmake

This file was deleted.

5 changes: 2 additions & 3 deletions cmake/FindGLPK.cmake
Expand Up @@ -47,12 +47,11 @@ INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLPK DEFAULT_MSG GLPK_LIBRARY GLPK_INCLUDE_DIR GLPK_PROPER_VERSION_FOUND)

IF(GLPK_FOUND)
SET(GLPK_INCLUDE_DIRS ${GLPK_INCLUDE_DIR})
SET(GLPK_LIBRARIES ${GLPK_LIBRARY})
SET(GLPK_BIN_DIR ${GLPK_ROOT_PATH}/bin)
SET(GLPK_LIBRARIES ${GLPK_LIBRARY})
ENDIF(GLPK_FOUND)

MARK_AS_ADVANCED(GLPK_LIBRARY GLPK_INCLUDE_DIR GLPK_BIN_DIR)
MARK_AS_ADVANCED(GLPK_LIBRARIES GLPK_INCLUDE_DIR GLPK_BIN_DIR)

IF(GLPK_FOUND)
SET(LEMON_HAVE_LP TRUE)
Expand Down
35 changes: 35 additions & 0 deletions cmake/FindJSON.cmake
@@ -0,0 +1,35 @@
macro(_json_get_version)
file(READ "${JSON_INCLUDE_DIR}/json_c_version.h" _json_version_header)

string(REGEX MATCH "define[ \t]+JSON_C_MAJOR_VERSION[ \t]+([0-9]+)" _json_major_version_match "${_json_version_header}")
set(JSON_C_MAJOR_VERSION "${CMAKE_MATCH_1}")
string(REGEX MATCH "define[ \t]+JSON_C_MINOR_VERSION[ \t]+([0-9]+)" _json_minor_version_match "${_json_version_header}")
set(JSON_C_MINOR_VERSION "${CMAKE_MATCH_1}")
string(REGEX MATCH "define[ \t]+JSON_C_MICRO_VERSION[ \t]+([0-9]+)" _json_micro_version_match "${_json_version_header}")
set(JSON_C_MICRO_VERSION "${CMAKE_MATCH_1}")

set(JSON_VERSION_STRING "${JSON_C_MAJOR_VERSION}.${JSON_C_MINOR_VERSION}.${JSON_C_MICRO_VERSION}")

endmacro(_json_get_version)

find_path(JSON_INCLUDE_DIR NAMES json_c_version.h json.h
PATHS
${CMAKE_INSTALL_PREFIX}/include
PATH_SUFFIXES json json-c
)
find_library(JSON_LIBRARY NAMES json-c json)

if(JSON_INCLUDE_DIR)
_json_get_version()
endif()

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(JSON
REQUIRED_VARS JSON_INCLUDE_DIR JSON_LIBRARY
VERSION_VAR JSON_VERSION_STRING)

if(JSON_FOUND)
set(JSON_LIBRARIES ${JSON_LIBRARY})
endif()

mark_as_advanced(JSON_INCLUDE_DIR JSON_LIBRARIES)

0 comments on commit a21aedb

Please sign in to comment.