2011-12-04 18:04:02 -05:00
# root CMakeLists for the SuperTuxKart project
# Always edit 'CMakeLists.in.txt' and not 'CMakeLists.txt', the latter is automatically generated
2011-07-24 10:29:16 -04:00
cmake_minimum_required ( VERSION 2.8.1 )
project ( SuperTuxKart )
#set(CMAKE_VERBOSE_MAKEFILE TRUE)
set ( STK_SOURCE_DIR "src" )
set ( CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin" )
2011-09-05 20:15:06 -04:00
set ( PROJECT_VERSION "0.7.3" )
2011-07-24 14:40:20 -04:00
# Tweakable values
2011-08-01 15:18:49 -04:00
if ( CMAKE_BUILD_TYPE MATCHES "Debug" )
set ( DEBUG ON )
2011-10-22 14:20:51 -04:00
else ( )
2011-08-01 15:18:49 -04:00
set ( DEBUG OFF )
2011-10-22 14:20:51 -04:00
endif ( )
2011-08-01 15:18:49 -04:00
2011-07-24 14:40:20 -04:00
option ( USE_FRIBIDI "Support for right-to-left languages" ON )
2011-08-01 15:18:49 -04:00
option ( FONT_TOOL "Compile font tool" OFF )
2011-07-24 14:40:20 -04:00
set ( IRRLICHT_DIR "/path/to/irrlicht" CACHE STRING "Path to Irrlicht" )
2011-07-24 10:29:16 -04:00
# Build the Bullet physics library
add_subdirectory ( "${STK_SOURCE_DIR}/bullet" )
# Build the ENet UDP network library
add_subdirectory ( "${STK_SOURCE_DIR}/enet" )
2011-07-24 14:40:20 -04:00
# Set include paths
2011-07-24 10:29:16 -04:00
include_directories ( "${STK_SOURCE_DIR}" )
include_directories ( "${STK_SOURCE_DIR}/enet/include" )
include_directories ( "${STK_SOURCE_DIR}/bullet/src" )
2011-07-24 14:40:20 -04:00
2011-08-29 14:17:45 -04:00
if ( APPLE )
# We could use smarter detection of the frameworks but supporting a single official setup makes things easy...
include_directories ( "/Library/Frameworks/IrrFramework.framework/Versions/A/Headers/" )
include_directories ( "/Library/Frameworks/fribidi.framework/Headers" )
include_directories ( "/Library/Frameworks/Ogg.framework/Headers" )
include_directories ( "/Library/Frameworks/Vorbis.framework/Headers" )
include_directories ( "/usr/local/include" )
include_directories ( "/usr/include" )
find_library ( Ogg /Library/Frameworks/Ogg.framework )
find_library ( Vorbis /Library/Frameworks/Vorbis.framework )
endif ( )
2011-07-24 14:40:20 -04:00
# Set lib paths
if ( APPLE )
2011-08-29 14:17:45 -04:00
# nothing to add
2011-07-24 14:40:20 -04:00
elseif ( UNIX )
link_directories ( "${IRRLICHT_DIR}/lib/Linux" )
elseif ( MSVC )
link_directories ( "${IRRLICHT_DIR}/lib/Win32-visualstudio" )
else ( )
link_directories ( "${IRRLICHT_DIR}/lib/Win32-gcc" )
endif ( )
2011-07-24 10:29:16 -04:00
link_directories ( "${STK_SOURCE_DIR}/bullet" )
2011-08-01 15:18:49 -04:00
# OpenGL
2011-08-29 14:17:45 -04:00
if ( APPLE )
find_library ( OpenGL /System/Library/Frameworks/OpenGL.framework /System/Library/Frameworks/AGL.framework )
2011-08-01 15:18:49 -04:00
else ( )
2011-08-29 14:17:45 -04:00
find_package ( OpenGL )
if ( OPENGL_FOUND )
message ( "-- OpenGL found (include dirs: ${OPENGL_INCLUDE_DIR})" )
include_directories ( ${ OPENGL_INCLUDE_DIR } )
else ( )
message ( FATAL_ERROR "OpenGL not found." )
endif ( )
if ( UNIX )
# X11, stk requires xf86vm
find_package ( X11 )
if ( X11_FOUND )
message ( "-- X11 libs found" )
else ( )
message ( FATAL_ERROR "X11 not found." )
endif ( )
endif ( )
2011-07-24 14:40:20 -04:00
endif ( )
2011-08-01 15:18:49 -04:00
# OpenAL
2011-08-29 14:17:45 -04:00
if ( APPLE )
find_library ( OpenAL /Library/Frameworks/OpenAL.framework )
2011-08-01 15:18:49 -04:00
else ( )
2011-08-29 14:17:45 -04:00
find_package ( OpenAL )
if ( OPENAL_FOUND )
message ( "-- OpenAL found (include dirs: ${OPENAL_INCLUDE_DIR})" )
include_directories ( ${ OPENAL_INCLUDE_DIR } )
else ( )
message ( FATAL_ERROR "OpenAL not found." )
endif ( )
2011-08-01 15:18:49 -04:00
endif ( )
# Check if we finally got irrlicht
2011-08-29 14:17:45 -04:00
if ( APPLE )
find_library ( Irrlicht /Library/Frameworks/IrrFramework.framework )
2011-08-01 15:18:49 -04:00
else ( )
2011-08-29 14:17:45 -04:00
find_path ( HAVE_IRRLICHT irrlicht.h PATHS ${ IRRLICHT_DIR } ${ IRRLICHT_DIR } /include /usr/include/irrlicht/ /usr/local/include/irrlicht/ )
if ( HAVE_IRRLICHT )
message ( "-- Irrlicht found (in ${HAVE_IRRLICHT}/irrlicht.h)" )
2011-10-24 19:56:55 -04:00
#include_directories(${IRRLICHT_DIR} ${IRRLICHT_DIR}/include /usr/include/irrlicht/ /usr/local/include/irrlicht/)
include_directories ( ${ HAVE_IRRLICHT } )
2011-08-29 14:17:45 -04:00
else ( )
message ( FATAL_ERROR "\n -- Irrlicht not found (can't locate irrlicht.h)\n Use -DIRRLICHT_DIR=/path/to/irrlicht" )
endif ( )
2011-08-01 15:18:49 -04:00
endif ( )
include_directories ( ${ HAVE_IRRLICHT } )
# CURL
find_package ( CURL )
if ( CURL_FOUND )
include_directories ( ${ CURL_INCLUDE_DIRS } )
else ( )
message ( FATAL_ERROR "-- libcURL not found, please install it." )
endif ( )
2011-10-20 22:07:12 -04:00
# Fribidi
if ( USE_FRIBIDI )
FIND_PATH ( FRIBIDI_INCLUDE_DIR fribidi/fribidi.h
/ u s r / l o c a l / i n c l u d e
/ u s r / i n c l u d e
)
SET ( FRIBIDI_NAMES ${ FRIBIDI_NAMES } fribidi libfribidi )
FIND_LIBRARY ( FRIBIDI_LIBRARY
N A M E S $ { F R I B I D I _ N A M E S }
P A T H S / u s r / l i b / u s r / l o c a l / l i b
)
IF ( FRIBIDI_LIBRARY AND FRIBIDI_INCLUDE_DIR )
message ( "-- Fribidi found" )
else ( )
message ( FATAL_ERROR "Fribidi not found. Either install fribidi or disable bidi support with -DUSE_FRIBIDI=0 (if you don't use a right-to-left language then you don't need this)." )
endif ( )
endif ( )
2011-08-01 15:18:49 -04:00
# Set some compiler options
if ( UNIX )
add_definitions ( -Wall )
endif ( )
2011-07-24 14:40:20 -04:00
add_definitions ( -DHAVE_OGGVORBIS ) # TODO: remove this switch
if ( DEBUG )
add_definitions ( -DDEBUG )
else ( )
add_definitions ( -DNDEBUG )
2011-10-20 21:14:46 -04:00
add_definitions ( -O2 )
2011-07-24 10:29:16 -04:00
endif ( )
2011-08-01 15:18:49 -04:00
find_package ( Freetype )
2011-09-05 20:15:06 -04:00
if ( FONT_TOOL )
if ( FREETYPE_FOUND )
message ( "-- Freetype found" )
find_package ( X11 )
include_directories ( ${ FREETYPE_INCLUDE_DIRS } )
add_executable ( font_tool
2011-11-22 13:36:58 -05:00
t o o l s / f o n t _ t o o l / C F o n t T o o l . c p p
t o o l s / f o n t _ t o o l / C F o n t T o o l . h
t o o l s / f o n t _ t o o l / C V e c t o r F o n t T o o l . h
t o o l s / f o n t _ t o o l / m a i n . c p p
2011-09-05 20:15:06 -04:00
)
target_link_libraries ( font_tool ${ FREETYPE_LIBRARIES } )
target_link_libraries ( font_tool ${ X11_Xft_LIB } )
target_link_libraries ( font_tool ${ OPENGL_LIBRARIES } )
target_link_libraries ( font_tool Irrlicht )
else ( )
message ( "-- Freetype was not found, the font tool won't be built (only useful for developers)" )
endif ( )
2011-08-01 15:18:49 -04:00
else ( )
2011-09-05 20:15:06 -04:00
message ( "-- Font tool deactivated, the font tool won't be built (only useful for developers)" )
2011-08-01 15:18:49 -04:00
endif ( )
2011-07-24 10:29:16 -04:00
2011-12-18 21:26:07 -05:00
set ( SRCS ${ SRCS } src/addons/addon.cpp src/addons/addon.hpp src/addons/addons_manager.cpp src/addons/addons_manager.hpp src/addons/dummy_network_http.hpp src/addons/inetwork_http.hpp src/addons/network_http.cpp src/addons/network_http.hpp src/addons/news_manager.cpp src/addons/news_manager.hpp src/addons/request.cpp src/addons/request.hpp src/addons/zip.cpp src/addons/zip.hpp src/animations/animation_base.cpp src/animations/animation_base.hpp src/animations/billboard_animation.cpp src/animations/billboard_animation.hpp src/animations/ipo.cpp src/animations/ipo.hpp src/animations/three_d_animation.cpp src/animations/three_d_animation.hpp src/audio/dummy_sfx.hpp src/audio/music.hpp src/audio/music_dummy.hpp src/audio/music_information.cpp src/audio/music_information.hpp src/audio/music_manager.cpp src/audio/music_manager.hpp src/audio/music_ogg.cpp src/audio/music_ogg.hpp src/audio/sfx_base.hpp src/audio/sfx_buffer.cpp src/audio/sfx_buffer.hpp src/audio/sfx_manager.cpp src/audio/sfx_manager.hpp src/audio/sfx_openal.cpp src/audio/sfx_openal.hpp src/challenges/challenge.cpp src/challenges/challenge.hpp src/challenges/challenge_data.cpp src/challenges/challenge_data.hpp src/challenges/game_slot.cpp src/challenges/game_slot.hpp src/challenges/unlock_manager.cpp src/challenges/unlock_manager.hpp src/config/device_config.cpp src/config/device_config.hpp src/config/player.hpp src/config/stk_config.cpp src/config/stk_config.hpp src/config/user_config.cpp src/config/user_config.hpp src/enet/callbacks.c src/enet/compress.c src/enet/host.c src/enet/include/enet/callbacks.h src/enet/include/enet/enet.h src/enet/include/enet/list.h src/enet/include/enet/protocol.h src/enet/include/enet/time.h src/enet/include/enet/types.h src/enet/include/enet/unix.h src/enet/include/enet/utility.h src/enet/include/enet/win32.h src/enet/list.c src/enet/packet.c src/enet/peer.c src/enet/protocol.c src/enet/unix.c src/enet/win32.c src/graphics/camera.cpp src/graphics/camera.hpp src/graphics/CBatchingMesh.cpp src/graphics/CBatchingMesh.hpp src/graphics/explosion.cpp src/graphics/explosion.hpp src/graphics/hardware_skinning.cpp src/graphics/hardware_skinning.hpp src/graphics/hit_effect.hpp src/graphics/hit_sfx.cpp src/graphics/hit_sfx.hpp src/graphics/irr_driver.cpp src/graphics/irr_driver.hpp src/graphics/lod_node.cpp src/graphics/lod_node.hpp src/graphics/material.cpp src/graphics/material.hpp src/graphics/material_manager.cpp src/graphics/material_manager.hpp src/graphics/mesh_tools.cpp src/graphics/mesh_tools.hpp src/graphics/moving_texture.cpp src/graphics/moving_texture.hpp src/graphics/particle_emitter.cpp src/graphics/particle_emitter.hpp src/graphics/particle_kind.cpp src/graphics/particle_kind.hpp src/graphics/particle_kind_manager.cpp src/graphics/particle_kind_manager.hpp src/graphics/per_camera_node.cpp src/graphics/per_camera_node.hpp src/graphics/post_processing.cpp src/graphics/post_processing.hpp src/graphics/rain.cpp src/graphics/rain.hpp src/graphics/referee.cpp src/graphics/referee.hpp src/graphics/shadow.cpp src/graphics/shadow.hpp src/graphics/skid_marks.cpp src/graphics/skid_marks.hpp src/graphics/slip_stream.cpp src/graphics/slip_stream.hpp src/graphics/stars.cpp src/graphics/stars.hpp src/guiengine/abstract_state_manager.cpp src/guiengine/abstract_state_manager.hpp src/guiengine/abstract_top_level_container.cpp src/guiengine/abstract_top_level_container.hpp src/guiengine/CGUISpriteBank.cpp src/guiengine/CGUISpriteBank.h src/guiengine/engine.cpp src/guiengine/engine.hpp src/guiengine/event_handler.cpp src/guiengine/event_handler.hpp src/guiengine/layout_manager.cpp src/guiengine/layout_manager.hpp src/guiengine/modaldialog.cpp src/guiengine/modaldialog.hpp src/guiengine/scalable_font.cpp src/guiengine/scalable_font.hpp src/guiengine/screen.cpp src/guiengine/screen.hpp src/guiengine/screen_loader.cpp src/guiengine/skin.cpp src/guiengine/skin.hpp src/guiengine/widget.cpp src/guiengine/widget.hpp src/guiengine/widgets/bubble_widget.cpp src/guiengine/widgets/bubble_widget.hpp src/guiengine/widgets/button_widget.cpp src/guiengine/widget
2011-08-29 14:17:45 -04:00
if ( APPLE )
# icon files to copy in the bundle
set ( OSX_ICON_FILES ${ PROJECT_SOURCE_DIR } /src/ide/Xcode/stk.icns )
set_source_files_properties ( ${ OSX_ICON_FILES } PROPERTIES MACOSX_PACKAGE_LOCATION Resources )
set ( SRCS ${ SRCS } ${ OSX_ICON_FILES } )
# build the executable and create an app bundle
add_executable ( supertuxkart MACOSX_BUNDLE ${ SRCS } )
target_link_libraries ( supertuxkart
b u l l e t d y n a m i c s
b u l l e t c o l l i s i o n
b u l l e t m a t h
e n e t
$ { C U R L _ L I B R A R I E S }
# We could use smarter detection of the frameworks but supporting a single official setup makes things easy...
/ L i b r a r y / F r a m e w o r k s / I r r F r a m e w o r k . f r a m e w o r k
/ L i b r a r y / F r a m e w o r k s / O g g . f r a m e w o r k
/ L i b r a r y / F r a m e w o r k s / O p e n A L . f r a m e w o r k
/ L i b r a r y / F r a m e w o r k s / V o r b i s . f r a m e w o r k
2011-10-21 21:01:22 -04:00
# TODO: allow linking against frameworks from a SDK.
2011-08-29 14:17:45 -04:00
/ S y s t e m / L i b r a r y / F r a m e w o r k s / A G L . f r a m e w o r k
/ S y s t e m / L i b r a r y / F r a m e w o r k s / I O K i t . f r a m e w o r k
/ S y s t e m / L i b r a r y / F r a m e w o r k s / Q u i c k T i m e . f r a m e w o r k
/ S y s t e m / L i b r a r y / F r a m e w o r k s / C a r b o n . f r a m e w o r k
/ S y s t e m / L i b r a r y / F r a m e w o r k s / A u d i o U n i t . f r a m e w o r k
/ S y s t e m / L i b r a r y / F r a m e w o r k s / C o c o a . f r a m e w o r k
/ S y s t e m / L i b r a r y / F r a m e w o r k s / O p e n G L . f r a m e w o r k )
# configure CMake to use a custom Info.plist
set_target_properties ( supertuxkart PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${ PROJECT_SOURCE_DIR } /src/ide/Xcode/SuperTuxKart-Info.plist )
2011-08-29 14:30:19 -04:00
add_definitions ( `ln -sf ${ PROJECT_SOURCE_DIR } /data ${ CMAKE_BINARY_DIR } /bin/supertuxkart.app/Contents/Resources` )
2011-08-29 14:17:45 -04:00
else ( )
2011-11-14 18:27:31 -05:00
2011-11-14 18:52:50 -05:00
add_definitions ( -DSUPERTUXKART_DATADIR=\ "${CMAKE_INSTALL_PREFIX}/share/games/supertuxkart\" )
2011-11-14 18:27:31 -05:00
2011-08-29 14:17:45 -04:00
# Build the final executable
add_executable ( supertuxkart ${ SRCS } )
target_link_libraries ( supertuxkart
I r r l i c h t
b u l l e t d y n a m i c s
b u l l e t c o l l i s i o n
b u l l e t m a t h
e n e t
2011-11-18 15:58:36 -05:00
p t h r e a d
2011-08-29 14:17:45 -04:00
$ { C U R L _ L I B R A R I E S }
$ { O P E N G L _ L I B R A R I E S }
$ { O P E N A L _ L I B R A R Y }
v o r b i s f i l e )
endif ( )
2011-07-24 10:29:16 -04:00
2011-07-24 14:40:20 -04:00
if ( USE_FRIBIDI )
2011-08-29 14:17:45 -04:00
if ( APPLE )
2011-10-21 21:02:35 -04:00
target_link_libraries ( supertuxkart /Library/Frameworks/fribidi.framework )
2011-08-29 14:17:45 -04:00
else ( )
target_link_libraries ( supertuxkart fribidi )
endif ( )
2011-10-18 18:59:36 -04:00
add_definitions ( -DENABLE_BIDI=1 )
2011-07-24 14:40:20 -04:00
endif ( )
2011-10-18 18:59:36 -04:00
2011-08-01 15:18:49 -04:00
if ( UNIX AND NOT APPLE )
2011-10-21 21:02:35 -04:00
target_link_libraries ( supertuxkart Xxf86vm )
2011-07-24 14:40:20 -04:00
elseif ( APPLE )
2011-08-29 14:17:45 -04:00
# We could use smarter detection of the frameworks but supporting a single official setup makes things easy...
target_link_libraries ( supertuxkart /Library/Frameworks/IrrFramework.framework )
target_link_libraries ( supertuxkart /Library/Frameworks/Ogg.framework )
target_link_libraries ( supertuxkart /Library/Frameworks/OpenAL.framework )
target_link_libraries ( supertuxkart /Library/Frameworks/Vorbis.framework )
target_link_libraries ( supertuxkart /System/Library/Frameworks/AGL.framework )
target_link_libraries ( supertuxkart /System/Library/Frameworks/IOKit.framework )
target_link_libraries ( supertuxkart /System/Library/Frameworks/QuickTime.framework )
target_link_libraries ( supertuxkart /System/Library/Frameworks/Carbon.framework )
target_link_libraries ( supertuxkart /System/Library/Frameworks/AudioUnit.framework )
target_link_libraries ( supertuxkart /System/Library/Frameworks/Cocoa.framework )
target_link_libraries ( supertuxkart /System/Library/Frameworks/OpenGL.framework )
2011-07-24 14:40:20 -04:00
endif ( )
2011-09-05 20:15:06 -04:00
2011-10-21 20:36:30 -04:00
# ==== Make dist target ====
2011-09-05 20:15:06 -04:00
add_custom_target ( dist
C O M M A N D r m - r f $ { C M A K E _ B I N A R Y _ D I R } / S u p e r T u x K a r t - $ { P R O J E C T _ V E R S I O N } & & r m - f $ { C M A K E _ B I N A R Y _ D I R } / S u p e r T u x K a r t - $ { P R O J E C T _ V E R S I O N } . t a r . b z 2
& & e c h o " E x p o r t i n g . . . "
& & s v n e x p o r t $ { P R O J E C T _ S O U R C E _ D I R } $ { C M A K E _ B I N A R Y _ D I R } / S u p e r T u x K a r t - $ { P R O J E C T _ V E R S I O N }
& & e c h o " C o m p r e s s i n g . . . "
& & c d $ { C M A K E _ B I N A R Y _ D I R }
& & t a r - c j f $ { C M A K E _ B I N A R Y _ D I R } / S u p e r T u x K a r t - $ { P R O J E C T _ V E R S I O N } . t a r . b z 2 . / S u p e r T u x K a r t - $ { P R O J E C T _ V E R S I O N }
& & e c h o " D o n e , c l e a n i n g u p "
& & r m - r f $ { C M A K E _ B I N A R Y _ D I R } / S u p e r T u x K a r t - $ { P R O J E C T _ V E R S I O N }
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ S O U R C E _ D I R } )
2011-10-21 20:36:30 -04:00
# ==== Install target ====
MACRO ( installfilemacro filepath )
set ( source_regex "(.*)/data/(.*)" )
set ( svn_regex "(.*).svn(.*)" )
string ( REGEX MATCH "${svn_regex}" is_svn_dir "${curr}" )
if ( is_svn_dir )
# don't install SVN files
else ( )
string ( REGEX MATCH "${source_regex}" source_path "${curr}" )
if ( source_path )
string ( REGEX REPLACE "${source_regex}" "\\2" after_source "${source_path}" )
get_filename_component ( install_location ${ after_source } PATH )
install ( FILES ${ filepath } DESTINATION "share/games/supertuxkart/data/${install_location}" )
endif ( source_path )
endif ( )
ENDMACRO ( installfilemacro )
FILE ( GLOB_RECURSE datafiles "${CMAKE_CURRENT_SOURCE_DIR}/data/*" )
foreach ( curr ${ datafiles } )
installfilemacro ( ${ curr } )
endforeach ( )
2011-10-22 14:20:51 -04:00
install ( TARGETS supertuxkart RUNTIME DESTINATION games BUNDLE DESTINATION . )
2011-10-21 20:36:30 -04:00
install ( FILES data/supertuxkart.desktop DESTINATION share/applications )
install ( FILES data/supertuxkart_32.xpm data/supertuxkart_64.xpm DESTINATION share/pixmaps )
2011-10-20 22:07:12 -04:00
2011-10-21 21:01:22 -04:00
add_custom_target ( GenerateDesktopFile
C O M M A N D s e d ' s \ #PREFIX\#${CMAKE_INSTALL_PREFIX}\#' ${CMAKE_CURRENT_SOURCE_DIR}/data/supertuxkart_desktop.template | sed 's\#VERSION\#${PROJECT_VERSION}\#' > ${CMAKE_CURRENT_SOURCE_DIR}/data/supertuxkart.desktop
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 _ B I N A R Y _ D I R } )
ADD_DEPENDENCIES ( supertuxkart GenerateDesktopFile )