CMakeTemplate/template.cmake
2016-03-20 22:04:52 +01:00

334 lines
8.0 KiB
CMake

# Variable that you need to define to use this template
# USE_SFML, USE_RENDERER, USE_INPUT, USE_BULLET, USE_OPENGL, USE_QT5
#
# Container for list of file to be compiled :
# LIB_SRC_LIST, LIB_HEAD_LIST, EXEC_SRC_LIST, EXEC_HEAD_LIST
#
# If you want to specify a supplementary folder for include, use :
# EXTRA_INCLUDE_PATHS
cmake_minimum_required(VERSION 2.8)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
configure_file (
"../cmaketemplate/SparrowConfig.h.in"
"${PROJECT_BINARY_DIR}/Version.h"
)
#detect system and version
if(WIN32)
set(LIB_DEBUG_FOLDER "libDebug/mingw32")
set(LIB_RELEASE_FOLDER "libRelease/mingw32")
elseif(UNIX)
if(${CMAKE_SYSTEM_VERSION} MATCHES "i686")
set(LIB_DEBUG_FOLDER "libDebug/i686")
set(LIB_RELEASE_FOLDER "libRelease/i686")
elseif(${CMAKE_SYSTEM_VERSION} MATCHES "x86_64")
set(LIB_DEBUG_FOLDER "libDebug/x86_64")
set(LIB_RELEASE_FOLDER "libRelease/x86_64")
endif()
endif()
#set dependencies paths
set(DEPENDENCIES_ROOT ${PROJECT_SOURCE_DIR}/../cpp_dependencies)
set(INCLUDE_ROOT ${DEPENDENCIES_ROOT}/include)
set(LIB_DEBUG_PATH ${DEPENDENCIES_ROOT}/${LIB_DEBUG_FOLDER})
set(LIB_RELEASE_PATH ${DEPENDENCIES_ROOT}/${LIB_RELEASE_FOLDER})
if(${CMAKE_BUILD_TYPE} MATCHES "Debug")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIB_DEBUG_PATH}) #for STATIC
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIB_DEBUG_PATH}) #for SHARED
list(APPEND LIB_PATHS ${LIB_DEBUG_PATH})
list(APPEND LIB_PATHS "\n" ${LIB_RELEASE_PATH})
else()
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIB_RELEASE_PATH}) #for STATIC
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIB_RELEASE_PATH}) #for SHARED
list(APPEND LIB_PATHS ${LIB_RELEASE_PATH})
endif()
#create library and executable
if(LIB_SRC_LIST)
set(IS_LIBRARY True)
set(LIBRARY_NAME ${PROJECT_NAME})
add_library(${LIBRARY_NAME} STATIC ${LIB_SRC_LIST} ${RESOURCES_FILES})
if(EXEC_SRC_LIST)
set(EXECUTABLE_NAME "test${PROJECT_NAME}")
add_executable(${EXECUTABLE_NAME} ${EXEC_SRC_LIST} ${RESOURCES_FILES})
endif()
elseif(EXEC_SRC_LIST)
set(EXECUTABLE_NAME "${PROJECT_NAME}")
add_executable(${EXECUTABLE_NAME} ${EXEC_SRC_LIST} ${RESOURCES_FILES})
else()
message(WARNING "NO SOURCE FILE PROVIDED")
endif()
add_definitions(-std=c++11)
#find libraries
set(LIB_DEPENDENCIES_LIST "")
set(INCLUDE_PATHS ${INCLUDE_ROOT})
# not used for now
# foreach(EXTENSION ${INCLUDE_PATHS_EXTENSION})
# LIST(APPEND INCLUDE_PATHS ${INCLUDE_ROOT}${EXTENSION} " ")
# endforeach()
if(USE_ENGINE)
find_library(SPARROW_ENGINE_LIBRARY
NAMES
SparrowEngine
PATHS
${LIB_PATHS}
)
set(USE_RENDERER True)
set(USE_INPUT True)
set(USE_BULLET True)
LIST(APPEND INCLUDE_PATHS "\n" ${PROJECT_SOURCE_DIR}/../sparrowengine/src)
LIST(APPEND LIB_DEPENDENCIES_LIST ${SPARROW_ENGINE_LIBRARY})
endif()
if(USE_RENDERER)
find_library(SPARROW_RENDERER_LIBRARY
NAMES
SparrowRenderer
PATHS
${LIB_PATHS}
)
add_definitions(-DGLEW_STATIC)
set(USE_OPENGL True)
LIST(APPEND INCLUDE_PATHS "\n" ${PROJECT_SOURCE_DIR}/../sparrowrenderer/src)
LIST(APPEND LIB_DEPENDENCIES_LIST ${SPARROW_RENDERER_LIBRARY})
endif()
if(USE_INPUT)
find_library(SPARROW_INPUT_LIBRARY
NAMES
SparrowInput
PATHS
${LIB_PATHS}
)
set(USE_SFML True)
LIST(APPEND INCLUDE_PATHS "\n" ${PROJECT_SOURCE_DIR}/../sparrowinput/src)
LIST(APPEND INCLUDE_PATHS "\n" ${PROJECT_SOURCE_DIR}/../SparrowInput/src)
LIST(APPEND LIB_DEPENDENCIES_LIST ${SPARROW_INPUT_LIBRARY})
endif()
if(USE_SFML)
find_library(SFML_LIBRARY_WINDOW
NAMES
sfml-window
PATHS
${LIB_PATHS}
)
find_library(SFML_LIBRARY_SYSTEM
NAMES
sfml-system
PATHS
${LIB_PATHS}
)
find_library(SFML_LIBRARY_AUDIO
NAMES
sfml-audio
PATHS
${LIB_PATHS}
)
find_library(SFML_LIBRARY_GRAPHICS
NAMES
sfml-graphics
PATHS
${LIB_PATHS}
)
set(USE_OPENGL True)
add_definitions(-DSFML_STATIC)
find_library(SFML_DEP_FREETYPE
NAMES freetype
PATHS ${LIB_PATHS}
)
find_library(SFML_DEP_JPEG
NAMES jpeg
PATHS ${LIB_PATHS}
)
find_library(SFML_DEP_OPENAL
NAMES openal openal32
PATHS ${LIB_PATHS}
)
find_library(SFML_DEP_FLAC
NAMES flac FLAC
PATHS ${LIB_PATHS}
)
find_library(SFML_DEP_VORBISENC
NAMES vorbisenc
PATHS ${LIB_PATHS}
)
find_library(SFML_DEP_VORBISFILE
NAMES vorbisfile
PATHS ${LIB_PATHS}
)
find_library(SFML_DEP_VORBIS
NAMES vorbis
PATHS ${LIB_PATHS}
)
find_library(SFML_DEP_OGG
NAMES ogg
PATHS ${LIB_PATHS}
)
if(WIN32)
find_library(SFML_DEP_WINMM
NAMES winmm
PATHS ${LIB_PATHS}
)
find_library(SFML_DEP_GDI
NAMES gdi32
PATHS ${LIB_PATHS}
)
SET(SFML_DEPENDENCIES
${SFML_DEP_WINMM}
${SFML_DEP_GDI}
${SFML_DEP_FREETYPE}
${SFML_DEP_JPEG}
${SFML_DEP_OPENAL}
${SFML_DEP_FLAC}
${SFML_DEP_VORBISENC}
${SFML_DEP_VORBISFILE}
${SFML_DEP_VORBIS}
${SFML_DEP_OGG}
)
elseif(UNIX)
SET(SFML_DEPENDENCIES
${SFML_DEP_FREETYPE}
${SFML_DEP_JPEG}
${SFML_DEP_OPENAL}
${SFML_DEP_FLAC}
${SFML_DEP_VORBISENC}
${SFML_DEP_VORBISFILE}
${SFML_DEP_VORBIS}
${SFML_DEP_OGG}
)
endif()
LIST(APPEND LIB_DEPENDENCIES_LIST
${SFML_LIBRARY_WINDOW}
${SFML_LIBRARY_GRAPHICS}
${SFML_LIBRARY_SYSTEM}
${SFML_LIBRARY_AUDIO}
${SFML_DEPENDENCIES}) # order is VERY important
endif()
if(USE_BULLET)
find_library(BULLET_COLLISION_LIBRARY
NAMES
BulletCollision
PATHS
${LIB_PATHS}
)
find_library(BULLET_DYNAMICS_LIBRARY
NAMES
BulletDynamics
PATHS
${LIB_PATHS}
)
find_library(LINEAR_MATH_LIBRARY
NAMES
LinearMath
PATHS
${LIB_PATHS}
)
LIST(APPEND LIB_DEPENDENCIES_LIST ${BULLET_DYNAMICS_LIBRARY} ${BULLET_COLLISION_LIBRARY} ${LINEAR_MATH_LIBRARY})
LIST(APPEND INCLUDE_PATHS "\n" ${INCLUDE_ROOT}/bullet)
endif()
if(USE_OPENGL)
find_package(OpenGL REQUIRED)
if(OPENGL_FOUND)
LIST(APPEND LIB_DEPENDENCIES_LIST ${OPENGL_LIBRARIES})
endif()
endif()
# TODO: Complete QT5
if(USE_QT5)
if(${QT_MODULE} MATCHES "core")
find_package(Qt5Core REQUIRED)
if(QT5CORE_FOUND)
LIST(APPEND LIB_DEPENDENCIES_LIST ${Qt5Core_LIBRARIES})
add_definitions(${Qt5Core_DEFINITIONS})
LIST(APPEND INCLUDES_PATHS "\n" ${Qt5Core_INCLUDES})
endif()
endif()
if(${QT_MODULE} MATCHES "gui")
find_package(Qt5Gui REQUIRED)
if(QT5GUI_FOUND)
LIST(APPEND LIB_DEPENDENCIES_LIST ${Qt5Gui_LIBRARIES})
add_definitions(${Qt5Gui_DEFINITIONS})
LIST(APPEND INCLUDES_PATHS "\n" ${Qt5Gui_INCLUDES})
endif()
endif()
if(${QT_MODULE} MATCHES "opengl")
find_package(Qt5OpenGL REQUIRED)
if(QT5OPENGL_FOUND)
LIST(APPEND LIB_DEPENDENCIES_LIST ${Qt5OpenGL_LIBRARIES})
add_definitions(${Qt5OpenGL_DEFINITIONS})
LIST(APPEND INCLUDE_PATHS "\n" ${Qt5OpenGL_INCLUDES})
endif()
endif()
if(${QT_MODULE} MATCHES "widgets")
find_package(Qt5Widgets REQUIRED)
if(QT5WIDGETS_FOUND)
LIST(APPEND LIB_DEPENDENCIES_LIST ${Qt5Widgets_LIBRARIES})
add_definitions(${Qt5Widgets_DEFINITIONS})
LIST(APPEND INCLUDE_PATHS "\n" ${Qt5Widgets_INCLUDES})
endif()
endif()
if(${QT_MODULE} MATCHES "network")
find_package(Qt5Network REQUIRED)
if(QT5NETWORK_FOUND)
LIST(APPEND LIB_DEPENDENCIES_LIST ${Qt5Network_LIBRARIES})
add_definitions(${Qt5Network_DEFINITIONS})
LIST(APPEND INCLUDES_PATHS "\n" ${Qt5Network_INCLUDES})
endif()
endif()
endif()
include_directories(
${INCLUDE_PATHS}
${EXTRA_INCLUDE}
)
if(LIB_SRC_LIST)
target_link_libraries(
${LIBRARY_NAME}
${LIB_DEPENDENCIES_LIST}
)
if(EXEC_SRC_LIST)
target_link_libraries(
${EXECUTABLE_NAME}
${LIBRARY_NAME}
)
endif()
elseif(EXEC_SRC_LIST)
target_link_libraries(
${EXECUTABLE_NAME}
${LIB_DEPENDENCIES_LIST}
)
endif()