CMakeLists.txt 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. project(vcmiclient)
  2. cmake_minimum_required(VERSION 2.6)
  3. include_directories(${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/include ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_HOME_DIRECTORY}/lib)
  4. include_directories(${SDL_INCLUDE_DIR} ${SDLIMAGE_INCLUDE_DIR} ${SDLMIXER_INCLUDE_DIR} ${SDLTTF_INCLUDE_DIR})
  5. include_directories(${Boost_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIR} ${FFMPEG_INCLUDE_DIRS})
  6. set(client_SRCS
  7. StdInc.cpp
  8. ../CCallback.cpp
  9. battle/CBattleAnimations.cpp
  10. battle/CBattleInterfaceClasses.cpp
  11. battle/CBattleInterface.cpp
  12. battle/CCreatureAnimation.cpp
  13. gui/CAnimation.cpp
  14. gui/CCursorHandler.cpp
  15. gui/CGuiHandler.cpp
  16. gui/CIntObject.cpp
  17. gui/Fonts.cpp
  18. gui/Geometries.cpp
  19. gui/SDL_Extensions.cpp
  20. widgets/AdventureMapClasses.cpp
  21. widgets/Buttons.cpp
  22. widgets/CArtifactHolder.cpp
  23. widgets/CComponent.cpp
  24. widgets/CGarrisonInt.cpp
  25. widgets/Images.cpp
  26. widgets/MiscWidgets.cpp
  27. widgets/ObjectLists.cpp
  28. widgets/TextControls.cpp
  29. windows/CAdvmapInterface.cpp
  30. windows/CCastleInterface.cpp
  31. windows/CCreatureWindow.cpp
  32. windows/CHeroWindow.cpp
  33. windows/CKingdomInterface.cpp
  34. windows/CQuestLog.cpp
  35. windows/CSpellWindow.cpp
  36. windows/CTradeWindow.cpp
  37. windows/CWindowObject.cpp
  38. windows/GUIClasses.cpp
  39. windows/InfoWindows.cpp
  40. CBitmapHandler.cpp
  41. CDefHandler.cpp
  42. CGameInfo.cpp
  43. Client.cpp
  44. CMessage.cpp
  45. CMT.cpp
  46. CMusicHandler.cpp
  47. CPlayerInterface.cpp
  48. CPreGame.cpp
  49. CVideoHandler.cpp
  50. Graphics.cpp
  51. mapHandler.cpp
  52. NetPacksClient.cpp
  53. SDLRWwrapper.cpp
  54. )
  55. set(client_HEADERS
  56. StdInc.h
  57. battle/CBattleAnimations.h
  58. battle/CBattleInterfaceClasses.h
  59. battle/CBattleInterface.h
  60. battle/CCreatureAnimation.h
  61. gui/CAnimation.h
  62. gui/CCursorHandler.h
  63. gui/CGuiHandler.h
  64. gui/CIntObject.h
  65. gui/Fonts.h
  66. gui/Geometries.h
  67. gui/SDL_Compat.h
  68. gui/SDL_Extensions.h
  69. gui/SDL_Pixels.h
  70. widgets/AdventureMapClasses.h
  71. widgets/Buttons.h
  72. widgets/CArtifactHolder.h
  73. widgets/CComponent.h
  74. widgets/CGarrisonInt.h
  75. widgets/Images.h
  76. widgets/MiscWidgets.h
  77. widgets/ObjectLists.h
  78. widgets/TextControls.h
  79. windows/CAdvmapInterface.h
  80. windows/CCastleInterface.h
  81. windows/CCreatureWindow.h
  82. windows/CHeroWindow.h
  83. windows/CKingdomInterface.h
  84. windows/CQuestLog.h
  85. windows/CSpellWindow.h
  86. windows/CTradeWindow.h
  87. windows/CWindowObject.h
  88. windows/GUIClasses.h
  89. windows/InfoWindows.h
  90. CBitmapHandler.h
  91. CDefHandler.h
  92. CGameInfo.h
  93. Client.h
  94. CMessage.h
  95. CMT.h
  96. CMusicHandler.h
  97. CPlayerInterface.h
  98. CPreGame.h
  99. CVideoHandler.h
  100. Graphics.h
  101. mapHandler.h
  102. resource.h
  103. SDLMain.h
  104. SDLRWwrapper.h
  105. )
  106. if(ANDROID) # android needs client/server to be libraries, not executables, so we can't reuse the build part of this script
  107. return()
  108. endif()
  109. if(MSVC)
  110. # workaround ffmpeg linking problems
  111. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO")
  112. set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO")
  113. set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /SAFESEH:NO")
  114. endif()
  115. if(APPLE)
  116. # OS X specific source files
  117. set(client_SRCS ${client_SRCS} SDLMain.m Autoupdate.mm Info.plist vcmi.icns ../osx/vcmi_dsa_public.pem)
  118. if(ENABLE_SPARKLE)
  119. # OS X specific includes
  120. include_directories(${SPARKLE_INCLUDE_DIR})
  121. # OS X specific libraries
  122. target_link_libraries(vcmiclient ${SPARKLE_FRAMEWORK})
  123. endif()
  124. add_executable(vcmiclient MACOSX_BUNDLE ${client_SRCS} ${client_HEADERS})
  125. # Because server and AI libs would be copies to bundle they need to be built before client
  126. add_dependencies(vcmiclient vcmiserver VCAI EmptyAI StupidAI BattleAI minizip)
  127. # Custom Info.plist
  128. set_target_properties(vcmiclient PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist)
  129. # Copy icon file and public key for Sparkle
  130. set_source_files_properties(vcmi.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
  131. set_source_files_properties(../osx/vcmi_dsa_public.pem PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
  132. set_target_properties(vcmiclient PROPERTIES XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../Frameworks @executable_path/")
  133. # Copy server executable, libs and game data to bundle
  134. set(BUNDLE_PATH ${CMAKE_HOME_DIRECTORY}/bin/$(CONFIGURATION)/vcmiclient.app/Contents)
  135. set(MakeVCMIBundle
  136. # Copy all needed binaries
  137. mkdir -p ${BUNDLE_PATH}/MacOS/AI &&
  138. cp ${CMAKE_HOME_DIRECTORY}/bin/$(CONFIGURATION)/vcmiserver ${BUNDLE_PATH}/MacOS/vcmiserver &&
  139. cp ${CMAKE_HOME_DIRECTORY}/bin/$(CONFIGURATION)/libvcmi.dylib ${BUNDLE_PATH}/MacOS/libvcmi.dylib &&
  140. cp ${CMAKE_HOME_DIRECTORY}/bin/$(CONFIGURATION)/libminizip.dylib ${BUNDLE_PATH}/MacOS/libminizip.dylib &&
  141. cp ${CMAKE_HOME_DIRECTORY}/bin/$(CONFIGURATION)/libVCAI.dylib ${BUNDLE_PATH}/MacOS/AI/libVCAI.dylib &&
  142. cp ${CMAKE_HOME_DIRECTORY}/bin/$(CONFIGURATION)/libStupidAI.dylib ${BUNDLE_PATH}/MacOS/AI/libStupidAI.dylib &&
  143. cp ${CMAKE_HOME_DIRECTORY}/bin/$(CONFIGURATION)/libEmptyAI.dylib ${BUNDLE_PATH}/MacOS/AI/libEmptyAI.dylib &&
  144. cp ${CMAKE_HOME_DIRECTORY}/bin/$(CONFIGURATION)/libBattleAI.dylib ${BUNDLE_PATH}/MacOS/AI/libBattleAI.dylib &&
  145. cp -r ${CMAKE_HOME_DIRECTORY}/osx/vcmibuilder.app ${BUNDLE_PATH}/MacOS/vcmibuilder.app &&
  146. # Copy frameworks
  147. sh -c 'cp -r ${CMAKE_HOME_DIRECTORY}/${CMAKE_FRAMEWORK_PATH} ${BUNDLE_PATH}/Frameworks/ || true' &&
  148. # Copy vcmi data
  149. mkdir -p ${BUNDLE_PATH}/Data &&
  150. mkdir -p ${BUNDLE_PATH}/Data/Mods &&
  151. mkdir -p ${BUNDLE_PATH}/Data/launcher &&
  152. cp -r ${CMAKE_HOME_DIRECTORY}/config/ ${BUNDLE_PATH}/Data/config/ &&
  153. cp -r ${CMAKE_HOME_DIRECTORY}/Mods/vcmi/ ${BUNDLE_PATH}/Data/Mods/vcmi/ &&
  154. sh -c 'cp -r ${CMAKE_HOME_DIRECTORY}/Mods/WoG/ ${BUNDLE_PATH}/Data/Mods/WoG/ || echo "Download WoG mod from http://wiki.vcmi.eu/index.php?title=Mod_list" ' &&
  155. sh -c 'cp -r ${CMAKE_HOME_DIRECTORY}/Mods/hota/ ${BUNDLE_PATH}/Data/Mods/hota/ || echo "Download HOTA mod from http://wiki.vcmi.eu/index.php?title=Mod_list" ' &&
  156. cp -r ${CMAKE_HOME_DIRECTORY}/launcher/icons/ ${BUNDLE_PATH}/Data/launcher/icons/)
  157. add_custom_command(TARGET vcmiclient POST_BUILD COMMAND ${MakeVCMIBundle})
  158. elseif(WIN32)
  159. add_executable(vcmiclient ${client_SRCS} ${client_HEADERS} VCMI_client.rc)
  160. else()
  161. add_executable(vcmiclient ${client_SRCS} ${client_HEADERS})
  162. endif()
  163. if(WIN32)
  164. set_target_properties(vcmiclient PROPERTIES OUTPUT_NAME VCMI_client)
  165. endif()
  166. target_link_libraries(vcmiclient vcmi ${Boost_LIBRARIES} ${SDL_LIBRARY} ${SDLIMAGE_LIBRARY} ${SDLMIXER_LIBRARY} ${SDLTTF_LIBRARY} ${ZLIB_LIBRARIES} ${FFMPEG_LIBRARIES} ${SYSTEM_LIBS})
  167. set_target_properties(vcmiclient PROPERTIES ${PCH_PROPERTIES})
  168. cotire(vcmiclient)
  169. install(TARGETS vcmiclient DESTINATION ${BIN_DIR})