CMakeLists.txt 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. # AQEMU CMake Project
  2. # Authors:
  3. # Andrey Rijov (AQEMU developer)
  4. # Timothy Redaelli (Fix for build in a different folder)
  5. # Tobias Gläßer (Qt5 port)
  6. PROJECT( AQEMU CXX )
  7. CMAKE_MINIMUM_REQUIRED( VERSION 3.1.0 FATAL_ERROR )
  8. # Available options
  9. OPTION( DEBUG "Build with debug information" )
  10. OPTION( WITHOUT_EMBEDDED_DISPLAY "Build without support Embedded VNC Display" )
  11. OPTION( UPDATE_TRANSLATIONS "Update source translation files (WARNING: make clean will delete the source .ts files!)" )
  12. OPTION( INSTALL_MAN "Install MAN page file" "ON" )
  13. # Debug mode
  14. IF( DEBUG )
  15. # Verbose compiler output
  16. SET( CMAKE_VERBOSE_MAKEFILE ON )
  17. # GCC
  18. ADD_DEFINITIONS( -Wall -g )
  19. ENDIF( DEBUG )
  20. # For finding VNC libs
  21. SET( CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/resources/cmake/modules )
  22. # Files
  23. SET( aqemu_headers
  24. src/No_Boot_Device.h
  25. src/Highlighted_Label.h
  26. src/Service.h
  27. src/Run_Guard.h
  28. src/QEMU_Docopt.h
  29. src/IP_Edit.h
  30. src/Dialog_Button_Box.h
  31. src/docopt/docopt.h
  32. src/Settings_Widget.h
  33. src/QDom.h
  34. src/tinyxml2.h
  35. src/About_Window.h
  36. src/Add_New_Device_Window.h
  37. src/Add_Port_Window.h
  38. src/Add_USB_Port_Window.h
  39. src/Advanced_Settings_Window.h
  40. src/Boot_Device_Window.h
  41. src/Convert_HDD_Image_Window.h
  42. src/Copy_VM_Window.h
  43. src/Create_HDD_Image_Window.h
  44. src/Create_Template_Window.h
  45. src/Delete_VM_Files_Window.h
  46. src/Device_Manager_Widget.h
  47. src/Edit_Emulator_Version_Window.h
  48. src/Emulator_Control_Window.h
  49. src/Error_Log_Window.h
  50. src/First_Start_Wizard.h
  51. src/Folder_Sharing_Widget.h
  52. src/HDD_Image_Info.h
  53. src/Main_Window.h
  54. src/Monitor_Window.h
  55. src/Network_Widget.h
  56. src/Old_Network_Widget.h
  57. src/Ports_Tab_Widget.h
  58. src/Properties_Window.h
  59. src/Emulator_Options_Window.h
  60. src/Select_Icon_Window.h
  61. src/SMP_Settings_Window.h
  62. src/Snapshot_Properties_Window.h
  63. src/Snapshots_Window.h
  64. src/SPICE_Settings_Widget.h
  65. src/System_Info.h
  66. src/Utils.h
  67. src/VM.h
  68. src/VM_Devices.h
  69. src/VM_Wizard_Window.h
  70. src/VNC_Password_Window.h
  71. )
  72. SET( aqemu_sources
  73. src/No_Boot_Device.cpp
  74. src/Highlighted_Label.cpp
  75. src/Service.cpp
  76. src/Run_Guard.cpp
  77. src/QEMU_Docopt.cpp
  78. src/IP_Edit.cpp
  79. src/Dialog_Button_Box.cpp
  80. src/docopt/docopt.cpp
  81. src/Settings_Widget.cpp
  82. src/QDom.cpp
  83. src/tinyxml2.cpp
  84. src/About_Window.cpp
  85. src/Add_New_Device_Window.cpp
  86. src/Add_Port_Window.cpp
  87. src/Add_USB_Port_Window.cpp
  88. src/Advanced_Settings_Window.cpp
  89. src/Boot_Device_Window.cpp
  90. src/Convert_HDD_Image_Window.cpp
  91. src/Copy_VM_Window.cpp
  92. src/Create_HDD_Image_Window.cpp
  93. src/Create_Template_Window.cpp
  94. src/Delete_VM_Files_Window.cpp
  95. src/Device_Manager_Widget.cpp
  96. src/Edit_Emulator_Version_Window.cpp
  97. src/Emulator_Control_Window.cpp
  98. src/Error_Log_Window.cpp
  99. src/First_Start_Wizard.cpp
  100. src/Folder_Sharing_Widget.cpp
  101. src/HDD_Image_Info.cpp
  102. src/main.cpp
  103. src/Main_Window.cpp
  104. src/Monitor_Window.cpp
  105. src/Network_Widget.cpp
  106. src/Old_Network_Widget.cpp
  107. src/Ports_Tab_Widget.cpp
  108. src/Properties_Window.cpp
  109. src/Emulator_Options_Window.cpp
  110. src/Select_Icon_Window.cpp
  111. src/SMP_Settings_Window.cpp
  112. src/Snapshot_Properties_Window.cpp
  113. src/Snapshots_Window.cpp
  114. src/SPICE_Settings_Widget.cpp
  115. src/System_Info.cpp
  116. src/Utils.cpp
  117. src/VM.cpp
  118. src/VM_Devices.cpp
  119. src/VM_Wizard_Window.cpp
  120. src/VNC_Password_Window.cpp
  121. )
  122. SET( aqemu_ui
  123. src/No_Boot_Device.ui
  124. src/About_Window.ui
  125. src/Add_New_Device_Window.ui
  126. src/Add_Port_Window.ui
  127. src/Add_USB_Port_Window.ui
  128. src/Advanced_Settings_Window.ui
  129. src/Boot_Device_Window.ui
  130. src/Convert_HDD_Image_Window.ui
  131. src/Copy_VM_Window.ui
  132. src/Create_HDD_Image_Window.ui
  133. src/Create_Template_Window.ui
  134. src/Delete_VM_Files_Window.ui
  135. src/Device_Manager_Widget.ui
  136. src/Edit_Emulator_Version_Window.ui
  137. src/Emulator_Control_Window.ui
  138. src/Error_Log_Window.ui
  139. src/First_Start_Wizard.ui
  140. src/Folder_Sharing_Widget.ui
  141. src/Main_Window.ui
  142. src/Monitor_Window.ui
  143. src/Network_Widget.ui
  144. src/Old_Network_Widget.ui
  145. src/Ports_Tab_Widget.ui
  146. src/Properties_Window.ui
  147. src/Emulator_Options_Window.ui
  148. src/Select_Icon_Window.ui
  149. src/Settings_Window.ui
  150. src/SMP_Settings_Window.ui
  151. src/Snapshot_Properties_Window.ui
  152. src/Snapshots_Window.ui
  153. src/SPICE_Settings_Widget.ui
  154. src/VM_Wizard_Window.ui
  155. src/VNC_Password_Window.ui
  156. )
  157. SET( aqemu_qrc
  158. resources/shared_images.qrc
  159. resources/icons.qrc
  160. )
  161. SET( aqemu_man_page
  162. resources/docs/aqemu.1 )
  163. SET( translations
  164. translations/German.ts
  165. transtations/Russian.ts
  166. translations/Ukrainian.ts
  167. translations/French.ts
  168. translations/English.ts
  169. translations/Turkish.ts )
  170. SET( files_to_translate ${files_to_translate} ${aqemu_headers} ${aqemu_sources} ${aqemu_ui} )
  171. # Find includes in corresponding build directories
  172. set(CMAKE_INCLUDE_CURRENT_DIR ON)
  173. # Instruct CMake to run moc automatically when needed.
  174. set(CMAKE_AUTOMOC ON)
  175. # Instruct CMake to run uic automatically when needed.
  176. SET(CMAKE_AUTOUIC ON)
  177. # Instruct CMake to run rcc automatically when needed.
  178. SET(CMAKE_AUTORCC ON)
  179. # Check Qt
  180. FIND_PACKAGE( Qt5Core )
  181. FIND_PACKAGE( Qt5Widgets )
  182. FIND_PACKAGE( Qt5Network )
  183. FIND_PACKAGE( Qt5Test )
  184. FIND_PACKAGE( Qt5PrintSupport )
  185. FIND_PACKAGE( Qt5DBus )
  186. # Embedded VNC display
  187. IF( NOT WITHOUT_EMBEDDED_DISPLAY )
  188. FIND_PACKAGE( LibVNCServer REQUIRED )
  189. SET( aqemu_headers ${aqemu_headers} src/Embedded_Display/Machine_View.h src/Embedded_Display/remoteview.h
  190. src/Embedded_Display/vncclientthread.h src/Embedded_Display/vncview.h )
  191. SET( aqemu_sources ${aqemu_sources} src/Embedded_Display/Machine_View.cpp src/Embedded_Display/remoteview.cpp
  192. src/Embedded_Display/vncclientthread.cpp src/Embedded_Display/vncview.cpp )
  193. ADD_DEFINITIONS( -DVNC_DISPLAY -DQTONLY )
  194. ENDIF( NOT WITHOUT_EMBEDDED_DISPLAY )
  195. # TODO: port from Qt4 to Qt5
  196. # For translation
  197. #IF( UPDATE_TRANSLATIONS )
  198. # QT5_CREATE_TRANSLATION( qm_files ${CMAKE_CURRENT_SOURCE_DIR} ${files_to_translate} ${translations} )
  199. #ELSE( UPDATE_TRANSLATIONS )
  200. # QT5_ADD_TRANSLATION( qm_files ${translations} )
  201. #ENDIF( UPDATE_TRANSLATIONS )
  202. ADD_CUSTOM_TARGET( translations_target DEPENDS ${qm_files} )
  203. IF( COMMAND CMAKE_POLICY )
  204. CMAKE_POLICY( SET CMP0003 NEW )
  205. ENDIF( COMMAND CMAKE_POLICY )
  206. ADD_EXECUTABLE( aqemu
  207. ${aqemu_sources}
  208. ${ui_headers}
  209. ${moc_srcs}
  210. ${qm_files}
  211. ${aqemu_qrc}
  212. )
  213. target_include_directories(aqemu PUBLIC src/ )
  214. # Require C++-11 standard
  215. SET_PROPERTY(TARGET aqemu PROPERTY CXX_STANDARD 11)
  216. SET_PROPERTY(TARGET aqemu PROPERTY CXX_STANDARD_REQUIRED ON)
  217. TARGET_LINK_LIBRARIES( aqemu
  218. Qt5::Widgets
  219. Qt5::Network
  220. Qt5::Test
  221. Qt5::PrintSupport
  222. Qt5::DBus
  223. )
  224. # Embedded VNC display
  225. IF( NOT WITHOUT_EMBEDDED_DISPLAY )
  226. TARGET_LINK_LIBRARIES( aqemu ${LIBVNCCLIENT_LIBRARIES} )
  227. ENDIF( NOT WITHOUT_EMBEDDED_DISPLAY )
  228. # Install files
  229. INSTALL( TARGETS aqemu DESTINATION bin )
  230. INSTALL( FILES ${qm_files} DESTINATION share/aqemu )
  231. FILE( GLOB os_icons "${CMAKE_CURRENT_SOURCE_DIR}/resources/os_icons/*.*" )
  232. INSTALL( FILES ${os_icons} DESTINATION share/aqemu/os_icons )
  233. FILE( GLOB os_templates "${CMAKE_CURRENT_SOURCE_DIR}/resources/os_templates/*.*")
  234. INSTALL( FILES ${os_templates} DESTINATION share/aqemu/os_templates )
  235. FILE( GLOB links "${CMAKE_CURRENT_SOURCE_DIR}/resources/docs/links.html" )
  236. INSTALL( FILES ${links} DESTINATION share/aqemu/docs )
  237. FILE( GLOB pixmaps "${CMAKE_CURRENT_SOURCE_DIR}/resources/menu_data/*.png" )
  238. INSTALL( FILES ${pixmaps} DESTINATION share/pixmaps )
  239. FILE( GLOB app_menu "${CMAKE_CURRENT_SOURCE_DIR}/resources/menu_data/aqemu.desktop" )
  240. INSTALL( FILES ${app_menu} DESTINATION share/applications )
  241. FILE( GLOB app_menu "${CMAKE_CURRENT_SOURCE_DIR}/resources/menu_data/aqemu.appdata.xml" )
  242. INSTALL( FILES ${app_menu} DESTINATION share/appdata )
  243. # Create docs .bz2 files
  244. MACRO( create_docs _sources )
  245. FOREACH( curFile ${ARGN} )
  246. GET_FILENAME_COMPONENT( _in ${curFile} ABSOLUTE )
  247. GET_FILENAME_COMPONENT( _basename ${curFile} NAME_WE )
  248. SET( _out ${CMAKE_CURRENT_SOURCE_DIR}/${_basename}.bz2 )
  249. ADD_CUSTOM_COMMAND( OUTPUT ${_out} COMMAND bzip2 ARGS -zkf9 ${_in} DEPENDS ${_in} )
  250. SET( ${_sources} ${${_sources}} ${_out} )
  251. ENDFOREACH( curFile )
  252. ENDMACRO( create_docs )
  253. CREATE_DOCS( docs_bz2 AUTHORS CHANGELOG README TODO )
  254. ADD_CUSTOM_TARGET( docs ALL DEPENDS ${docs_bz2} )
  255. INSTALL( FILES ${docs_bz2} DESTINATION share/doc/aqemu )
  256. # Compress and install MAN page file
  257. IF( NOT MAN_PAGE_COMPRESSOR )
  258. MESSAGE( STATUS "MAN page will be installed is not packed." )
  259. ELSEIF( MAN_PAGE_COMPRESSOR STREQUAL "gzip" )
  260. SET( COMPRESSOR_SUFFIX gz )
  261. ELSEIF( MAN_PAGE_COMPRESSOR STREQUAL "bzip2" )
  262. SET( COMPRESSOR_SUFFIX bz2 )
  263. ELSEIF( MAN_PAGE_COMPRESSOR STREQUAL "lzma" )
  264. SET( COMPRESSOR_SUFFIX lzma )
  265. ELSE( NOT MAN_PAGE_COMPRESSOR )
  266. MESSAGE( STATUS "${MAN_PAGE_COMPRESSOR} not supported!" )
  267. MESSAGE( FATAL_ERROR "Correct values: gzip, bzip2, lzma" )
  268. ENDIF( NOT MAN_PAGE_COMPRESSOR )
  269. # Compress MAN file?
  270. IF( INSTALL_MAN )
  271. IF( COMPRESSOR_SUFFIX )
  272. # Find gzip, bzip or lzma
  273. FIND_PROGRAM( COMPRESSOR_BIN NAMES ${MAN_PAGE_COMPRESSOR} )
  274. IF( ${COMPRESSOR_BIN} MATCHES COMPRESSOR_BIN-NOTFOUND )
  275. MESSAGE( STATUS "${MAN_PAGE_COMPRESSOR} - NOT FOUND!" )
  276. MESSAGE( FATAL_ERROR "Please install ${MAN_PAGE_COMPRESSOR} package!" )
  277. ENDIF( ${COMPRESSOR_BIN} MATCHES COMPRESSOR_BIN-NOTFOUND )
  278. # Compress
  279. EXECUTE_PROCESS( OUTPUT_FILE ${aqemu_man_page}.${COMPRESSOR_SUFFIX}
  280. COMMAND "${COMPRESSOR_BIN}" -9
  281. INPUT_FILE ${aqemu_man_page}
  282. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} )
  283. # Install MAN
  284. INSTALL( FILES ${CMAKE_SOURCE_DIR}/${aqemu_man_page}.${COMPRESSOR_SUFFIX} DESTINATION share/man/man1 )
  285. ELSE( COMPRESSOR_SUFFIX )
  286. MESSAGE( STATUS "MAN_PAGE_COMPRESSOR flag not set. Available values: gzip, bzip2, lzma" )
  287. MESSAGE( STATUS "Will be installed not compressed MAN pages" )
  288. INSTALL( FILES ${CMAKE_SOURCE_DIR}/${aqemu_man_page} DESTINATION share/man/man1 )
  289. ENDIF( COMPRESSOR_SUFFIX )
  290. ENDIF( INSTALL_MAN )