CMakeLists.txt 3.84 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()

panjia1983's avatar
panjia1983 committed
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# Find FLANN (optional)
find_package(flann QUIET)
if (FLANN_FOUND)
  set(FCL_HAVE_FLANN 1)
  include_directories(${FLANN_INCLUDE_DIRS})
  link_directories(${FLANN_LIBRARY_DIRS})
  message(STATUS "FCL uses Flann")
else()
  message(STATUS "FCL does not use Flann")
endif()


find_package(tinyxml QUIET)
if (TINYXML_FOUND)
  set(FCL_HAVE_TINYXML 1)
  include_directories(${TINYXML_INCLUDE_DIRS})
  link_directories(${TINYXML_LIBRARY_DIRS})
  message(STATUS "FCL uses tinyxml")
else()
  message(STATUS "FCL does not use tinyxml")
endif()


86
87
88
find_package(Boost COMPONENTS thread date_time filesystem system unit_test_framework REQUIRED)
include_directories(${Boost_INCLUDE_DIR})

89
if(MSVC)
90
    add_definitions(-DBOOST_ALL_NO_LIB)
jpan's avatar
jpan committed
91
endif()
92
add_definitions(-DBOOST_TEST_DYN_LINK)
jpan's avatar
jpan committed
93

94
95
# FCL's own include dir should be at the front of the include path
include_directories(BEFORE "include")
isucan's avatar
isucan committed
96

97
if(PKG_CONFIG_FOUND)
98
99
100
101
102
  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()
103
endif()
104

105
106
107
108
109
110
111
112
113
114
115
116
117
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
118
119
120
include_directories(${CCD_INCLUDE_DIRS})
link_directories(${CCD_LIBRARY_DIRS})

isucan's avatar
isucan committed
121
122
add_subdirectory(include/fcl)
add_subdirectory(src)
isucan's avatar
isucan committed
123
124
125
126

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
127
install(DIRECTORY include/ DESTINATION include
128
  FILES_MATCHING PATTERN "*.h" PATTERN "*.hxx"
isucan's avatar
isucan committed
129
130
131
  PATTERN ".DS_Store" EXCLUDE
)

isucan's avatar
isucan committed
132
install(FILES "${pkg_conf_file}" DESTINATION lib/pkgconfig/ COMPONENT pkgconfig)
jpan's avatar
jpan committed
133
134
135


enable_testing()
136
add_subdirectory(test)