2012-09-29 15:19:23 +00:00
|
|
|
##
|
|
|
|
# Main CMake project file
|
|
|
|
# Contains global options and definitions
|
|
|
|
##
|
2012-04-14 23:02:51 +00:00
|
|
|
|
|
|
|
cmake_minimum_required(VERSION 2.8)
|
|
|
|
|
2012-06-25 17:59:17 +00:00
|
|
|
project(colobot C CXX)
|
2012-04-14 23:02:51 +00:00
|
|
|
|
2012-09-29 15:19:23 +00:00
|
|
|
# Include cmake directory with some additional scripts
|
|
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${colobot_SOURCE_DIR}/cmake")
|
|
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
# Build options
|
|
|
|
##
|
|
|
|
|
|
|
|
# Global build type
|
|
|
|
set(CMAKE_BUILD_TYPE debug)
|
|
|
|
|
|
|
|
# Global compile flags
|
|
|
|
# These are specific to GCC/MinGW; for other compilers, change as necessary
|
|
|
|
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -Wall -Wold-style-cast -std=gnu++0x")
|
|
|
|
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall -Wold-style-cast -std=gnu++0x")
|
|
|
|
|
|
|
|
# Asserts can be enabled/disabled regardless of build type
|
|
|
|
option(ASSERTS "Enable assert()s" ON)
|
|
|
|
|
|
|
|
# Building tests can be enabled/disabled
|
|
|
|
option(TESTS "Enable tests" ON)
|
|
|
|
|
|
|
|
# CBot can also be a static library
|
|
|
|
option(CBOT_STATIC "Build CBot as static libary" OFF)
|
|
|
|
|
|
|
|
|
|
|
|
##
|
2012-06-25 17:59:17 +00:00
|
|
|
# Required packages
|
2012-09-29 15:19:23 +00:00
|
|
|
##
|
|
|
|
|
2012-07-28 21:36:12 +00:00
|
|
|
find_package(OpenGL 1.4 REQUIRED)
|
|
|
|
find_package(SDL 1.2.10 REQUIRED)
|
|
|
|
find_package(SDL_image 1.2 REQUIRED)
|
2012-08-03 21:23:13 +00:00
|
|
|
find_package(SDL_ttf 2.0 REQUIRED)
|
2012-07-28 21:36:12 +00:00
|
|
|
find_package(PNG 1.2 REQUIRED)
|
2012-12-14 14:47:46 +00:00
|
|
|
find_package(LTDL 2.4.2 REQUIRED)
|
2012-06-25 17:59:17 +00:00
|
|
|
|
2012-09-20 21:04:37 +00:00
|
|
|
set(Boost_USE_STATIC_LIBS ON)
|
|
|
|
set(Boost_USE_MULTITHREADED ON)
|
|
|
|
set(Boost_USE_STATIC_RUNTIME OFF)
|
|
|
|
|
|
|
|
set(Boost_ADDITIONALVERSION "1.51" "1.51.0")
|
2012-09-26 22:30:47 +00:00
|
|
|
find_package(Boost COMPONENTS system filesystem regex REQUIRED)
|
2012-09-20 21:04:37 +00:00
|
|
|
|
2012-07-28 21:36:12 +00:00
|
|
|
# GLEW requirement depends on platform
|
|
|
|
# By default it is auto detected
|
|
|
|
# This setting may be used to override
|
|
|
|
# Possible values:
|
|
|
|
# - auto -> determine automatically
|
|
|
|
# - 1 -> always enable
|
|
|
|
# - 0 -> always disable
|
|
|
|
set(USE_GLEW auto)
|
2012-09-29 15:19:23 +00:00
|
|
|
# This is useful on Windows, if linking against standard GLEW dll fails
|
|
|
|
option(GLEW_STATIC "Link statically with GLEW" OFF)
|
2012-06-30 23:37:30 +00:00
|
|
|
|
2012-04-14 23:02:51 +00:00
|
|
|
|
2012-09-29 15:19:23 +00:00
|
|
|
##
|
|
|
|
# Additional settings to use when cross-compiling with MXE (http://mxe.cc/)
|
|
|
|
##
|
|
|
|
|
|
|
|
include("${colobot_SOURCE_DIR}/cmake/mxe.cmake")
|
|
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
# Platform detection and some related checks
|
|
|
|
##
|
|
|
|
|
|
|
|
if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
|
|
|
|
message(STATUS "Windows system detected")
|
|
|
|
set(PLATFORM_WINDOWS 1)
|
|
|
|
set(PLATFORM_LINUX 0)
|
|
|
|
set(PLATFORM_OTHER 0)
|
|
|
|
|
|
|
|
# On Windows, GLEW is required
|
|
|
|
if (${USE_GLEW} MATCHES "auto")
|
|
|
|
set(USE_GLEW 1)
|
|
|
|
endif()
|
|
|
|
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
|
|
|
message(STATUS "Linux system detected")
|
|
|
|
set(PLATFORM_WINDOWS 0)
|
|
|
|
set(PLATFORM_LINUX 1)
|
|
|
|
set(PLATFORM_OTHER 0)
|
|
|
|
|
|
|
|
# On Linux, we should be fine without GLEW
|
|
|
|
if (${USE_GLEW} MATCHES "auto")
|
|
|
|
set(USE_GLEW 0)
|
|
|
|
endif()
|
|
|
|
else()
|
|
|
|
message(STATUS "Other system detected")
|
|
|
|
set(PLATFORM_WINDOWS 0)
|
|
|
|
set(PLATFORM_LINUX 0)
|
|
|
|
set(PLATFORM_OTHER 1)
|
|
|
|
|
|
|
|
# Use GLEW to be safe
|
|
|
|
if (${USE_GLEW} MATCHES "auto")
|
|
|
|
set(USE_GLEW 1)
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
if(${USE_GLEW})
|
|
|
|
find_package(GLEW REQUIRED)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(NOT ${ASSERTS})
|
|
|
|
add_definitions(-DNDEBUG)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(${TESTS})
|
2012-10-11 21:09:29 +00:00
|
|
|
add_definitions(-DTEST_VIRTUAL=virtual)
|
2012-09-29 15:19:23 +00:00
|
|
|
enable_testing()
|
2012-10-11 21:09:29 +00:00
|
|
|
else()
|
|
|
|
add_definitions(-DTEST_VIRTUAL)
|
2012-09-29 15:19:23 +00:00
|
|
|
endif()
|
2012-04-14 23:02:51 +00:00
|
|
|
|
2012-09-08 01:05:12 +00:00
|
|
|
|
2012-09-29 15:19:23 +00:00
|
|
|
##
|
|
|
|
# Targets
|
|
|
|
##
|
2012-09-08 01:05:12 +00:00
|
|
|
|
2012-09-29 15:19:23 +00:00
|
|
|
if(${TESTS})
|
|
|
|
# Google Test library
|
2012-12-16 12:22:58 +00:00
|
|
|
find_path(GTEST_SRC_DIR NAMES src/gtest.cc src/gtest-all.cc PATHS /usr/src PATH_SUFFIXES gtest)
|
|
|
|
find_path(GTEST_INCLUDE_DIR gtest/gtest.h PATHS /usr/include)
|
|
|
|
if(GTEST_SRC_DIR AND GTEST_INCLUDE_DIR)
|
|
|
|
message(STATUS "Using system gtest library in ${GTEST_SRC_DIR}")
|
2012-12-14 20:42:43 +00:00
|
|
|
else()
|
2012-12-16 12:22:58 +00:00
|
|
|
message(STATUS "Using bundled gtest library")
|
|
|
|
set(GTEST_SRC_DIR ${colobot_SOURCE_DIR}/lib/gtest)
|
|
|
|
set(GTEST_INCLUDE_DIR ${colobot_SOURCE_DIR}/lib/gtest/include)
|
2012-12-14 20:42:43 +00:00
|
|
|
endif()
|
2012-12-16 12:22:58 +00:00
|
|
|
|
|
|
|
add_subdirectory(${GTEST_SRC_DIR} bin/gtest)
|
|
|
|
|
|
|
|
# Google Mock library
|
|
|
|
find_path(GMOCK_SRC_DIR NAMES src/gmock.cc src/gmock-all.cc PATHS /usr/src PATH_SUFFIXES gmock)
|
|
|
|
find_path(GMOCK_INCLUDE_DIR gmock/gmock.h PATHS /usr/include)
|
|
|
|
if(GMOCK_SRC_DIR AND GMOCK_INCLUDE_DIR)
|
|
|
|
message(STATUS "Using system gmock library in ${GMOCK_SRC_DIR}")
|
2012-12-16 16:20:34 +00:00
|
|
|
|
|
|
|
include_directories(${GMOCK_SRC_DIR})
|
|
|
|
# gmock-all.cc includes all other sources
|
|
|
|
add_library(gmock STATIC ${GMOCK_SRC_DIR}/src/gmock-all.cc)
|
2012-12-16 12:22:58 +00:00
|
|
|
else()
|
|
|
|
message(STATUS "Using bundled gmock library")
|
|
|
|
set(GMOCK_SRC_DIR ${colobot_SOURCE_DIR}/lib/gmock)
|
|
|
|
set(GMOCK_INCLUDE_DIR ${colobot_SOURCE_DIR}/lib/gmock/include)
|
2012-12-16 16:20:34 +00:00
|
|
|
add_subdirectory(${GMOCK_SRC_DIR} bin/gmock)
|
2012-12-16 12:22:58 +00:00
|
|
|
endif()
|
|
|
|
|
2012-09-29 15:19:23 +00:00
|
|
|
endif()
|
2012-07-28 21:36:12 +00:00
|
|
|
|
2012-12-17 09:11:56 +00:00
|
|
|
# TODO: provide data files as git submodule
|
|
|
|
set(COLOBOT_DATA_DIR ${CMAKE_INSTALL_PREFIX}/share/games/colobot CACHE PATH "Colobot shared data directory")
|
|
|
|
set(COLOBOT_LIB_DIR ${CMAKE_INSTALL_PREFIX}/lib/colobot CACHE PATH "Colobot libraries directory")
|
|
|
|
|
2012-06-25 17:59:17 +00:00
|
|
|
# Subdirectory with sources
|
2012-08-12 17:22:43 +00:00
|
|
|
add_subdirectory(src bin)
|
2012-10-05 20:07:58 +00:00
|
|
|
|
2012-12-16 20:29:13 +00:00
|
|
|
install(DIRECTORY ../data DESTINATION ${COLOBOT_DATA_DIR})
|
2012-12-17 17:38:36 +00:00
|
|
|
|
|
|
|
# Build and install documentation
|
|
|
|
set(COLOBOT_DOC_DIR ${CMAKE_INSTALL_PREFIX}/share/doc/colobot CACHE PATH "Colobot documentation directory")
|
|
|
|
|
|
|
|
find_package(Doxygen)
|
|
|
|
if(DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
|
|
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
|
|
|
|
add_custom_target(doc
|
|
|
|
${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
|
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
|
|
COMMENT "Generating API documentation with Doxygen" VERBATIM )
|
|
|
|
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/ DESTINATION ${COLOBOT_DOC_DIR} OPTIONAL)
|
|
|
|
endif(DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
|