463 lines
11 KiB
CMake
463 lines
11 KiB
CMake
# Variable that you can define to add automatic dependencies
|
|
# USE_SFML, USE_RENDERER, USE_INPUT, USE_SERIALIZER, USE_LUA, USE_SOL2, 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_INCLUDES
|
|
|
|
cmake_minimum_required(VERSION 3.1)
|
|
cmake_policy(VERSION 3.1)
|
|
#cmake_policy(SET CMP0020 NEW)
|
|
|
|
set(CMAKE_AUTOMOC ON)
|
|
set(CMAKE_AUTOUIC ON)
|
|
set(CMAKE_AUTORCC ON)
|
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
|
|
if(NOT CMAKE_TEMPLATE_PATH)
|
|
MESSAGE(WARNING "CMAKE_TEMPLATE_PATH not set. Using default value \"../cmaketemplate\"...")
|
|
SET(CMAKE_TEMPLATE_PATH "../CMakeTemplate")
|
|
endif()
|
|
|
|
include(${CMAKE_TEMPLATE_PATH}/resource.cmake)
|
|
|
|
configure_file (
|
|
"${CMAKE_TEMPLATE_PATH}/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 ${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})
|
|
|
|
add_definitions(-static-libgcc -static-libstdc++)
|
|
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}")
|
|
set(LIBRARY_NAME "")
|
|
add_executable(${EXECUTABLE_NAME} ${EXEC_SRC_LIST} ${RESOURCES_FILES})
|
|
else()
|
|
message(WARNING "NO SOURCE FILE PROVIDED")
|
|
endif()
|
|
|
|
add_definitions(-std=c++14)
|
|
add_definitions(-Wreorder)
|
|
add_definitions(-Wparentheses)
|
|
add_definitions(-Wsign-compare)
|
|
add_definitions(-Wunused-variable)
|
|
add_definitions(-pedantic-errors)
|
|
|
|
#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_SOL2)
|
|
set(USE_LUA True)
|
|
LIST(APPEND INCLUDE_PATHS ${INCLUDE_ROOT}/sol2)
|
|
MESSAGE(STATUS "using sol2 headers")
|
|
endif()
|
|
|
|
if(USE_LUA)
|
|
find_library(LUA_LIBRARY
|
|
NAMES luajit-5.1 luajit
|
|
PATHS ${LIB_PATHS}
|
|
)
|
|
|
|
MESSAGE(STATUS "using lua lib")
|
|
|
|
add_definitions(-llua)
|
|
|
|
LIST(APPEND INCLUDE_PATHS ${INCLUDE_ROOT}/luajit-2.0)
|
|
LIST(APPEND INCLUDE_PATHS ${INCLUDE_ROOT}/luajit)
|
|
LIST(APPEND LIB_DEPENDENCIES_LIST ${LUA_LIBRARY})
|
|
|
|
endif()
|
|
|
|
if(USE_SERIALIZER)
|
|
find_library(SPARROW_SERIALIZER_LIBRARY
|
|
NAMES
|
|
SparrowSerializer
|
|
PATHS
|
|
${LIB_PATHS}
|
|
)
|
|
|
|
# LIST(APPEND INCLUDE_PATHS ${PROJECT_SOURCE_DIR}/../SparrowSerializer/src)
|
|
LIST(APPEND LIB_DEPENDENCIES_LIST ${SPARROW_SERIALIZER_LIBRARY})
|
|
endif()
|
|
|
|
if(USE_IMGUI)
|
|
find_library(IMGUI_LIBRARY
|
|
NAMES
|
|
imgui
|
|
PATHS
|
|
${LIB_PATHS}
|
|
)
|
|
|
|
LIST(APPEND LIB_DEPENDENCIES_LIST ${IMGUI_LIBRARY})
|
|
endif()
|
|
|
|
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)
|
|
|
|
# window and system are already requested by sparrowInput
|
|
LIST(APPEND SFML_MODULES graphics audio)
|
|
|
|
# LIST(APPEND INCLUDE_PATHS ${PROJECT_SOURCE_DIR}/../SparrowEngine/src)
|
|
LIST(APPEND LIB_DEPENDENCIES_LIST ${SPARROW_ENGINE_LIBRARY})
|
|
endif()
|
|
|
|
if(USE_INPUT)
|
|
find_library(SPARROW_INPUT_LIBRARY
|
|
NAMES
|
|
SparrowInput
|
|
PATHS
|
|
${LIB_PATHS}
|
|
)
|
|
|
|
LIST(APPEND SFML_MODULES window system)
|
|
|
|
# LIST(APPEND INCLUDE_PATHS ${PROJECT_SOURCE_DIR}/../SparrowInput/src)
|
|
LIST(APPEND LIB_DEPENDENCIES_LIST ${SPARROW_INPUT_LIBRARY})
|
|
endif()
|
|
|
|
if(SFML_MODULES)
|
|
add_definitions(-DSFML_STATIC)
|
|
|
|
LIST(FIND SFML_MODULES "graphics" USE_SFML_GRAPHICS)
|
|
LIST(FIND SFML_MODULES "window" USE_SFML_WINDOW)
|
|
LIST(FIND SFML_MODULES "audio" USE_SFML_AUDIO)
|
|
LIST(FIND SFML_MODULES "network" USE_SFML_NETWORK)
|
|
LIST(FIND SFML_MODULES "system" USE_SFML_SYSTEM)
|
|
|
|
if(${USE_SFML_GRAPHICS} GREATER -1)
|
|
set(USE_SFML_WINDOW 1)
|
|
set(USE_SFML_SYSTEM 1)
|
|
|
|
find_library(SFML_LIBRARY_GRAPHICS
|
|
NAMES sfml-graphics
|
|
PATHS ${LIB_PATHS}
|
|
)
|
|
find_library(SFML_DEP_FREETYPE
|
|
NAMES freetype
|
|
PATHS ${LIB_PATHS}
|
|
)
|
|
find_library(SFML_DEP_JPEG
|
|
NAMES jpeg
|
|
PATHS ${LIB_PATHS}
|
|
)
|
|
|
|
LIST(APPEND LIB_SFML_LIST
|
|
${SFML_LIBRARY_GRAPHICS}
|
|
${SFML_DEP_FREETYPE}
|
|
${SFML_DEP_JPEG}
|
|
)
|
|
MESSAGE(STATUS "using SFML graphics")
|
|
endif()
|
|
|
|
if(${USE_SFML_WINDOW} GREATER -1)
|
|
set(USE_SFML_SYSTEM 1)
|
|
set(USE_OPENGL True)
|
|
|
|
find_library(SFML_LIBRARY_WINDOW
|
|
NAMES sfml-window
|
|
PATHS ${LIB_PATHS}
|
|
)
|
|
|
|
if(WIN32)
|
|
LIST(APPEND LIB_SFML_LIST ${SFML_LIBRARY_WINDOW} gdi32)
|
|
elseif(UNIX)
|
|
LIST(APPEND LIB_SFML_LIST ${SFML_LIBRARY_WINDOW} pthread X11 Xrandr udev)
|
|
endif()
|
|
MESSAGE(STATUS "using SFML window")
|
|
endif()
|
|
|
|
if(${USE_SFML_AUDIO} GREATER -1)
|
|
set(USE_SFML_SYSTEM 1)
|
|
|
|
find_library(SFML_LIBRARY_AUDIO
|
|
NAMES sfml-audio
|
|
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}
|
|
)
|
|
|
|
LIST(APPEND LIB_SFML_LIST
|
|
${SFML_LIBRARY_AUDIO}
|
|
${SFML_DEP_OPENAL}
|
|
${SFML_DEP_FLAC}
|
|
${SFML_DEP_VORBISENC}
|
|
${SFML_DEP_VORBISFILE}
|
|
${SFML_DEP_VORBIS}
|
|
${SFML_DEP_OGG}
|
|
)
|
|
MESSAGE(STATUS "using SFML audio")
|
|
endif()
|
|
|
|
if(${USE_SFML_NETWORK} GREATER -1)
|
|
set(USE_SFML_SYSTEM 1)
|
|
|
|
find_library(SFML_LIBRARY_NETWORK
|
|
NAMES sfml-network
|
|
PATHS ${LIB_PATHS}
|
|
)
|
|
|
|
if(WIN32)
|
|
find_library(SFML_DEP_WINSOCK
|
|
NAMES ws2_32
|
|
PATHS ${LIB_PATHS}
|
|
)
|
|
LIST(APPEND LIB_SFML_LIST ${SFML_LIBRARY_NETWORK} ${SFML_DEP_WINSOCK})
|
|
elseif(UNIX)
|
|
LIST(APPEND LIB_SFML_LIST ${SFML_LIBRARY_NETWORK})
|
|
endif()
|
|
MESSAGE(STATUS "using SFML network")
|
|
endif()
|
|
|
|
if(${USE_SFML_SYSTEM} GREATER -1)
|
|
find_library(SFML_LIBRARY_SYSTEM
|
|
NAMES sfml-system
|
|
PATHS ${LIB_PATHS}
|
|
)
|
|
|
|
if(WIN32)
|
|
LIST(APPEND LIB_SFML_LIST ${SFML_LIBRARY_SYSTEM} winmm)
|
|
elseif(UNIX)
|
|
LIST(APPEND LIB_SFML_LIST ${SFML_LIBRARY_SYSTEM})
|
|
endif()
|
|
MESSAGE(STATUS "using SFML system")
|
|
endif()
|
|
|
|
LIST(APPEND LIB_DEPENDENCIES_LIST ${LIB_SFML_LIST})
|
|
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 ${INCLUDE_ROOT}/bullet)
|
|
endif()
|
|
|
|
if(QT_MODULE)
|
|
MESSAGE(STATUS "using QT5 modules : ${QT_MODULE}")
|
|
if(";${QT_MODULE};" MATCHES ";core;")
|
|
find_package(Qt5Core REQUIRED)
|
|
if(Qt5Core_FOUND)
|
|
MESSAGE(STATUS "found QT core")
|
|
LIST(APPEND LIB_DEPENDENCIES_LIST ${Qt5Core_LIBRARIES})
|
|
add_definitions(${Qt5Core_DEFINITIONS})
|
|
LIST(APPEND INCLUDES_PATHS ${Qt5Core_INCLUDES})
|
|
endif()
|
|
endif()
|
|
if(";${QT_MODULE};" MATCHES ";gui;")
|
|
find_package(Qt5Gui REQUIRED)
|
|
if(Qt5Gui_FOUND)
|
|
MESSAGE(STATUS "found QT gui")
|
|
LIST(APPEND LIB_DEPENDENCIES_LIST ${Qt5Gui_LIBRARIES})
|
|
add_definitions(${Qt5Gui_DEFINITIONS})
|
|
LIST(APPEND INCLUDES_PATHS ${Qt5Gui_INCLUDES})
|
|
endif()
|
|
endif()
|
|
if(";${QT_MODULE};" MATCHES ";opengl;")
|
|
find_package(Qt5OpenGL REQUIRED)
|
|
if(Qt5OpenGL_FOUND)
|
|
MESSAGE(STATUS "found QT opengl")
|
|
LIST(APPEND LIB_DEPENDENCIES_LIST ${Qt5OpenGL_LIBRARIES})
|
|
add_definitions(${Qt5OpenGL_DEFINITIONS})
|
|
LIST(APPEND INCLUDE_PATHS ${Qt5OpenGL_INCLUDES})
|
|
endif()
|
|
endif()
|
|
if(";${QT_MODULE};" MATCHES ";widgets;")
|
|
find_package(Qt5Widgets REQUIRED)
|
|
if(Qt5Widgets_FOUND)
|
|
MESSAGE(STATUS "found QT widgets")
|
|
LIST(APPEND LIB_DEPENDENCIES_LIST ${Qt5Widgets_LIBRARIES})
|
|
add_definitions(${Qt5Widgets_DEFINITIONS})
|
|
LIST(APPEND INCLUDE_PATHS ${Qt5Widgets_INCLUDES})
|
|
endif()
|
|
endif()
|
|
if(";${QT_MODULE};" MATCHES ";network;")
|
|
find_package(Qt5Network REQUIRED)
|
|
if(Qt5Network_FOUND)
|
|
MESSAGE(STATUS "found QT network")
|
|
LIST(APPEND LIB_DEPENDENCIES_LIST ${Qt5Network_LIBRARIES} -lssleay32 -leay32)
|
|
# LIST(APPEND LIB_DEPENDENCIES_LIST ${Qt5Network_LIBRARIES})
|
|
add_definitions(${Qt5Network_DEFINITIONS})
|
|
LIST(APPEND INCLUDES_PATHS ${Qt5Network_INCLUDES})
|
|
endif()
|
|
endif()
|
|
if(";${QT_MODULE};" MATCHES ";websockets;")
|
|
find_package(Qt5WebSockets REQUIRED)
|
|
if(Qt5WebSockets_FOUND)
|
|
MESSAGE(STATUS "found QT websockets")
|
|
LIST(APPEND LIB_DEPENDENCIES_LIST ${Qt5WebSockets_LIBRARIES})
|
|
LIST(APPEND INCLUDE_PATHS ${Qt5WebSockets_INCLUDES})
|
|
endif()
|
|
endif()
|
|
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 ${PROJECT_SOURCE_DIR}/../SparrowRenderer/src)
|
|
if(UNIX)
|
|
LIST(APPEND LIB_DEPENDENCIES_LIST ${SPARROW_RENDERER_LIBRARY} dl)
|
|
else()
|
|
LIST(APPEND LIB_DEPENDENCIES_LIST ${SPARROW_RENDERER_LIBRARY})
|
|
endif()
|
|
endif()
|
|
|
|
if(USE_OPENGL)
|
|
find_package(OpenGL REQUIRED)
|
|
if(OPENGL_FOUND)
|
|
LIST(APPEND LIB_DEPENDENCIES_LIST ${OPENGL_LIBRARIES})
|
|
endif()
|
|
endif()
|
|
|
|
include_directories(
|
|
${INCLUDE_PATHS}
|
|
${EXTRA_INCLUDES}
|
|
)
|
|
|
|
MACRO(INSTALL_HEADERS_WITH_DIRECTORY HEADER_LIST)
|
|
set(INSTALL_DESTINATION include/${LIBRARY_NAME})
|
|
FOREACH(HEADER ${${HEADER_LIST}})
|
|
file(RELATIVE_PATH HEADER ${PROJECT_SOURCE_DIR} ${HEADER})
|
|
STRING(REGEX MATCH "(.\*)\[/\]" DIR ${HEADER})
|
|
STRING(SUBSTRING ${DIR} 4 -1 DIR)
|
|
INSTALL(FILES ${HEADER} DESTINATION ${INSTALL_DESTINATION}/${DIR})
|
|
ENDFOREACH(HEADER)
|
|
INSTALL(FILES "${PROJECT_BINARY_DIR}/Version.h" DESTINATION ${INSTALL_DESTINATION})
|
|
ENDMACRO(INSTALL_HEADERS_WITH_DIRECTORY)
|
|
|
|
#make rule for installing header
|
|
set(CMAKE_INSTALL_PREFIX ${DEPENDENCIES_ROOT})
|
|
INSTALL_HEADERS_WITH_DIRECTORY(LIB_HEAD_LIST)
|
|
|
|
if(UNIX)
|
|
# -ldl seems to be required for linux executables
|
|
LIST(APPEND LIB_DEPENDENCIES_LIST dl)
|
|
endif()
|
|
|
|
if(LIB_SRC_LIST)
|
|
target_link_libraries(
|
|
${LIBRARY_NAME}
|
|
${LIB_DEPENDENCIES_LIST}
|
|
)
|
|
endif()
|
|
if(EXEC_SRC_LIST)
|
|
target_link_libraries(
|
|
${EXECUTABLE_NAME}
|
|
${LIBRARY_NAME}
|
|
${LIB_DEPENDENCIES_LIST}
|
|
)
|
|
endif()
|