cmake_minimum_required(VERSION 2.8) # on / off for verbose build. set(CMAKE_VERBOSE_MAKEFILE off) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED True) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMake") include(cotire) # Project Information. project(V-Gears) set(CMAKE_PACKAGE_ICON v-gears.png) set(VGears_VERSION__MAJOR 0) set(VGears_VERSION__MINOR 1) set(VGears_VERSION__PATCH 0) set(VGears_VERSION ${VGears_VERSION__MAJOR}.${VGears_VERSION__MINOR}.${VGears_VERSION__PATCH}) # Generate version header. configure_file(${CMAKE_CURRENT_SOURCE_DIR}/V-Gears/include/Version.h.in ${CMAKE_CURRENT_SOURCE_DIR}/V-Gears/include/Version.h) if ("${CMAKE_BUILD_TYPE}" STREQUAL "") # CMake defaults to leaving CMAKE_BUILD_TYPE empty. This screws up # differentiation between debug and release builds. set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: None (CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." FORCE) message("CMAKE_BUILD_TYPE was empty defaulting to Release") endif() message("CMAKE_BUILD_TYPE is ${CMAKE_BUILD_TYPE} CMAKE_BINARY_DIR is ${CMAKE_BINARY_DIR}") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/bin) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/bin) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/bin) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/bin_debug) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/bin_debug) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/bin_debug) # Enable Visual Studio solution "folders". SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON) #if (APPLE) #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32") #set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m32") #endif() set(CMAKE_FRAMEWORK_PATH ${CMAKE_FRAMEWORK_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/OgreSDK/lib/macosx/Release ${CMAKE_CURRENT_SOURCE_DIR}/OgreSDK/lib/macosx/Debug ) set(OGRE_FRAMEWORK_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/OgreSDK/include ) option(VGears_BUILD_PLUGINS "Build the plugins" TRUE) option(VGears_BUILD_UTILITIES "Build the V-Gears-Installer" TRUE) option(VGears_BUILD_TESTS "Build the unit tests" FALSE) option(VGears_MULTITHREADING "Enable multithreading" FALSE) option(VGears_SOUND "Enable Sound" TRUE) find_path(OGRE_CMAKE_MODULE_PATH FindOGRE.cmake HINTS "$ENV{OGRE_HOME}/CMake/" "/usr/local/lib/OGRE/cmake" "/usr/lib/OGRE/cmake" "/usr/share/OGRE/cmake/modules" "${CMAKE_CURRENT_SOURCE_DIR}/OgreSDK/CMake" ) if(OGRE_CMAKE_MODULE_PATH-NOTFOUND) message(SEND_ERROR "Failed to find OGRE module path.") else() set(CMAKE_MODULE_PATH "${OGRE_CMAKE_MODULE_PATH};${CMAKE_MODULE_PATH}") endif() set(VGears_SOURCE_DIR ${CMAKE_SOURCE_DIR}) message("VGears_SOURCE_DIR ${VGears_SOURCE_DIR}") set(CMAKE_MODULE_PATH "${OGRE_CMAKE_MODULE_PATH};${CMAKE_MODULE_PATH}") set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${CMAKE_SOURCE_DIR}/CMake" ) set(CMAKE_DEBUG_POSTFIX "_d") if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set(CMAKE_INSTALL_PREFIX "${VGears_SOURCE_DIR}/data" CACHE PATH "V-Gears install prefix" FORCE ) endif() find_package(Qt5Widgets REQUIRED) find_package(ZLIB REQUIRED) find_package(OGRE REQUIRED) # Find Boost if(NOT OGRE_BUILD_PLATFORM_IPHONE) if(WIN32) set(Boost_USE_STATIC_LIBS TRUE) else() # Statically linking boost to a dynamic Ogre build doesn't work on Linux 64bit set(Boost_USE_STATIC_LIBS ${OGRE_STATIC}) endif () if(MINGW) # This is probably a bug in CMake: the boost find module tries to look for # boost libraries with name libboost_*, but CMake already prefixes library # search names with "lib". This is the workaround. set(CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES} "") endif () set(Boost_ADDITIONAL_VERSIONS "1.55" "1.55.0" "1.53" "1.53.0" "1.52" "1.52.0" "1.51" "1.51.0" "1.50" "1.50.0" "1.49" "1.49.0" "1.48" "1.48.0" "1.47" "1.47.0" "1.46" "1.46.0" "1.45" "1.45.0" "1.44" "1.44.0" "1.42" "1.42.0" "1.41.0" "1.41" "1.40.0" "1.40") # Components that need linking (NB does not include header-only components like bind) set(OGRE_BOOST_COMPONENTS thread date_time) find_package(Boost COMPONENTS ${OGRE_BOOST_COMPONENTS} QUIET) if (NOT Boost_FOUND) set(Boost_USE_STATIC_LIBS NOT ${Boost_USE_STATIC_LIBS}) find_package(Boost COMPONENTS ${OGRE_BOOST_COMPONENTS} QUIET) endif() if(Boost_FOUND AND Boost_VERSION GREATER 104900) set(OGRE_BOOST_COMPONENTS thread date_time system chrono) find_package(Boost COMPONENTS ${OGRE_BOOST_COMPONENTS} QUIET) endif() # Set up referencing of Boost include_directories(${Boost_INCLUDE_DIR}) if (NOT APPLE) add_definitions(-DBOOST_ALL_NO_LIB) endif() set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${Boost_LIBRARIES}) find_package(Boost COMPONENTS program_options filesystem QUIET) set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${Boost_LIBRARIES}) set(VGears_LIBRARIES ${OGRE_LIBRARIES}) if(VGears_SOUND) find_package(OpenAL REQUIRED) find_package(OggVorbis REQUIRED) add_definitions(-DVGears_SOUND) set(VGears_LIBRARIES ${VGears_LIBRARIES} ${OPENAL_LIBRARY} ${OGGVORBIS_LIBRARIES} ) endif() if(VGears_MULTITHREADING) # Find Threads find_package (Threads REQUIRED) set(VGears_LIBRARIES ${VGears_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ) endif() if(VGears_BUILD_TESTS) #message(STATUS "Looking for boost unit test..") find_package(Boost COMPONENTS unit_test_framework REQUIRED) set(VGears_TEST_LIBRARIES ${OGRE_LIBRARIES} ${Boost_LIBRARIES} ) # Enable CTest. enable_testing() endif() endif() set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${OGRE_Overlay_LIBRARIES}) find_package(Boost COMPONENTS unit_test_framework REQUIRED) if (Boost_LIBRARIES STREQUAL "") message(SEND_ERROR "Boost_LIBRARIES is not set") endif() set(VGears_INCLUDE_DIRS ${VGears_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/V-Gears/include/ ${OIS_INCLUDE_DIRS} ${OGRE_Overlay_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/lib ${CMAKE_CURRENT_BINARY_DIR}/lib/luajit ${CMAKE_CURRENT_SOURCE_DIR}/lib/luajit/src ${CMAKE_CURRENT_SOURCE_DIR}/lib/luabind ${CMAKE_CURRENT_SOURCE_DIR}/lib/luabind/luabind/detail ${CMAKE_CURRENT_SOURCE_DIR}/lib/tinyxml ) if (MSVC) # Build cpp files on all cores, up virtual mem for PCH's as cotire really makes the compiler scream SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /Zm193") # Shut up about insecure functions, as this is cross platform code we can't use the Win32 specifc functions add_definitions( -D_CRT_SECURE_NO_WARNINGS ) endif() if (UNIX AND $ENV{COVERAGE}==1) message("Setting coverage compiler options") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0") # debug, no optimisation SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage") # enabling coverage endif() #Compiler flags SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") # Position Independent Code, required if QT is compiled with -reduce-relocations #TODO: Force DEBUG, no optimizations for now. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -rdynamic -O0") add_definitions(-DTIXML_USE_STL) add_subdirectory(lib) add_subdirectory(V-Gears) if(VGears_BUILD_PLUGINS) add_subdirectory(PlugIns) endif() if(VGears_BUILD_UTILITIES) add_subdirectory(V-Gears-Installer) endif() if(VGears_BUILD_TESTS) add_subdirectory(Tests) endif() SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/output) # Set generic CPack properties # DO NOT include on win32 - causes CRT dlls to be included #INCLUDE(InstallRequiredSystemLibraries) set(CPACK_PACKAGE_NAME "v-gears") SET(CPACK_PACKAGE_VERSION ${VGears_VERSION}) SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A free implementation of the Final Fantasy VII Engine") SET(CPACK_PACKAGE_VENDOR "V-Gears team") # TODO: Need to set these up properly, installing build instructions is a bit strange :) SET(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/COPYING.txt") #SET(CPACK_RESOURCE_FILE_README "${PROJECT_SOURCE_DIR}/readme.md") MESSAGE( STATUS "CMAKE_BUILD_TYPE: " ${CMAKE_BUILD_TYPE} ) INSTALL(FILES "${CMAKE_CURRENT_SOURCE_DIR}/data/field_models_and_animation_metadata.xml" DESTINATION ".") #OS SPECIFIC if(WIN32) # On Windows generate MSI packages SET(CPACK_GENERATOR "WIX") SET(CPACK_WIX_TEMPLATE "${CMAKE_CURRENT_SOURCE_DIR}/wix.template.in") SET(CPACK_WIX_UPGRADE_GUID 8fbb893f-5622-4f6d-a7f6-c221f7be5d52) # TODO: Set MSI banner image, copyright info etc, also include startmenu/desktop shortcuts #set the name of the installer default formating is name-version-os # If empty assume release if ("${CMAKE_BUILD_TYPE}" STREQUAL "" OR "${CMAKE_BUILD_TYPE}" STREQUAL "Release") message("RELEASE installer build") install(FILES ${PROJECT_SOURCE_DIR}/output/resources.cfg DESTINATION ./) install(FILES ${PROJECT_SOURCE_DIR}/output/plugins.cfg DESTINATION ./) install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/release/OgreMain.dll DESTINATION ./) install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/release/RenderSystem_GL.dll DESTINATION ./) install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/release/OGREOVERLAY.DLL DESTINATION ./) install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/release/OIS.DLL DESTINATION ./) install(FILES ${QT_PLUGINS_DIR}/../bin/QtCore4.dll DESTINATION ./) install(FILES ${QT_PLUGINS_DIR}/../bin/QtGui4.dll DESTINATION ./) else() message("DEBUG installer build") install(FILES ${PROJECT_SOURCE_DIR}/output/resources_d.cfg DESTINATION ./) install(FILES ${PROJECT_SOURCE_DIR}/output/plugins_d.cfg DESTINATION ./) install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/debug/OgreMain_d.dll DESTINATION ./) install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/debug/RenderSystem_GL_d.dll DESTINATION ./) install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/debug/OGREOVERLAY_D.DLL DESTINATION ./) install(FILES ${OGRE_CMAKE_MODULE_PATH}/../bin/debug/OIS_D.DLL DESTINATION ./) install(FILES ${QT_PLUGINS_DIR}/../bin/QtCored4.dll DESTINATION ./) install(FILES ${QT_PLUGINS_DIR}/../bin/QtGuid4.dll DESTINATION ./) endif() elseif(APPLE) # APPLE is also UNIX, so must check for APPLE before UNIX SET(CPACK_GENERATOR "DragNDrop") if ("${CMAKE_BUILD_TYPE}" STREQUAL "" OR "${CMAKE_BUILD_TYPE}" STREQUAL "Release") set(OSX_BIN_DIR "${CMAKE_BINARY_DIR}/bin_release") message("DEBUG installer build, CMAKE_BINARY_DIR=${CMAKE_BINARY_DIR} OSX_BIN_DIR=${OSX_BIN_DIR}") else() set(OSX_BIN_DIR "${CMAKE_BINARY_DIR}/bin_debug") message("RELEASE installer build, CMAKE_BINARY_DIR=${CMAKE_BINARY_DIR} OSX_BIN_DIR=${OSX_BIN_DIR}") endif() install(FILES ${PROJECT_SOURCE_DIR}/output/resources.cfg DESTINATION ./) install(FILES ${PROJECT_SOURCE_DIR}/output/plugins.cfg DESTINATION ./) install(FILES ${OSX_BIN_DIR}/Ogre DESTINATION ./) install(FILES ${OSX_BIN_DIR}/RenderSystem_GL DESTINATION ./) install(FILES ${OSX_BIN_DIR}/OgreOverlay DESTINATION ./) install(FILES ${OSX_BIN_DIR}/libboost_thread-mt.dylib DESTINATION ./) install(FILES ${OSX_BIN_DIR}/libboost_date_time-mt.dylib DESTINATION ./) install(FILES ${OSX_BIN_DIR}/libboost_system-mt.dylib DESTINATION ./) install(FILES ${OSX_BIN_DIR}/libboost_atomic-mt.dylib DESTINATION ./) install(FILES ${OSX_BIN_DIR}/libboost_chrono-mt.dylib DESTINATION ./) install(FILES ${OSX_BIN_DIR}/libboost_program_options-mt.dylib DESTINATION ./) install(FILES ${OSX_BIN_DIR}/libboost_filesystem-mt.dylib DESTINATION ./) install(FILES ${OSX_BIN_DIR}/libboost_filesystem-mt.dylib DESTINATION ./) install(FILES ${OSX_BIN_DIR}/QtCore DESTINATION ./) install(FILES ${OSX_BIN_DIR}/QtGui DESTINATION ./) install(FILES ${OSX_BIN_DIR}/liblua.dylib DESTINATION ./) elseif(UNIX) # On Linux generate TAR.GZ,DEB and RPM packages # Find out what architecture are we running on and set the package architecture # Set the generic files needing to be installed install(FILES ${PROJECT_SOURCE_DIR}/v-gears.png DESTINATION ./share/pixmaps/ ) install(FILES ${PROJECT_SOURCE_DIR}/v-gears.desktop DESTINATION ./share/applications/ ) install(FILES ${PROJECT_SOURCE_DIR}/debian/menu DESTINATION share/menu/ RENAME v-gears ) install(FILES ${PROJECT_SOURCE_DIR}/output/plugins.cfg_linux DESTINATION share/v-gears/ RENAME plugins.cfg PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ GROUP_WRITE WORLD_WRITE WORLD_READ) install(FILES ${PROJECT_SOURCE_DIR}/output/resources.cfg_linux DESTINATION share/v-gears/ RENAME resources.cfg PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ GROUP_WRITE WORLD_WRITE WORLD_READ) install(FILES ${PROJECT_SOURCE_DIR}/output/v-gears.cfg_linux DESTINATION share/v-gears/ RENAME v-gears.cfg PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ GROUP_WRITE WORLD_WRITE WORLD_READ) if(EXISTS "/usr/lib/x86_64-linux-gnu/OGRE/RenderSystem_GL.so.1.12.10") install(FILES /usr/lib/x86_64-linux-gnu/OGRE/RenderSystem_GL.so.1.12.10 DESTINATION lib/v-gears/plugins/ ) elseif(EXISTS "/usr/lib/i386-linux-gnu/OGRE/RenderSystem_GL.so.1.12.10") install(FILES /usr/lib/i386-linux-gnu/OGRE/RenderSystem_GL.so.1.12.10 DESTINATION lib/v-gears/plugins/ ) endif() SET(CPACK_SOURCE_GENERATOR "TGZ;TZ") SET(CPACK_GENERATOR "TGZ") # Detect Distro Family DEB , RPM. if(EXISTS "/etc/lsb-release") set(DistroType DEB) elseif(EXISTS "/etc/debian_release") set(DistroType DEB) elseif(EXISTS "/etc/fedora-release") set(DistroType RPM) endif() message(STATUS "Distro Detected: ${DistroType} ") if(DistroType MATCHES "DEB") # Setup DEB package properties MESSAGE(STATUS "DEB ADDED TO GENERATION LIST") SET(CPACK_GENERATOR "${CPACK_GENERATOR};DEB") endif() if(EXISTS "/usr/bin/rpmbuild") MESSAGE(STATUS "RPM ADDED TO GENERATION LIST (RPM IS DISABLED IN CMAKELISTS)") # Uncomment to allow for rpm files to be built. # SET(CPACK_GENERATOR "${CPACK_GENERATOR};RPM") endif() # Setup DEB package properties # TODO SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "IƱigo Valentin ") #Set DEBIAN INFO SET(CPACK_DEBIAN_PACKAGE_SECTION games) SET(CPACK_DEBIAN_PACKAGE_PRIORITY extra) #SET(CPACK_PACKAGE_EXECUTABLE ) EXECUTE_PROCESS(COMMAND dpkg --print-architecture OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE) MESSAGE (STATUS "Architecture: ${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}") # We should need no longer need postinst since we have added extra install steps to what it would. #SET(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA ${CMAKE_SOURCE_DIR}/debian/postinst ) # Set the name to be debian package like. SET(CPACK_PACKAGE_FILE_NAME "v-gears_${CPACK_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}") #SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libogre-1.9, libois,libboost-program-options,libboost-filesystem,libvorbis,libopenal,libboost-test,zlib1g") SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libogre-1.9.0, libois-1.3.0,libboost-program-options1.54.0,libboost-filesystem1.54.0,libvorbis0a,libvorbisfile3,libvorbisenc2,libopenal1,libboost-test1.54.0,zlib1g,liblua5.1-0") #Set RPM info SET(CPACK_RPM_PACKAGE_SUMMARY CPACK_PACKAGE_DESCRIPTION_SUMMARY) SET(CPACK_RPM_PACKAGE_NAME CPACK_PACKAGE_NAME) SET(CPACK_RPM_PACKAGE_VERSION CPACK_PACKAGE_VERSION) SET(CPACK_RPM_PACKAGE_RELEASE 1) SET(CPACK_RPM_PACKAGE_LICENSE "GPLv3+") SET(CPACK_RPM_PACKAGE_GROUP games) SET(CPACK_RPM_PACKAGE_VENDOR) SET(CPACK_RPM_PACKAGE_DESCRIPTION) #REQUIREMENTS NEED TO BE CHECKED USING FEDORA. #SET(CPACK_RPM_PACKAGE_REQUIRES "ogre,ois,boost,vorbis,lua,zlib1g") endif() SET_PROPERTY(TARGET LuaBind PROPERTY FOLDER "3rdparty") INCLUDE(CPack) #End of install instructions