CMakeLists.txt 3.31 KB
Newer Older
1
cmake_minimum_required(VERSION 2.8)
isucan's avatar
isucan committed
2
project(fcl CXX C)
sachinc's avatar
sachinc committed
3

mmoll's avatar
mmoll committed
4
5
6
7
8
# set the default build type
if (NOT CMAKE_BUILD_TYPE)
   set(CMAKE_BUILD_TYPE Release)
endif()

9
10
11
12
13
14
# This shouldn't be necessary, but there has been trouble
# with MSVC being set off, but MSVCXX ON.
if(MSVC OR MSVC90 OR MSVC10)
    set(MSVC ON)
endif (MSVC OR MSVC90 OR MSVC10)

15
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
isucan's avatar
isucan committed
16
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
17
include(CompilerSettings)
18
include(FCLVersion)
isucan's avatar
isucan committed
19

20
21
22
23
24
if(MSVC OR IS_ICPC)
  option(FCL_STATIC_LIBRARY "Whether the FCL library should be static rather than shared" ON)
else()
  option(FCL_STATIC_LIBRARY "Whether the FCL library should be static rather than shared" OFF)
endif()
25

26
# Whether to enable SSE
27
option(FCL_USE_SSE "Whether FCL should SSE instructions" OFF)
isucan's avatar
isucan committed
28
set(FCL_HAVE_SSE 0)
29
30
if(FCL_USE_SSE)
  if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
isucan's avatar
isucan committed
31
    set(FCL_HAVE_SSE 0) #always disable, for now
32
33
34
    add_definitions(-march=native)
  endif()
  # TODO: do something similar for other compilers
isucan's avatar
isucan committed
35
endif()
sachinc's avatar
sachinc committed
36

37
# Find Octomap (optional)
38
find_package(PkgConfig QUIET)
jpan's avatar
jpan committed
39
set(FCL_HAVE_OCTOMAP 0)
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
if(PKG_CONFIG_FOUND)
    pkg_check_modules(OCTOMAP QUIET octomap)
endif()
if(NOT OCTOMAP_FOUND)
    # if pkfconfig is not installed, then fall back on more fragile detection
    # of octomap
    find_path(OCTOMAP_INCLUDE_DIRS octomap.h
        PATH_SUFFIXES octomap)
    find_path(OCTOMAP_LIBRARY_DIRS
        ${CMAKE_SHARED_LIBRARY_PREFIX}octomap${CMAKE_SHARED_LIBRARY_SUFFIX})
    if(OCTOMAP_INCLUDE_DIRS AND OCTOMAP_LIBRARY_DIRS)
        set(OCTOMAP_LIBRARIES "octomap;octomath")
    endif()
endif()
if (OCTOMAP_INCLUDE_DIRS AND OCTOMAP_LIBRARY_DIRS)
55
56
  include_directories(${OCTOMAP_INCLUDE_DIRS})
  link_directories(${OCTOMAP_LIBRARY_DIRS})
jpan's avatar
jpan committed
57
  set(FCL_HAVE_OCTOMAP 1)
58
  message(STATUS "FCL uses Octomap")
jpan's avatar
jpan committed
59
else()
60
61
62
  message(STATUS "FCL does not use Octomap")
endif()

63
64
65
find_package(Boost COMPONENTS thread date_time filesystem system unit_test_framework REQUIRED)
include_directories(${Boost_INCLUDE_DIR})

66
if(MSVC)
67
    add_definitions(-DBOOST_ALL_NO_LIB)
jpan's avatar
jpan committed
68
endif()
69
add_definitions(-DBOOST_TEST_DYN_LINK)
jpan's avatar
jpan committed
70

71
72
# FCL's own include dir should be at the front of the include path
include_directories(BEFORE "include")
isucan's avatar
isucan committed
73

74
if(PKG_CONFIG_FOUND)
75
76
77
78
79
  pkg_check_modules(CCD ccd)
  # check to see if the pkg is installed under the libccd name
  if(NOT CCD_FOUND)
    pkg_check_modules(CCD libccd)
  endif()
80
endif()
81

82
83
84
85
86
87
88
89
90
91
92
93
94
if(NOT CCD_FOUND)
    # if pkfconfig is not installed, then fall back on more fragile detection
    # of ccd
    find_path(CCD_INCLUDE_DIRS ccd.h
        PATH_SUFFIXES ccd)
    find_path(CCD_LIBRARY_DIRS
        ${CMAKE_SHARED_LIBRARY_PREFIX}ccd${CMAKE_SHARED_LIBRARY_SUFFIX})
    if(CCD_INCLUDE_DIRS AND CCD_LIBRARY_DIRS)
        set(CCD_LIBRARIES "ccd")
    else()
        message(FATAL_ERROR "Libccd is required by FCL")
    endif()
endif()
isucan's avatar
isucan committed
95
96
97
include_directories(${CCD_INCLUDE_DIRS})
link_directories(${CCD_LIBRARY_DIRS})

isucan's avatar
isucan committed
98
99
add_subdirectory(include/fcl)
add_subdirectory(src)
isucan's avatar
isucan committed
100
101
102
103

set(pkg_conf_file "${CMAKE_CURRENT_SOURCE_DIR}/fcl.pc")
configure_file("${pkg_conf_file}.in" "${pkg_conf_file}" @ONLY)

isucan's avatar
isucan committed
104
install(DIRECTORY include/ DESTINATION include
105
  FILES_MATCHING PATTERN "*.h" PATTERN "*.hxx"
isucan's avatar
isucan committed
106
107
108
  PATTERN ".DS_Store" EXCLUDE
)

isucan's avatar
isucan committed
109
install(FILES "${pkg_conf_file}" DESTINATION lib/pkgconfig/ COMPONENT pkgconfig)
jpan's avatar
jpan committed
110
111
112


enable_testing()
113
add_subdirectory(test)