@ -2,18 +2,12 @@ cmake_minimum_required(VERSION 3.2)
project ( Symmetry )
include_directories ( include )
file ( GLOB SOURCES "src/*.c" )
add_executable ( ${ PROJECT_NAME } ${ SOURCES } )
if ( CMAKE_CONFIGURATION_TYPES )
set ( CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE )
else ( )
if ( CMAKE_BUILD_TYPE MATCHES Debug )
set ( SYMMETRY_BUILD_TYPE debug )
add_definitions ( -DGL_DEBUG_CONTEXT )
add_definitions ( -DAL_DEBUG )
else ( )
set ( CMAKE_BUILD_TYPE Release )
set ( SYMMETRY_BUILD_TYPE release )
@ -21,42 +15,216 @@ else()
endif ( )
# F l a g s
add_definitions ( -DUSE_GLAD )
# P l a t f o r m s p e c i f i c l i b s a n d f l a g s
if ( WIN32 )
set ( CURRENT_PLATFORM windows )
add_definitions ( -D_CRT_SECURE_NO_WARNINGS )
add_library ( sdl2 STATIC IMPORTED )
set_target_properties ( sdl2 PROPERTIES IMPORTED_LOCATION_DEBUG ${ CMAKE_SOURCE_DIR } /libs/debug/win64_msvc/SDL2.lib )
set_target_properties ( sdl2 PROPERTIES IMPORTED_LOCATION_RELEASE ${ CMAKE_SOURCE_DIR } /libs/release/win64_msvc/SDL2.lib )
target_link_libraries ( ${ PROJECT_NAME } openal sdl2 winmm.lib imm32.lib version.lib )
set ( CMAKE_C_FLAGS_DEBUG /MTd )
set ( CMAKE_C_FLAGS_RELEASE /MT )
include_directories ( ${ CMAKE_SOURCE_DIR } /include/common
$ { C M A K E _ S O U R C E _ D I R } / i n c l u d e / c o m m o n / s o l o u d
$ { C M A K E _ S O U R C E _ D I R } / i n c l u d e / w i n d o w s / s d l 2
$ { C M A K E _ S O U R C E _ D I R } / i n c l u d e / w i n d o w s )
set ( SDL2_LIB_FILE ${ CMAKE_SOURCE_DIR } /lib/windows/sdl2/SDL2.dll )
set ( SOLOUD_LIB_FILE ${ CMAKE_SOURCE_DIR } /lib/windows/soloud/soloud_x64.dll )
set ( ODE_LIB_FILE ${ CMAKE_SOURCE_DIR } /lib/windows/ode/ode_double.dll )
# target_link_libraries ( ${ PROJECT_NAME } openal sdl2 winmm.lib imm32.lib version.lib )
# set ( CMAKE_C_FLAGS_DEBUG /MTd )
# set ( CMAKE_C_FLAGS_RELEASE /MT )
elseif ( UNIX AND NOT APPLE )
set ( CURRENT_PLATFORM linux )
find_library ( LIB_M m REQUIRED )
find_library ( LIB_RT rt REQUIRED )
find_library ( LIB_PTHREAD pthread REQUIRED )
find_library ( LIB_SNDIO sndio REQUIRED )
find_library ( SDL2_LIBRARY SDL2 HINTS libs/ ${ SYMMETRY_BUILD_TYPE } /linux64_gcc REQUIRED )
find_library ( AL_LIBRARY openal HINTS libs/ ${ SYMMETRY_BUILD_TYPE } /linux64_gcc REQUIRED )
target_link_libraries ( ${ PROJECT_NAME } ${ SDL2_LIBRARY } ${ LIB_PTHREAD } ${ LIB_M } ${ LIB_RT } ${ CMAKE_DL_LIBS } )
target_link_libraries ( ${ PROJECT_NAME } ${ AL_LIBRARY } ${ LIB_SNDIO } )
set ( CMAKE_C_FLAGS "-Wall -Wno-undefined -std=c99" )
# a f t e r b u i l d i s c o m p l e t e c r e a t e a l i n k t o a s s e t s f o l d e r
add_custom_command (
T A R G E T $ { P R O J E C T _ N A M E }
P O S T _ B U I L D
C O M M A N D $ { C M A K E _ C O M M A N D } - E c r e a t e _ s y m l i n k $ { C M A K E _ S O U R C E _ D I R } / a s s e t s $ { C M A K E _ B I N A R Y _ D I R } / a s s e t s )
include_directories ( ${ CMAKE_SOURCE_DIR } /include/common
$ { C M A K E _ S O U R C E _ D I R } / i n c l u d e / c o m m o n / s o l o u d
$ { C M A K E _ S O U R C E _ D I R } / i n c l u d e / l i n u x / s d l 2
$ { C M A K E _ S O U R C E _ D I R } / i n c l u d e / l i n u x )
set ( SDL2_LIB_FILE ${ CMAKE_SOURCE_DIR } /lib/linux/sdl2/libSDL2.so )
set ( SOLOUD_LIB_FILE ${ CMAKE_SOURCE_DIR } /lib/linux/soloud/libsoloud_x64.so )
set ( ODE_LIB_FILE ${ CMAKE_SOURCE_DIR } /lib/linux/ode/libode.so )
else ( )
message ( FATAL_ERROR "Unsupported Platform! Currently only Windows and Linux supported" )
message ( FATAL_ERROR "Unsupported Platform! Currently only Windows and Linux supported" )
endif ( WIN32 )
find_package ( OpenGL REQUIRED )
target_link_libraries ( ${ PROJECT_NAME } ${ OPENGL_LIBRARIES } )
set ( CMAKE_INSTALL_PREFIX ${ CMAKE_SOURCE_DIR } /bin ) # D o e s n o t w o r k o n w i n d o w s f o r s o m e r e a s o n ! T O D O : F i n d a w a y a r o u n d t h i s f o r f a s t e r w i n d o w s i n s t a l l a t i o n
install ( TARGETS ${ PROJECT_NAME } DESTINATION ${ CURRENT_PLATFORM } )
install ( DIRECTORY ${ CMAKE_SOURCE_DIR } /assets DESTINATION ${ CURRENT_PLATFORM } )
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# S e t u p e x t e r n a l l i b s
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
set ( SDL2_LIB_DIR ${ CMAKE_SOURCE_DIR } /lib/ ${ CURRENT_PLATFORM } /sdl2 )
set ( ODE_LIB_DIR ${ CMAKE_SOURCE_DIR } /lib/ ${ CURRENT_PLATFORM } /ode )
set ( SOLOUD_LIB_DIR ${ CMAKE_SOURCE_DIR } /lib/ ${ CURRENT_PLATFORM } /soloud )
file ( GLOB SDL2_LIB_FILES "${SDL2_LIB_DIR}/*" )
file ( GLOB ODE_LIB_FILES "${ODE_LIB_DIR}/*" )
file ( GLOB SOLOUD_LIB_FILES "${SOLOUD_LIB_DIR}/*" )
add_library ( SDL2 SHARED IMPORTED )
set_target_properties ( SDL2 PROPERTIES IMPORTED_LOCATION ${ SDL2_LIB_FILE } )
add_library ( SOLOUD SHARED IMPORTED )
set_target_properties ( SOLOUD PROPERTIES IMPORTED_LOCATION ${ SOLOUD_LIB_FILE } )
add_library ( ODE SHARED IMPORTED )
set_target_properties ( ODE PROPERTIES IMPORTED_LOCATION ${ ODE_LIB_FILE } )
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# S e t u p s o u r c e f i l e s
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
set ( COMMON_HEADERS
s r c / c o m m o n / a r r a y . h
s r c / c o m m o n / h a s h m a p . h
s r c / c o m m o n / l i n m a t h . h
s r c / c o m m o n / l o g . h
s r c / c o m m o n / p a r s e r . h
s r c / c o m m o n / s t r i n g _ u t i l s . h
s r c / c o m m o n / u t i l s . h
s r c / c o m m o n / v a r i a n t . h
s r c / c o m m o n / a r r a y _ s t r . h
s r c / c o m m o n / c o m m o n . h
s r c / c o m m o n / n u m _ t y p e s . h )
set ( COMMON_SOURCES
s r c / c o m m o n / a r r a y . c
s r c / c o m m o n / h a s h m a p . c
s r c / c o m m o n / l i n m a t h . c
s r c / c o m m o n / l o g . c
s r c / c o m m o n / p a r s e r . c
s r c / c o m m o n / s t r i n g _ u t i l s . c
s r c / c o m m o n / u t i l s . c
s r c / c o m m o n / v a r i a n t . c )
set ( EXECUTALE_HEADERS
s r c / g a m e / m a i n . h
s r c / g a m e / c o n f i g _ v a r s . h
s r c / g a m e / f i l e _ i o . h
s r c / g a m e / p h y s i c s . h
s r c / g a m e / p l a t f o r m . h
s r c / g a m e / s o u n d . h )
set ( EXECUTABLE_SOURCES
s r c / g a m e / m a i n . c
s r c / g a m e / c o n f i g _ v a r s . c
s r c / g a m e / f i l e _ i o . c
s r c / g a m e / p h y s i c s . c
s r c / g a m e / p l a t f o r m . c
s r c / g a m e / s o u n d . c )
set ( GAME_LIB_SOURCES
s r c / l i b s y m m e t r y / b o u n d i n g _ v o l u m e s . c
s r c / l i b s y m m e t r y / c a m e r a . c
s r c / l i b s y m m e t r y / e d i t o r . c
s r c / l i b s y m m e t r y / c o n s o l e . c
s r c / l i b s y m m e t r y / e d i t o r . c
s r c / l i b s y m m e t r y / e n t i t y . c
s r c / l i b s y m m e t r y / f r a m e b u f f e r . c
s r c / l i b s y m m e t r y / g a m e . c
s r c / l i b s y m m e t r y / g e o m e t r y . c
s r c / l i b s y m m e t r y / g l a d . c
s r c / l i b s y m m e t r y / g l _ l o a d . c
s r c / l i b s y m m e t r y / g u i . c
s r c / l i b s y m m e t r y / i m _ r e n d e r . c
s r c / l i b s y m m e t r y / i n p u t . c
s r c / l i b s y m m e t r y / l i g h t . c
s r c / l i b s y m m e t r y / m a t e r i a l . c
s r c / l i b s y m m e t r y / m o d e l . c
s r c / l i b s y m m e t r y / p l a y e r . c
s r c / l i b s y m m e t r y / r e n d e r e r . c
s r c / l i b s y m m e t r y / s c e n e . c
s r c / l i b s y m m e t r y / s h a d e r . c
s r c / l i b s y m m e t r y / s p r i t e . c
s r c / l i b s y m m e t r y / t e x t u r e . c
s r c / l i b s y m m e t r y / t r a n s f o r m . c )
set ( GAME_LIB_HEADERS
s r c / l i b s y m m e t r y / b o u n d i n g _ v o l u m e s . h
s r c / l i b s y m m e t r y / c a m e r a . h
s r c / l i b s y m m e t r y / e d i t o r . h
s r c / l i b s y m m e t r y / c o n s o l e . h
s r c / l i b s y m m e t r y / e d i t o r . h
s r c / l i b s y m m e t r y / e n t i t y . h
s r c / l i b s y m m e t r y / e v e n t . h
s r c / l i b s y m m e t r y / f r a m e b u f f e r . h
s r c / l i b s y m m e t r y / g a m e . h
s r c / l i b s y m m e t r y / g e o m e t r y . h
s r c / l i b s y m m e t r y / g l _ l o a d . h
s r c / l i b s y m m e t r y / g u i . h
s r c / l i b s y m m e t r y / i m _ r e n d e r . h
s r c / l i b s y m m e t r y / i n p u t . h
s r c / l i b s y m m e t r y / l i g h t . h
s r c / l i b s y m m e t r y / m a t e r i a l . h
s r c / l i b s y m m e t r y / m o d e l . h
s r c / l i b s y m m e t r y / p l a y e r . h
s r c / l i b s y m m e t r y / r e n d e r e r . h
s r c / l i b s y m m e t r y / s c e n e . h
s r c / l i b s y m m e t r y / s h a d e r . h
s r c / l i b s y m m e t r y / s p r i t e . h
s r c / l i b s y m m e t r y / t e x t u r e . h
s r c / l i b s y m m e t r y / t r a n s f o r m . h )
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# G a m e E x e c u t a b l e
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
set ( EXECUTABLE_NAME ${ PROJECT_NAME } )
add_executable ( ${ EXECUTABLE_NAME } ${ EXECUTABLE_HEADERS } ${ EXECUTABLE_SOURCES } ${ COMMON_HEADERS } ${ COMMON_SOURCES } )
target_include_directories ( ${ EXECUTABLE_NAME } PUBLIC ${ CMAKE_SOURCE_DIR } /include )
target_compile_definitions ( ${ EXECUTABLE_NAME } PUBLIC -DGAME $< $<CONFIG:DEBUG > : -DGL_DEBUG_CONTEXT> )
target_link_libraries ( ${ EXECUTABLE_NAME } SDL2 ODE SOLOUD )
set_target_properties ( ${ EXECUTABLE_NAME } PROPERTIES LINK_FLAGS "'-Wl,-rpath,$ORIGIN/lib' -Wl,--no-undefined" )
target_compile_options ( ${ EXECUTABLE_NAME } PUBLIC -Wall --std=c99 )
find_library ( LIB_M m REQUIRED )
find_library ( LIB_RT rt REQUIRED )
find_library ( LIB_PTHREAD pthread REQUIRED )
find_library ( LIB_SNDIO sndio REQUIRED )
target_link_libraries ( ${ EXECUTABLE_NAME } ${ LIB_M } ${ LIB_RT } ${ LIB_PTHREAD } ${ LIB_SNDIO } )
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# G a m e L i b r a r y
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
set ( GAME_LIB_NAME "${PROJECT_NAME}_Game" )
add_library ( ${ GAME_LIB_NAME } SHARED ${ GAME_LIB_HEADERS } ${ GAME_LIB_SOURCES } ${ COMMON_HEADERS } ${ COMMON_SOURCES } )
target_include_directories ( ${ GAME_LIB_NAME } PUBLIC ${ CMAKE_SOURCE_DIR } /include )
target_compile_definitions ( ${ GAME_LIB_NAME } PUBLIC -DGAME_LIB -DUSE_GLAD $< $<CONFIG:DEBUG > : -DGL_DEBUG_CONTEXT> )
target_compile_options ( ${ GAME_LIB_NAME } PUBLIC -Wall --std=c99 )
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# P o s t b u i l d
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
add_custom_command (
T A R G E T $ { E X E C U T A B L E _ N A M E }
P O S T _ B U I L D
C O M M A N D $ { C M A K E _ C O M M A N D } - E c r e a t e _ s y m l i n k $ { C M A K E _ S O U R C E _ D I R } / a s s e t s $ { C M A K E _ B I N A R Y _ D I R } / a s s e t s )
add_custom_command (
T A R G E T $ { E X E C U T A B L E _ N A M E }
P O S T _ B U I L D
C O M M A N D $ { C M A K E _ C O M M A N D } - E m a k e _ d i r e c t o r y $ { C M A K E _ B I N A R Y _ D I R } / l i b /
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t $ { S D L 2 _ L I B _ F I L E S } $ { C M A K E _ B I N A R Y _ D I R } / l i b /
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t $ { O D E _ L I B _ F I L E S } $ { C M A K E _ B I N A R Y _ D I R } / l i b /
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t $ { S O L O U D _ L I B _ F I L E S } $ { C M A K E _ B I N A R Y _ D I R } / l i b /
C O M M E N T " C o p y i n g l i b r a r i e s . . . " )
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# I n s t a l l
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Install ( TARGETS ${ EXECUTABLE_NAME } DESTINATION ${ CMAKE_INSTALL_PREFIX } )
Install ( TARGETS ${ GAME_LIB_NAME } DESTINATION ${ CMAKE_INSTALL_PREFIX } )
install ( DIRECTORY ${ CMAKE_SOURCE_DIR } /assets DESTINATION ${ CMAKE_INSTALL_PREFIX } )
install (
F I L E S $ { S D L 2 _ L I B _ F I L E S } $ { O D E _ L I B _ F I L E S } $ { S O L O U D _ L I B _ F I L E S }
D E S T I N A T I O N l i b )