Advertisement
Guest User

Untitled

a guest
Apr 17th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
CMake 6.34 KB | None | 0 0
  1. cmake_minimum_required(VERSION 3.9)
  2. # Compiler flags
  3. if (MSVC)
  4.   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /EHsc" CACHE INTERNAL "" FORCE)
  5. elseif(APPLE)
  6.   message("hello apple")
  7.   set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9 CACHE STRING "")
  8. endif()
  9. set(CMAKE_CXX_STANDARD 14)
  10. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  11.  
  12. project(Games_Engineering)
  13.  
  14. #### setup Directories ####
  15. #Main output directory
  16. set(OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/")
  17. # Ouput all DLLs from all libs into main build folder
  18. set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY})
  19.  
  20. #### EXTERNAL DEPENDENCIES ####
  21.  
  22. add_subdirectory("lib/sfml" EXCLUDE_FROM_ALL)
  23. set(SFML_INCS "lib/sfml/include")
  24. link_directories("${CMAKE_BINARY_DIR}/lib/sfml/lib")
  25.  
  26. add_subdirectory("lib/b2d/Box2D" EXCLUDE_FROM_ALL)
  27. set(B2D_INCS "lib/b2d/Box2D/")
  28. link_directories("${CMAKE_BINARY_DIR}/lib/sfml/lib")
  29.  
  30.  
  31.  
  32. #### ENGINE####
  33.  
  34. file(GLOB_RECURSE RESOURCE_FILES "res/*.*")
  35.  
  36. file(GLOB_RECURSE SOURCE_FILES engine/src/*.cpp engine/src/*.h)
  37. add_library(lib_engine STATIC ${SOURCE_FILES} ${RESOURCE_FILES})
  38. target_include_directories(lib_engine INTERFACE "${CMAKE_SOURCE_DIR}/engine/src/" PUBLIC SYSTEM ${B2D_INCS} )
  39. target_link_libraries(lib_engine lib_tile_level_loader lib_maths lib_ecm Box2D sfml-graphics sfml-audio)
  40.  
  41. ## Maths lib
  42. add_library(lib_maths INTERFACE)
  43. target_sources(lib_maths INTERFACE "${CMAKE_SOURCE_DIR}/engine/lib_maths/maths.h")
  44. target_include_directories(lib_maths INTERFACE "${CMAKE_SOURCE_DIR}/engine/lib_maths" INTERFACE ${SFML_INCS})
  45.  
  46. ## Tile loader lib
  47. file(GLOB_RECURSE SOURCE_FILES engine/lib_tile_level_loader/*.cpp engine/lib_tile_level_loader/*.h)
  48. add_library(lib_tile_level_loader STATIC ${SOURCE_FILES} ${RESOURCE_FILES})
  49. target_include_directories(lib_tile_level_loader INTERFACE "${CMAKE_SOURCE_DIR}/engine/lib_tile_level_loader/" )
  50. target_link_libraries(lib_tile_level_loader lib_maths sfml-graphics)
  51.  
  52. ## ECM lib
  53. file(GLOB_RECURSE SOURCE_FILES engine/lib_ecm/*.cpp engine/lib_ecm/*.h)
  54. add_library(lib_ecm STATIC ${SOURCE_FILES})
  55. target_include_directories(lib_ecm INTERFACE "${CMAKE_SOURCE_DIR}/engine/lib_ecm" )
  56. target_link_libraries(lib_ecm PRIVATE lib_maths)
  57.  
  58.  
  59.  
  60. #### BITQUEST ####
  61. file(GLOB_RECURSE SOURCES Code/*.cpp Code/*.h)
  62. file(GLOB_RECURSE CMPNTS Code/components/*.cpp Code/components/*.h)
  63. file(GLOB_RECURSE SCENES Code/scenes/*.cpp Code/scenes/*.h)
  64. add_executable(BITQUEST ${SOURCES} ${RESOURCE_FILES})
  65. source_group("components" FILES ${CMPNTS})
  66. source_group("resources" FILES ${RESOURCE_FILES})
  67. target_link_libraries(BITQUEST lib_engine)
  68. set(EXECUTABLES ${EXECUTABLES} BITQUEST)
  69.  
  70.  add_custom_target(copy_resources ALL
  71.     COMMAND ${CMAKE_COMMAND} -E copy_directory "${PROJECT_SOURCE_DIR}/res" ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIGURATION>/res
  72.   )
  73.  
  74.  set_target_properties(BITQUEST PROPERTIES
  75.     VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$(Configuration)
  76.   )
  77.  
  78.   add_dependencies(BITQUEST copy_resources)
  79.  
  80.   #### Link Dependencies ####
  81. foreach (exe ${EXECUTABLES})
  82.   #set working directory to build dir
  83.   set_target_properties(${exe} PROPERTIES
  84.     VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$(Configuration)
  85.   )
  86.  
  87.   target_link_libraries(${exe}
  88.     lib_maths
  89.     optimized sfml-audio debug sfml-audio-d
  90.     optimized sfml-window debug sfml-window-d
  91.     optimized sfml-system debug sfml-system-d
  92.     optimized sfml-graphics debug sfml-graphics-d
  93.     optimized sfml-main
  94.   )
  95.  
  96.    if(MSVC) # Hide Console in release builds
  97.     set_target_properties(${exe} PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS")
  98.   endif(MSVC)
  99.  
  100.   add_dependencies(${exe} sfml-graphics sfml-audio copy_resources)
  101. endforeach ()
  102.  
  103.  
  104. #Install directory within build folder, so it doesn't go into /lib or program-files
  105. set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install/")
  106. #Installer.exe/zip built into /installer
  107. set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}/installer/")
  108.  
  109. #Install component for runtime dlls and stuff
  110. set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE) #stop this happening on non-release buildss
  111. INCLUDE(InstallRequiredSystemLibraries)
  112. install( PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION "bin/" CONFIGURATIONS Release COMPONENT System )
  113. #Install component for resources
  114. install(DIRECTORY "${PROJECT_SOURCE_DIR}/res" DESTINATION "bin/" CONFIGURATIONS Release COMPONENT resources_cmpt)
  115. #We disabled SFML's INSTALL component as it brings along junk, so we gotta make one ourselves
  116. install(DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Release/" DESTINATION "bin" CONFIGURATIONS Release COMPONENT libs_cmpt FILES_MATCHING PATTERN "*.dll" )
  117.  
  118. #Tell CPack about the libs and resources install components
  119. set(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} resources_cmpt libs_cmpt)
  120. #CPACK_INSTALL_CMAKE_PROJECTS IS only necessary if not using CPACK_COMPONENTS_ALL
  121. #set(CPACK_INSTALL_CMAKE_PROJECTS ${CPACK_INSTALL_CMAKE_PROJECTS};${CMAKE_BINARY_DIR};${CMAKE_PROJECT_NAME};resources_cmpt;/)
  122. #set(CPACK_INSTALL_CMAKE_PROJECTS ${CPACK_INSTALL_CMAKE_PROJECTS};${CMAKE_BINARY_DIR};${CMAKE_PROJECT_NAME};libs_cmpt;/)
  123.  
  124. #Install component for all labs, also tell CPack about them
  125. foreach (exe ${EXECUTABLES})
  126.   install(TARGETS ${exe} DESTINATION "bin" CONFIGURATIONS Release COMPONENT ${exe}_cmpt )
  127.   #set(CPACK_INSTALL_CMAKE_PROJECTS ${CPACK_INSTALL_CMAKE_PROJECTS};${CMAKE_BINARY_DIR};${CMAKE_PROJECT_NAME};${exe}_cmpt;/)
  128.   set(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} ${exe}_cmpt)
  129.   set(CPACK_COMPONENT_${exe}_CMPT_DEPENDS resources_cmpt libs_cmpt)
  130.   set(CPACK_COMPONENT_${exe}_CMPT_GROUP "Final")
  131. endforeach ()
  132.  
  133.  
  134. IF(WIN32)
  135.   set(CPACK_GENERATOR NSIS)
  136.   set(CPACK_NSIS_COMPONENT_INSTALL ON)
  137.   set(CPACK_NSIS_HELP_LINK "https://github.com/ske66/bitquest")
  138.   set(CPACK_NSIS_URL_INFO_ABOUT "https://github.com/ske66/bitquest")
  139.   set(CPACK_NSIS_CONTACT "https://github.com/ske66")
  140. ELSE()
  141.   set(CPACK_GENERATOR ZIP)
  142. ENDIF(WIN32)
  143.  
  144.  
  145. set(CPACK_PACKAGE_FILE_NAME ${CMAKE_PROJECT_NAME})
  146. set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Bitquest")
  147. set(CPACK_PACKAGE_VENDOR "Mark Barton & Thomas Young")
  148. find_file (LICENSE NAMES LICENSE LICENSE.txt PATHS  "${CMAKE_SOURCE_DIR}/../" "${CMAKE_SOURCE_DIR}" NO_DEFAULT_PATH)
  149. if(${LICENSE})
  150.   set(CPACK_RESOURCE_FILE_LICENSE ${LICENSE})
  151. endif(${LICENSE})
  152. set(CPACK_PACKAGE_VERSION_MAJOR "0")
  153. set(CPACK_PACKAGE_VERSION_MINOR "1")
  154. set(CPACK_PACKAGE_VERSION_PATCH "0")
  155.  
  156. INCLUDE(CPack)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement