[dali_2.3.21] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-physics / third-party / bullet3 / CMakeLists.txt
1 cmake_minimum_required(VERSION 3.10.2)
2
3 unset(PROJECT_IS_TOPLEVEL)
4
5 project(bullet3
6     VERSION 3.2.5
7     DESCRIPTION "C++ library portion of bullet"
8     LANGUAGES CXX
9 )
10
11 FILE (STRINGS "VERSION" BULLET_VERSION)
12
13 # PROJECT_IS_TOPLEVEL for older CMake versions
14 if(NOT DEFINED PROJECT_IS_TOPLEVEL)
15     set(PROJECT_IS_TOPLEVEL OFF)
16     if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
17         set(PROJECT_IS_TOPLEVEL ON)
18     endif()
19 endif()
20
21 # Build options
22 option(BULLET3_BUILD_SHARED "Build bullet3 as a shared library" ON)
23
24 set(prefix ${CMAKE_INSTALL_PREFIX})
25 option(ENABLE_PKG_CONFIGURE "Use pkgconfig" ON)
26
27 ADD_DEFINITIONS(-DB3_USE_CLEW)
28
29 if (WIN32)
30     ADD_DEFINITIONS( -D_CRT_SECURE_NO_WARNINGS )
31     ADD_DEFINITIONS( -D_CRT_SECURE_NO_DEPRECATE )
32     ADD_DEFINITIONS( -D_SCL_SECURE_NO_WARNINGS )
33 endif(WIN32)
34
35 # Bullet is broken into sub-"libraries"; we'll automate handling of these
36 set(BULLET_SUBMODULES
37     clew
38     Bullet3Collision
39     Bullet3Common
40     Bullet3Dynamics
41     Bullet3Geometry
42     Bullet3OpenCL
43     Bullet3Serialize
44     BulletCollision
45     BulletDynamics
46     BulletInverseDynamics
47     BulletSoftBody
48     LinearMath
49 )
50
51 set(repo_root_dir "${CMAKE_CURRENT_LIST_DIR}/../../../")
52 set(bullet_SOURCE_DIR "${repo_root_dir}/dali-physics/third-party/bullet3")
53
54 set(BULLET3_SOURCES
55     "${bullet_SOURCE_DIR}/src/btBulletCollisionCommon.h"
56     "${bullet_SOURCE_DIR}/src/btBulletDynamicsCommon.h"
57 )
58
59 foreach(SUB ${BULLET_SUBMODULES})
60     file(GLOB_RECURSE SUBMODULE_SOURCES
61         "${bullet_SOURCE_DIR}/src/${SUB}/*.h"
62         "${bullet_SOURCE_DIR}/src/${SUB}/*.hpp"
63         "${bullet_SOURCE_DIR}/src/${SUB}/*.cpp"
64         "${bullet_SOURCE_DIR}/src/${SUB}/*.c"
65     )
66     list(APPEND BULLET3_SOURCES ${SUBMODULE_SOURCES})
67 endforeach()
68
69 # CPack support
70 set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
71 set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
72 include(CPack)
73
74 # Build the main bullet3 library
75 set(BULLET3_LIBRARY_TYPE "STATIC")
76 if(BULLET3_BUILD_SHARED)
77     set(BULLET3_LIBRARY_TYPE "SHARED")
78 endif()
79 add_library(bullet3 ${BULLET3_LIBRARY_TYPE} ${BULLET3_SOURCES})
80 set_target_properties(bullet3 PROPERTIES
81     WINDOWS_EXPORT_ALL_SYMBOLS 1
82     VERSION ${PROJECT_VERSION}
83     SOVERSION ${PROJECT_VERSION}
84 )
85 target_include_directories(bullet3
86     SYSTEM INTERFACE
87         $<BUILD_INTERFACE:${bullet_SOURCE_DIR}/src>
88         $<INSTALL_INTERFACE:include/bullet>
89     PRIVATE
90         ${bullet_SOURCE_DIR}/src
91 )
92
93 # Suppress the warnings in the libbullet source code
94 if(MSVC)
95     target_compile_options(bullet3 PRIVATE /w)
96 else()
97     target_compile_options(bullet3 PRIVATE -w)
98 endif()
99
100 target_compile_options(bullet3 PRIVATE -fvisibility=default)
101
102 target_link_libraries(bullet3 ${COVERAGE})
103
104 if(ENABLE_PKG_CONFIGURE)
105     find_package(PkgConfig REQUIRED)
106
107     set( LIB_DIR $ENV{libdir} )
108     if( NOT LIB_DIR )
109         set( LIB_DIR ${CMAKE_INSTALL_LIBDIR} )
110     endif()
111     if( NOT LIB_DIR )
112         set( LIB_DIR ${prefix}/lib )
113     endif()
114     set(DEV_INCLUDE_PATH ${prefix}/include/bullet)
115
116     set(bullet_pkg_cfg_file bullet3.pc)
117     configure_file(${CMAKE_CURRENT_LIST_DIR}/${bullet_pkg_cfg_file}.cmake ${bullet_pkg_cfg_file} @ONLY)
118
119     # Installation
120     install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${bullet_pkg_cfg_file}
121         DESTINATION ${LIB_DIR}/pkgconfig
122     )
123 endif(ENABLE_PKG_CONFIGURE)
124
125 install(
126     TARGETS bullet3
127     DESTINATION ${LIB_DIR}
128     EXPORT bullet3-targets
129 )
130
131 if(INSTALL_CMAKE_MODULES)
132   install(
133       EXPORT bullet3-targets
134       NAMESPACE bullet3::
135       FILE bullet3-targets.cmake
136       DESTINATION share/bullet3
137   )
138 endif()
139
140 if(BULLET3_BUILD_SHARED AND MSVC)
141     install(FILES $<TARGET_PDB_FILE:bullet3> DESTINATION lib)
142 endif()
143
144 install(FILES
145     "${bullet_SOURCE_DIR}/src/btBulletCollisionCommon.h"
146     "${bullet_SOURCE_DIR}/src/btBulletDynamicsCommon.h"
147     DESTINATION "include/bullet"
148 )
149 foreach(SUB ${BULLET_SUBMODULES})
150     install(
151         DIRECTORY "${bullet_SOURCE_DIR}/src/${SUB}"
152         DESTINATION "include/bullet"
153         FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp"
154     )
155 endforeach()
156
157 if(INSTALL_CMAKE_MODULES)
158   file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/bullet3-config.cmake "
159     include(CMakeFindDependencyMacro)
160     include(\${CMAKE_CURRENT_LIST_DIR}/bullet3-targets.cmake)
161   ")
162   install(FILES ${CMAKE_CURRENT_BINARY_DIR}/bullet3-config.cmake DESTINATION share/bullet3)
163 endif()