Skip to content

Commit 65edb6c

Browse files
committed
cmake housekeeping
1 parent 7de4e8f commit 65edb6c

File tree

1 file changed

+70
-59
lines changed

1 file changed

+70
-59
lines changed

companion/src/CMakeLists.txt

Lines changed: 70 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@ else()
1919
set(SIMULATOR_NAME "simulator")
2020
endif()
2121

22-
# This the name that the user will see in the generated DMG and what the application
23-
# will be called under /Applications. We include the version string to make installing
24-
# different versions side-by-side
25-
set(COMPANION_OSX_APP_BUNDLE_NAME "EdgeTX Companion ${VERSION_MAJOR}.${VERSION_MINOR}")
22+
if(APPLE)
23+
# This the name that the user will see in the generated DMG and what the application
24+
# will be called under /Applications. We include the version string to make installing
25+
# different versions side-by-side
26+
set(COMPANION_OSX_APP_BUNDLE_NAME "EdgeTX Companion ${VERSION_MAJOR}.${VERSION_MINOR}")
27+
endif(APPLE)
2628

2729
option(DEBUG_STORAGE_IMPORT "Turn on debug output for storage import") # Disabled by default
2830
if(DEBUG_STORAGE_IMPORT)
@@ -139,13 +141,13 @@ else()
139141
endif()
140142

141143
############# Import radio hardware definitions ###############
142-
143144
set(HWDEFS_DIR "${CMAKE_CURRENT_BINARY_DIR}/../../radio/src")
144145
set(HWDEFS_TMPL "${COMPANION_SRC_DIRECTORY}/hwdefs.qrc.in")
145146
set(HWDEFS_PHDR "HWDEF_JSON_LIST")
146147
set(HWDEFS_QRC "${CMAKE_CURRENT_BINARY_DIR}/hwdefs.qrc")
147148
set(HWDEFS_CMD "${COMPANION_SRC_DIRECTORY}/../util/generate_hwdefs_qrc.py")
148149

150+
# qrc used by Companion and Simulator
149151
add_custom_command(OUTPUT ${HWDEFS_QRC}
150152
COMMAND ${HWDEFS_CMD} -d ${HWDEFS_DIR}
151153
-t ${HWDEFS_TMPL}
@@ -311,9 +313,18 @@ include(FindDfuutil)
311313
include(FindLibusb1)
312314
include(FindOpenSSL)
313315

316+
set(COMPANION_TARGETS_PATH ${PROJECT_SOURCE_DIR}/companion/targets)
317+
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
318+
set(COMPANION_TARGETS_PATH ${COMPANION_TARGETS_PATH}/linux)
319+
elseif(APPLE)
320+
set(COMPANION_TARGETS_PATH ${COMPANION_TARGETS_PATH}/mac)
321+
elseif(WIN32)
322+
set(COMPANION_TARGETS_PATH ${COMPANION_TARGETS_PATH}/windows)
323+
endif()
324+
314325
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
315-
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../targets/linux/companion.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/companion.desktop @ONLY)
316-
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../targets/linux/simulator.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/simulator.desktop @ONLY)
326+
configure_file(${COMPANION_TARGETS_PATH}/companion.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/companion.desktop @ONLY)
327+
configure_file(${COMPANION_TARGETS_PATH}/simulator.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/simulator.desktop @ONLY)
317328
message(STATUS "install " ${CMAKE_BINARY_DIR} " to " ${CMAKE_INSTALL_PREFIX})
318329
install(TARGETS ${COMPANION_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
319330
install(TARGETS ${SIMULATOR_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
@@ -328,8 +339,8 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
328339
install(FILES images/linuxicons/256x256/companion.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/256x256/apps RENAME companion${APP_NAME_SUFFIX}.png)
329340
install(FILES images/linuxicons/512x512/companion.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/512x512/apps RENAME companion${APP_NAME_SUFFIX}.png)
330341
install(FILES images/linuxicons/scalable/companion.svg DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps RENAME companion${APP_NAME_SUFFIX}.svg)
331-
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../targets/linux/45-companion-taranis.rules DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/udev/rules.d RENAME 45-companion${APP_NAME_SUFFIX}-taranis.rules)
332-
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../targets/linux/45-usbasp.rules DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/udev/rules.d RENAME 45-companion${APP_NAME_SUFFIX}-usbasp.rules)
342+
install(FILES ${COMPANION_TARGETS_PATH}/45-companion-taranis.rules DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/udev/rules.d RENAME 45-companion${APP_NAME_SUFFIX}-taranis.rules)
343+
install(FILES ${COMPANION_TARGETS_PATH}/45-usbasp.rules DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/udev/rules.d RENAME 45-companion${APP_NAME_SUFFIX}-usbasp.rules)
333344

334345
if(LIBSSL1_FOUND)
335346
install(DIRECTORY ${LIBSSL1_LIBRARY_DIR}/ DESTINATION ${CMAKE_INSTALL_PREFIX}/lib FILES_MATCHING PATTERN "libcrypto.so.*" PATTERN "libssl.so.*")
@@ -370,7 +381,7 @@ elseif(WIN32)
370381
if(DFU_UTIL_FOUND)
371382
install(FILES "${DFU_UTIL_PATH}" DESTINATION ${INSTALL_DESTINATION})
372383
endif()
373-
endif()
384+
endif(LIBUSB1_FOUND)
374385

375386
if(OPENSSL_FOUND)
376387
get_filename_component(OPENSSL_SSL_LIBRARY_DIR ${OPENSSL_SSL_LIBRARY} DIRECTORY)
@@ -382,10 +393,10 @@ elseif(WIN32)
382393
# install only files Qt networking requires
383394
install(DIRECTORY ${OPENSSL_SSL_LIBRARY_DIR}/ DESTINATION ${INSTALL_DESTINATION} FILES_MATCHING PATTERN "libcrypto-*.dll" PATTERN "libssl-*.dll")
384395
endif()
385-
endif()
396+
endif(OPENSSL_FOUND)
386397

387398
set(LICENSE_FILE "${CMAKE_CURRENT_BINARY_DIR}/license.txt")
388-
configure_file("${COMPANION_SRC_DIRECTORY}/../targets/windows/license.txt.in" ${LICENSE_FILE} @ONLY)
399+
configure_file("${COMPANION_TARGETS_PATH}/license.txt.in" ${LICENSE_FILE} @ONLY)
389400
install(FILES "${LICENSE_FILE}" DESTINATION ${INSTALL_DESTINATION})
390401

391402
if(SDL2_FOUND AND DEFINED SDL2_LIB_PATH)
@@ -404,42 +415,7 @@ elseif(WIN32)
404415

405416
# Add installer command to execute windeployqt
406417
message(STATUS "windeployqt command: ${QT_BIN_DIR}/windeployqt.exe ${wdqtopts}")
407-
endif() # WIN32 install
408-
409-
############# Packaging ####################
410-
411-
# Create Windows installer with NSIS
412-
if(WIN32)
413-
find_program(NSIS_EXE makensis.exe PATHS
414-
"C:/Program Files/NSIS"
415-
"C:/Program Files (x86)/NSIS"
416-
"C:/Programs/NSIS"
417-
"${WIN_EXTRA_LIBS_PATH}/NSIS"
418-
)
419-
420-
if (NSIS_EXE)
421-
file(TO_NATIVE_PATH "${INSTALL_DESTINATION}" NSIS_DISTRO) # all files in here will be included in installer
422-
set(NSI_FILE "${PROJECT_BINARY_DIR}/companion/companion.nsi")
423-
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/../targets/windows/companion.nsi.in" "${NSI_FILE}" @ONLY)
424-
425-
add_custom_target(installer
426-
# The 'install' target prepares all the distro files, make sure it has been executed first.
427-
COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --target install --config Release
428-
COMMAND "${QT_BIN_DIR}/windeployqt.exe" "${wdqtopts}"
429-
COMMAND "${NSIS_EXE}" "${NSI_FILE}"
430-
DEPENDS "${NSI_FILE}"
431-
COMMENT "Building Windows NSIS installer..."
432-
)
433-
endif()
434-
endif()
435-
436-
set(CPACK_PACKAGE_NAME "companion${APP_NAME_SUFFIX}")
437-
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Models and settings editor for the EdgeTX open source firmware")
438-
string(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_PACKAGE_NAME_LOWERCASE)
439-
440-
# The file stripping is deliberately disabled, with the stripped file we get
441-
# very poor trace-backs from the users when they report Companion crash
442-
set(CPACK_STRIP_FILES FALSE)
418+
endif(WIN32)
443419

444420
# Qt + Cmake + Mac is poorly documented. A lot of this is guesswork
445421
# and trial and error. Do not hesitate to fix it for the better
@@ -453,8 +429,8 @@ IF(APPLE)
453429
set_target_properties(${SIMULATOR_NAME} PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Simulator ${VERSION_MAJOR}.${VERSION_MINOR}")
454430

455431
# Use a non standard Info.plist that adds Retina support flags
456-
set_target_properties(${COMPANION_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${PROJECT_SOURCE_DIR}/companion/targets/mac/MacOSXBundleInfo.plist.in)
457-
set_target_properties(${SIMULATOR_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${PROJECT_SOURCE_DIR}/companion/targets/mac/MacOSXBundleInfo.plist.in)
432+
set_target_properties(${COMPANION_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${COMPANION_TARGETS_PATH}/MacOSXBundleInfo.plist.in)
433+
set_target_properties(${SIMULATOR_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${COMPANION_TARGETS_PATH}/MacOSXBundleInfo.plist.in)
458434

459435
set(MACOSX_BUNDLE_GUI_IDENTIFIER "org.edgetx.companion")
460436

@@ -473,7 +449,7 @@ IF(APPLE)
473449
COMPONENT Runtime)
474450

475451
# menu file
476-
install(DIRECTORY ${PROJECT_SOURCE_DIR}/companion/targets/mac/qt_menu.nib DESTINATION "${companion_res_dir}" COMPONENT Runtime)
452+
install(DIRECTORY ${COMPANION_TARGETS_PATH}/qt_menu.nib DESTINATION "${companion_res_dir}" COMPONENT Runtime)
477453

478454
# manually add the required plugins
479455
foreach (plugin ${Qt${QT_VERSION_MAJOR}Multimedia_PLUGINS} ${Qt${QT_VERSION_MAJOR}PrintSupport_PLUGINS} ${Qt${QT_VERSION_MAJOR}Gui_PLUGINS} ${Qt${QT_VERSION_MAJOR}Svg_PLUGINS})
@@ -501,13 +477,13 @@ IF(APPLE)
501477
install(PROGRAMS ${DFU_UTIL_ABSOLUTE_PATH} DESTINATION ${companion_res_dir} COMPONENT Runtime)
502478

503479
set(bundle_tools_path "\${CMAKE_INSTALL_PREFIX}/${companion_res_dir}/dfu-util;")
504-
endif()
480+
endif(DFU_UTIL_FOUND)
505481

506482
if(OPENSSL_FOUND)
507483
# Copy openssl, resolve symlink first
508484
#get_filename_component(OPENSSL_ABSOLUTE_PATH ${OPENSSL_SSL_LIBRARY} REALPATH)
509485
#install(FILES ${OPENSSL_ABSOLUTE_PATH} DESTINATION ${companion_res_dir} COMPONENT Runtime)
510-
endif()
486+
endif(OPENSSL_FOUND)
511487

512488
# Include depencies (adding frameworks, fixing the embbeded libraries)
513489
# I get write errors without setting BU_CHMOD_BUNDLE_ITEMS even though it is
@@ -519,27 +495,37 @@ IF(APPLE)
519495
fixup_bundle(\"${APPS}\" \"\${bundle_simulator_libs};${bundle_qt_libs};${bundle_tools_path}\" \"${QT_LIB_DIR}\")
520496
file(RENAME \"\${CMAKE_INSTALL_PREFIX}/${COMPANION_NAME}.app\" \"\${CMAKE_INSTALL_PREFIX}/${COMPANION_OSX_APP_BUNDLE_NAME}.app\")
521497
" COMPONENT Runtime)
522-
endif()
498+
endif(APPLE)
499+
500+
############# Packaging ####################
501+
502+
set(CPACK_PACKAGE_NAME "companion${APP_NAME_SUFFIX}")
503+
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Models and settings editor for the EdgeTX open source firmware")
504+
string(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_PACKAGE_NAME_LOWERCASE)
505+
506+
# The file stripping is deliberately disabled, with the stripped file we get
507+
# very poor trace-backs from the users when they report Companion crash
508+
set(CPACK_STRIP_FILES FALSE)
523509

524510
if(APPLE)
525511
set(CPACK_GENERATOR "DragNDrop")
526512
# set(CPACK_GENERATOR "TGZ") # for quick testing
527513
set(CPACK_BINARY_DRAGNDROP ON)
528514
set(CPACK_DMG_BACKGROUND_IMAGE ${COMPANION_SRC_DIRECTORY}/images/splash_dmg.png)
529515
set(CPACK_DMG_VOLUME_NAME "EdgeTX Companion")
530-
set(CPACK_DMG_DS_STORE ${PROJECT_SOURCE_DIR}/companion/targets/mac/DS_Store)
516+
set(CPACK_DMG_DS_STORE ${COMPANION_TARGETS_PATH}/DS_Store)
531517
set(CPACK_PACKAGE_FILE_NAME "edgetx-${CPACK_PACKAGE_NAME_LOWERCASE}-${VERSION}")
532518
endif(APPLE)
533519

534-
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
520+
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
535521
set(LINUXDEPLOY_APPIMAGE "linuxdeploy-x86_64.AppImage")
536522
set(LINUXDEPLOY_PLUGIN_QT "linuxdeploy-plugin-qt-x86_64.AppImage")
537523
set(LINUXDEPLOY_URL "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous")
538524
set(LINUXDEPLOY_PLUGIN_QT_URL "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous")
539525
set(LINUXDEPLOY_DIRECTORY "${CMAKE_BINARY_DIR}/linuxdeploy")
540526
set(LINUXDEPLOY_APP "${LINUXDEPLOY_DIRECTORY}/usr/bin/linuxdeploy")
541527

542-
if (NOT EXISTS "${LINUXDEPLOY_DIRECTORY}")
528+
if(NOT EXISTS "${LINUXDEPLOY_DIRECTORY}")
543529
message(STATUS "Downloading linuxdeploy and plugins...")
544530

545531
file(DOWNLOAD "${LINUXDEPLOY_URL}/${LINUXDEPLOY_APPIMAGE}" "${CMAKE_BINARY_DIR}/${LINUXDEPLOY_APPIMAGE}")
@@ -582,8 +568,33 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
582568
set(APPIMAGE_DIR "${CPACK_PACKAGE_DIRECTORY}/_CPack_Packages/Linux/External/AppImage")
583569
set(CPN_DESKTOP_FILE ${APPIMAGE_DIR}/usr/share/applications/${COMPANION_NAME}.desktop)
584570

585-
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../targets/linux/CPackLinuxDeploy.cmake.in "${CMAKE_BINARY_DIR}/CPackExternal.cmake" @ONLY)
571+
configure_file("${COMPANION_TARGETS_PATH}/CPackLinuxDeploy.cmake.in" "${CMAKE_BINARY_DIR}/CPackExternal.cmake" @ONLY)
586572
set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${CMAKE_BINARY_DIR}/CPackExternal.cmake")
587-
endif()
573+
endif(Linux)
574+
575+
# Create Windows installer with NSIS
576+
if(WIN32)
577+
find_program(NSIS_EXE makensis.exe PATHS
578+
"C:/Program Files/NSIS"
579+
"C:/Program Files (x86)/NSIS"
580+
"C:/Programs/NSIS"
581+
"${WIN_EXTRA_LIBS_PATH}/NSIS"
582+
)
583+
584+
if(NSIS_EXE)
585+
file(TO_NATIVE_PATH "${INSTALL_DESTINATION}" NSIS_DISTRO) # all files in here will be included in installer
586+
set(NSI_FILE "${PROJECT_BINARY_DIR}/companion/companion.nsi")
587+
configure_file("${COMPANION_TARGETS_PATH}/companion.nsi.in" "${NSI_FILE}" @ONLY)
588+
589+
add_custom_target(installer
590+
# The 'install' target prepares all the distro files, make sure it has been executed first.
591+
COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --target install --config Release
592+
COMMAND "${QT_BIN_DIR}/windeployqt.exe" "${wdqtopts}"
593+
COMMAND "${NSIS_EXE}" "${NSI_FILE}"
594+
DEPENDS "${NSI_FILE}"
595+
COMMENT "Building Windows NSIS installer..."
596+
)
597+
endif()
598+
endif(WIN32)
588599

589600
include(CPack)

0 commit comments

Comments
 (0)