2015-04-08 18:47:55 +00:00
# Minimum cmake version required
2020-05-11 10:38:59 +00:00
cmake_minimum_required ( VERSION 3.8 )
2015-04-08 18:47:55 +00:00
# Project configuration
2020-05-11 10:38:59 +00:00
project ( Testbed )
2015-04-08 18:47:55 +00:00
2020-05-12 20:50:46 +00:00
# Disable building extras of nanogui we won't need (pure C++ project)
set ( NANOGUI_BUILD_EXAMPLES OFF CACHE BOOL " " FORCE )
set ( NANOGUI_BUILD_PYTHON OFF CACHE BOOL " " FORCE )
set ( NANOGUI_INSTALL OFF CACHE BOOL " " FORCE )
# ---- Make sure to recursively clone all the git submodules for external libraries (nanogui) --- #
find_package ( Git QUIET )
2020-06-01 18:31:11 +00:00
if ( GIT_FOUND )
if ( EXISTS "${CMAKE_SOURCE_DIR}/.git" )
# Update submodules as needed
option ( CLONE_GIT_SUBMODULES "Check submodules during build" ON )
if ( CLONE_GIT_SUBMODULES )
message ( STATUS "Git Submodules update" )
message ( STATUS "Working directory ${CMAKE_CURRENT_SOURCE_DIR}" )
execute_process ( COMMAND ${ GIT_EXECUTABLE } submodule update --init --recursive
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R }
R E S U L T _ V A R I A B L E G I T _ S U B M O D _ R E S U L T )
if ( NOT GIT_SUBMOD_RESULT EQUAL "0" )
message ( FATAL_ERROR "git submodule update --init --recursive failed with ${GIT_SUBMOD_RESULT}, please checkout submodules" )
endif ( )
endif ( )
else ( )
message ( FATAL_ERROR "This is not a Git repository. In order to build the testbed application, you need to clone the ReactPhysics3D repository." )
2020-05-12 20:50:46 +00:00
endif ( )
2020-06-01 18:31:11 +00:00
else ( )
message ( FATAL_ERROR "Git has not been found on your system. This is necessary to build the testbed application because git submodules command is used to get the testbed dependencies (nanogui library). You need to fill in the GIT_EXECUTABLE CMake variable with the path to the Git executable on your system to continue." )
2020-05-12 20:50:46 +00:00
endif ( )
2020-06-01 18:31:11 +00:00
# Ask Nanogui not to build shared libraries
SET ( NANOGUI_BUILD_SHARED OFF CACHE BOOL "Build Nanogui with static libraries" FORCE )
2020-05-12 20:50:46 +00:00
# Add the configurations from nanogui
add_subdirectory ( extern/nanogui )
2015-04-08 18:47:55 +00:00
# Copy the shaders used for the demo into the build directory
2020-05-11 10:38:59 +00:00
file ( COPY "shaders/" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/shaders/" )
2015-04-08 18:47:55 +00:00
2015-04-15 21:11:27 +00:00
# Copy the meshes used for the demo into the build directory
2020-05-11 10:38:59 +00:00
file ( COPY "meshes/" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/meshes/" )
2015-04-15 21:11:27 +00:00
2016-02-22 17:44:29 +00:00
# OpenGLFramework source files
2020-05-11 10:38:59 +00:00
set ( OPENGLFRAMEWORK_SOURCES
2016-02-22 17:44:29 +00:00
o p e n g l - f r a m e w o r k / s r c / m a t h s / C o l o r . h
o p e n g l - f r a m e w o r k / s r c / m a t h s / M a t r i x 3 . h
o p e n g l - f r a m e w o r k / s r c / m a t h s / M a t r i x 4 . h
o p e n g l - f r a m e w o r k / s r c / m a t h s / V e c t o r 2 . h
o p e n g l - f r a m e w o r k / s r c / m a t h s / V e c t o r 3 . h
o p e n g l - f r a m e w o r k / s r c / m a t h s / V e c t o r 4 . h
o p e n g l - f r a m e w o r k / s r c / C a m e r a . c p p
o p e n g l - f r a m e w o r k / s r c / C a m e r a . h
o p e n g l - f r a m e w o r k / s r c / d e f i n i t i o n s . h
o p e n g l - f r a m e w o r k / s r c / F r a m e B u f f e r O b j e c t . c p p
o p e n g l - f r a m e w o r k / s r c / F r a m e B u f f e r O b j e c t . h
o p e n g l - f r a m e w o r k / s r c / L i g h t . h
o p e n g l - f r a m e w o r k / s r c / L i g h t . c p p
o p e n g l - f r a m e w o r k / s r c / M e s h . h
o p e n g l - f r a m e w o r k / s r c / M e s h . c p p
o p e n g l - f r a m e w o r k / s r c / M e s h R e a d e r W r i t e r . h
o p e n g l - f r a m e w o r k / s r c / M e s h R e a d e r W r i t e r . c p p
o p e n g l - f r a m e w o r k / s r c / O b j e c t 3 D . h
o p e n g l - f r a m e w o r k / s r c / O b j e c t 3 D . c p p
o p e n g l - f r a m e w o r k / s r c / o p e n g l f r a m e w o r k . h
o p e n g l - f r a m e w o r k / s r c / S h a d e r . h
o p e n g l - f r a m e w o r k / s r c / S h a d e r . c p p
o p e n g l - f r a m e w o r k / s r c / T e x t u r e 2 D . h
o p e n g l - f r a m e w o r k / s r c / T e x t u r e 2 D . c p p
o p e n g l - f r a m e w o r k / s r c / T e x t u r e R e a d e r W r i t e r . h
o p e n g l - f r a m e w o r k / s r c / T e x t u r e R e a d e r W r i t e r . c p p
o p e n g l - f r a m e w o r k / s r c / V e r t e x B u f f e r O b j e c t . h
o p e n g l - f r a m e w o r k / s r c / V e r t e x B u f f e r O b j e c t . c p p
o p e n g l - f r a m e w o r k / s r c / V e r t e x A r r a y O b j e c t . h
o p e n g l - f r a m e w o r k / s r c / V e r t e x A r r a y O b j e c t . c p p
)
2015-04-08 18:47:55 +00:00
2015-04-15 21:11:27 +00:00
# Testbed source files
2020-05-11 10:38:59 +00:00
set ( TESTBED_SOURCES
2015-04-15 21:11:27 +00:00
s r c / M a i n . c p p
s r c / T e s t b e d A p p l i c a t i o n . h
s r c / T e s t b e d A p p l i c a t i o n . c p p
s r c / G u i . h
s r c / G u i . c p p
s r c / S c e n e . h
s r c / S c e n e . c p p
2015-07-21 23:18:32 +00:00
s r c / S c e n e D e m o . h
s r c / S c e n e D e m o . c p p
2015-04-20 21:23:46 +00:00
s r c / T i m e r . h
s r c / T i m e r . c p p
2015-04-15 21:11:27 +00:00
)
# Common source files
2020-05-11 10:38:59 +00:00
set ( COMMON_SOURCES
2015-04-15 21:11:27 +00:00
c o m m o n / B o x . h
c o m m o n / B o x . c p p
c o m m o n / S p h e r e . h
c o m m o n / S p h e r e . c p p
c o m m o n / L i n e . h
c o m m o n / L i n e . c p p
c o m m o n / C a p s u l e . h
c o m m o n / C a p s u l e . c p p
c o m m o n / C o n v e x M e s h . h
c o m m o n / C o n v e x M e s h . c p p
2015-10-26 17:15:56 +00:00
c o m m o n / C o n c a v e M e s h . h
c o m m o n / C o n c a v e M e s h . c p p
2015-04-15 21:11:27 +00:00
c o m m o n / D u m b b e l l . h
c o m m o n / D u m b b e l l . c p p
2016-01-28 22:06:17 +00:00
c o m m o n / H e i g h t F i e l d . h
c o m m o n / H e i g h t F i e l d . c p p
2015-08-08 09:40:37 +00:00
c o m m o n / P h y s i c s O b j e c t . h
c o m m o n / P h y s i c s O b j e c t . c p p
2015-04-15 21:11:27 +00:00
c o m m o n / V i s u a l C o n t a c t P o i n t . h
c o m m o n / V i s u a l C o n t a c t P o i n t . c p p
2016-02-14 18:36:56 +00:00
c o m m o n / P e r l i n N o i s e . h
c o m m o n / P e r l i n N o i s e . c p p
2017-11-02 21:58:41 +00:00
c o m m o n / A A B B . h
c o m m o n / A A B B . c p p
2015-04-15 21:11:27 +00:00
)
# Examples scenes source files
2020-05-11 10:38:59 +00:00
set ( SCENES_SOURCES
2020-10-11 08:56:52 +00:00
s c e n e s / b a l l a n d s o c k e t j o i n t s n e t / B a l l A n d S o c k e t J o i n t s N e t S c e n e . h
s c e n e s / b a l l a n d s o c k e t j o i n t s n e t / B a l l A n d S o c k e t J o i n t s N e t S c e n e . c p p
2015-04-15 21:11:27 +00:00
s c e n e s / c u b e s / C u b e s S c e n e . h
s c e n e s / c u b e s / C u b e s S c e n e . c p p
s c e n e s / j o i n t s / J o i n t s S c e n e . h
s c e n e s / j o i n t s / J o i n t s S c e n e . c p p
s c e n e s / r a y c a s t / R a y c a s t S c e n e . h
s c e n e s / r a y c a s t / R a y c a s t S c e n e . c p p
s c e n e s / c o l l i s i o n s h a p e s / C o l l i s i o n S h a p e s S c e n e . h
s c e n e s / c o l l i s i o n s h a p e s / C o l l i s i o n S h a p e s S c e n e . c p p
2017-01-27 23:22:22 +00:00
s c e n e s / c o l l i s i o n d e t e c t i o n / C o l l i s i o n D e t e c t i o n S c e n e . h
s c e n e s / c o l l i s i o n d e t e c t i o n / C o l l i s i o n D e t e c t i o n S c e n e . c p p
2015-10-26 17:15:56 +00:00
s c e n e s / c o n c a v e m e s h / C o n c a v e M e s h S c e n e . h
s c e n e s / c o n c a v e m e s h / C o n c a v e M e s h S c e n e . c p p
2016-01-28 22:06:17 +00:00
s c e n e s / h e i g h t f i e l d / H e i g h t F i e l d S c e n e . h
s c e n e s / h e i g h t f i e l d / H e i g h t F i e l d S c e n e . c p p
2018-01-14 09:51:38 +00:00
s c e n e s / c u b e s t a c k / C u b e S t a c k S c e n e . h
s c e n e s / c u b e s t a c k / C u b e S t a c k S c e n e . c p p
2019-12-12 06:13:27 +00:00
s c e n e s / p i l e / P i l e S c e n e . h
s c e n e s / p i l e / P i l e S c e n e . c p p
2020-06-27 21:51:42 +00:00
s c e n e s / b o x t o w e r / B o x T o w e r S c e n e . h
s c e n e s / b o x t o w e r / B o x T o w e r S c e n e . c p p
2015-04-08 18:47:55 +00:00
)
# Create the executable
2020-05-11 10:38:59 +00:00
add_executable ( testbed ${ TESTBED_SOURCES } ${ SCENES_SOURCES } ${ COMMON_SOURCES } ${ OPENGLFRAMEWORK_SOURCES } )
2015-04-08 18:47:55 +00:00
2020-05-12 20:50:46 +00:00
# Headers
target_include_directories ( testbed PRIVATE
$ < B U I L D _ I N T E R F A C E : $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / s r c >
$ < B U I L D _ I N T E R F A C E : $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / o p e n g l - f r a m e w o r k / s r c >
$ < B U I L D _ I N T E R F A C E : $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / c o m m o n >
$ < B U I L D _ I N T E R F A C E : $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / s c e n e s >
$ < B U I L D _ I N T E R F A C E : $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / e x t e r n / n a n o g u i / i n c l u d e >
)
foreach ( p ${ NANOGUI_EXTRA_INCS } )
target_include_directories ( testbed PRIVATE $< 1:${p} > )
endforeach ( )
# Compile definitions
target_compile_definitions ( testbed PRIVATE ${ NANOGUI_EXTRA_DEFS } )
# C++17 compiler features
target_compile_features ( testbed PUBLIC cxx_std_17 )
set_target_properties ( testbed PROPERTIES CXX_EXTENSIONS OFF )
2016-01-07 22:04:39 +00:00
2015-04-08 18:47:55 +00:00
# Link with libraries
2020-05-11 10:38:59 +00:00
target_link_libraries ( testbed reactphysics3d nanogui ${ NANOGUI_EXTRA_LIBS } )
2020-05-12 20:50:46 +00:00