Skip to content

Commit a3adb0d

Browse files
author
Jamie Snape
committed
Refactor cmake build into multiple files
1 parent e33c60a commit a3adb0d

File tree

3 files changed

+104
-54
lines changed

3 files changed

+104
-54
lines changed

CMakeLists.txt

+30-48
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,42 @@
1-
cmake_minimum_required(VERSION 2.8)
1+
cmake_minimum_required(VERSION 2.8.11)
2+
3+
if(POLICY CMP0042)
4+
cmake_policy(SET CMP0042 NEW)
5+
endif()
6+
27
project(libccd C)
38

4-
set(CCD_VERSION "2.0")
5-
set(CCD_SOVERSION "2")
6-
set(PKG_DESC "Library for collision detection between convex shapes")
9+
set(CCD_VERSION_MAJOR 2)
10+
set(CCD_VERSION_MINOR 0)
11+
set(CCD_VERSION ${CCD_VERSION_MAJOR}.${CCD_VERSION_MINOR})
12+
13+
set(CCD_SOVERSION 2)
714

815
# Include GNUInstallDirs to get canonical paths
916
include(GNUInstallDirs)
1017

11-
include_directories("src/")
12-
13-
# make sure only DOUBLE or SINGLE is set; default to SINGLE
14-
if (${CCD_SINGLE})
15-
set(CCD_DOUBLE false)
16-
else()
17-
set(CCD_SINGLE true)
18-
endif()
19-
20-
if (${CCD_DOUBLE})
21-
set(CCD_SINGLE false)
22-
endif()
18+
option(ENABLE_DOUBLE_PRECISION
19+
"Enable double precision computations instead of single precision" OFF)
2320

2421
# set the default build type
25-
if (NOT CMAKE_BUILD_TYPE)
26-
set(CMAKE_BUILD_TYPE Release)
27-
endif()
28-
29-
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/ccd/config.h.cmake.in" "${CMAKE_CURRENT_SOURCE_DIR}/src/ccd/config.h")
30-
31-
if(NOT WIN32)
32-
find_library(MATH m)
33-
else()
34-
set(MATH "")
22+
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
23+
set(CMAKE_BUILD_TYPE Release CACHE STRING
24+
"Choose the type of build; options are Debug Release RelWithDebInfo MinSizeRel"
25+
FORCE)
26+
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY
27+
STRINGS
28+
Debug
29+
Release
30+
RelWithDebInfo
31+
MinSizeRel)
3532
endif()
3633

37-
set(SOURCE_FILES
38-
src/ccd.c
39-
src/mpr.c
40-
src/polytope.c
41-
src/support.c
42-
src/vec3.c)
43-
44-
add_library(ccd SHARED ${SOURCE_FILES})
45-
set_target_properties(ccd PROPERTIES VERSION ${CCD_VERSION} SOVERSION ${CCD_SOVERSION})
46-
47-
target_link_libraries(ccd ${MATH})
48-
49-
add_library(ccd_static STATIC ${SOURCE_FILES})
50-
set_target_properties(ccd_static PROPERTIES OUTPUT_NAME ccd)
51-
target_link_libraries(ccd_static ${MATH})
34+
add_subdirectory(src)
5235

53-
set(pkg_conf_file "${CMAKE_CURRENT_SOURCE_DIR}/ccd.pc")
54-
configure_file("${pkg_conf_file}.in" "${pkg_conf_file}" @ONLY)
36+
set(CCD_PKGCONFIG_DESCRIPTION
37+
"Library for collision detection between convex shapes")
38+
configure_file(ccd.pc.in ccd.pc @ONLY)
39+
install(FILES "${CMAKE_BINARY_DIR}/ccd.pc"
40+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
5541

56-
install(TARGETS ccd ccd_static ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
57-
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
58-
install(DIRECTORY src/ccd DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h")
59-
install(FILES "${pkg_conf_file}" DESTINATION
60-
${CMAKE_INSTALL_LIBDIR}/pkgconfig COMPONENT pkgconfig)
42+
install(FILES BSD-LICENSE DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/doc/ccd")

ccd.pc.in

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
# This file was generated by CMake for @PROJECT_NAME@
1+
# Generated by CMake @CMAKE_VERSION@ for ccd
2+
23
prefix=@CMAKE_INSTALL_PREFIX@
34
exec_prefix=${prefix}
4-
libdir=@CMAKE_INSTALL_FULL_LIBDIR@
5-
includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
5+
libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
6+
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
67

78
Name: @PROJECT_NAME@
8-
Description: @PKG_DESC@
9+
Description: @CCD_PKGCONFIG_DESCRIPTION@
910
Version: @CCD_VERSION@
10-
Requires: @PKG_EXTERNAL_DEPS@
11-
Libs: -L${libdir} -lccd
11+
Requires: @CCD_PKGCONFIG_REQUIRES@
12+
Libs: -L${libdir} -lccd @CCD_PKGCONFIG_EXTRA_LIBS@
1213
Cflags: -I${includedir}

src/CMakeLists.txt

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
if(DEFINED CCD_SINGLE OR DEFINED CCD_DOUBLE)
2+
# make sure only DOUBLE or SINGLE is set; default to SINGLE
3+
if(CCD_SINGLE)
4+
set(CCD_DOUBLE OFF)
5+
else()
6+
set(CCD_SINGLE ON)
7+
endif()
8+
if(CCD_DOUBLE)
9+
set(CCD_SINGLE OFF)
10+
endif()
11+
elseif(ENABLE_DOUBLE_PRECISION)
12+
set(CCD_DOUBLE ON)
13+
set(CCD_SINGLE OFF)
14+
else()
15+
set(CCD_DOUBLE OFF)
16+
set(CCD_SINGLE ON)
17+
endif()
18+
19+
configure_file(ccd/config.h.cmake.in ccd/config.h)
20+
21+
set(CCD_INCLUDES
22+
ccd/ccd.h
23+
ccd/compiler.h
24+
ccd/quat.h
25+
ccd/vec3.h
26+
"${CMAKE_CURRENT_BINARY_DIR}/ccd/config.h")
27+
28+
set(CCD_SOURCES
29+
alloc.h
30+
ccd.c
31+
dbg.h
32+
list.h
33+
mpr.c
34+
polytope.c
35+
polytope.h
36+
simplex.h
37+
support.c
38+
support.h
39+
vec3.c)
40+
41+
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
42+
43+
add_library(ccd SHARED ${CCD_INCLUDES} ${CCD_SOURCES})
44+
set_target_properties(ccd PROPERTIES
45+
PUBLIC_HEADER "${CCD_INCLUDES}"
46+
SOVERSION ${CCD_SOVERSION}
47+
VERSION ${CCD_VERSION})
48+
49+
add_library(ccd_static STATIC ${CCD_INCLUDES} ${CCD_SOURCES})
50+
set_target_properties(ccd_static PROPERTIES
51+
OUTPUT_NAME ccd
52+
VERSION ${CCD_VERSION})
53+
54+
if(NOT WIN32)
55+
find_library(LIBM_LIBRARY NAMES m)
56+
if(NOT LIBM_LIBRARY)
57+
message(FATAL_ERROR "Could NOT find required library LibM")
58+
endif()
59+
target_link_libraries(ccd "${LIBM_LIBRARY}")
60+
target_link_libraries(ccd_static "${LIBM_LIBRARY}")
61+
endif()
62+
63+
install(TARGETS ccd ccd_static
64+
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
65+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
66+
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ccd"
67+
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")

0 commit comments

Comments
 (0)