summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2022-03-11 20:37:06 +0100
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2022-03-12 20:40:08 +0100
commit0de2d3a0b6941c566713309078eeed9a8972bae4 (patch)
tree934e602b2991068659430b7e49d99509216805e5
parent7319356dfdeaf16282ef39d05a3213c1d7dc324d (diff)
downloadrockbox-0de2d3a0b6941c566713309078eeed9a8972bae4.tar.gz
rockbox-0de2d3a0b6941c566713309078eeed9a8972bae4.zip
utils: rework cmake deploy function.
Use named arguments for function and allow passing additional executable targets to be copied to the deploy tree. Update current uses and add ipodpatcher and sansapatcher to Rockbox Utility deployment. This is in preparation for moving ipodpatcher / sansapatcher functionality out of Rockbox Utility so we eventually can avoid elevation / sudo of the whole installer. Currently this only results in Rockbox Utility releases shipping ipodpatcher / sansapatcher executables. Change-Id: Ibb6601b7e437648135059c580e2ce2532574835a
-rw-r--r--utils/cmake/deploy.cmake153
-rw-r--r--utils/rbutilqt/CMakeLists.txt12
-rw-r--r--utils/themeeditor/CMakeLists.txt11
3 files changed, 124 insertions, 52 deletions
diff --git a/utils/cmake/deploy.cmake b/utils/cmake/deploy.cmake
index 4a43c033fa..95c384bcef 100644
--- a/utils/cmake/deploy.cmake
+++ b/utils/cmake/deploy.cmake
@@ -39,37 +39,66 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
39 -DOUTDIR=${CMAKE_BINARY_DIR} 39 -DOUTDIR=${CMAKE_BINARY_DIR}
40 -DURL=https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage 40 -DURL=https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage
41 -P ${CMAKE_CURRENT_LIST_DIR}/download.cmake 41 -P ${CMAKE_CURRENT_LIST_DIR}/download.cmake
42 ) 42 )
43 # intermediate target needed to be able to get back to the actual file dependency. 43 # intermediate target needed to be able to get back to the actual file dependency.
44 add_custom_target(linuxdeploy DEPENDS ${LINUXDEPLOY}) 44 add_custom_target(linuxdeploy DEPENDS ${LINUXDEPLOY})
45 function(deploy_qt target qtbindir iconfile desktopfile dmgbuildcfg) 45
46 function(deploy_qt)
47 cmake_parse_arguments(deploy ""
48 "TARGET;DESKTOPFILE;ICONFILE;QTBINDIR;DMGBUILDCFG"
49 "EXECUTABLES"
50 ${ARGN})
46 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") 51 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
47 message(WARNING "Deploying a Debug build.") 52 message(WARNING "Deploying a Debug build.")
48 endif() 53 endif()
49 54
55 add_custom_target(deploy_${deploy_TARGET}
56 DEPENDS ${CMAKE_BINARY_DIR}/${deploy_TARGET}.AppImage)
57
58 # need extra rules so we can use generator expressions
59 # (using get_target_property() doesn't know neede values during generation)
60 set(_deploy_deps "")
61 foreach(_deploy_exe_tgt ${deploy_EXECUTABLES})
62 add_custom_command(
63 OUTPUT ${CMAKE_BINARY_DIR}/${_deploy_exe_tgt}.appimage.stamp
64 COMMENT "Copying ${_deploy_exe_tgt} to AppImage"
65 COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/AppImage-${deploy_TARGET}/usr/bin
66 COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${_deploy_exe_tgt}>
67 ${CMAKE_BINARY_DIR}/AppImage-${deploy_TARGET}/usr/bin
68 COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/${_deploy_exe_tgt}.appimage.stamp
69 DEPENDS ${_deploy_exe_tgt}
70 )
71 add_custom_target(deploy_${deploy_TARGET}_${_deploy_exe_tgt}
72 DEPENDS ${CMAKE_BINARY_DIR}/${_deploy_exe_tgt}.appimage.stamp)
73
74 set(_deploy_deps "${_deploy_deps};deploy_${deploy_TARGET}_${_deploy_exe_tgt}")
75 endforeach()
76
50 add_custom_command( 77 add_custom_command(
51 OUTPUT ${CMAKE_BINARY_DIR}/${target}.AppImage 78 OUTPUT ${CMAKE_BINARY_DIR}/${deploy_TARGET}.AppImage
52 COMMENT "Creating AppImage ${target}" 79 COMMENT "Creating AppImage ${deploy_TARGET}"
53 COMMAND OUTPUT=${CMAKE_BINARY_DIR}/${target}.AppImage 80 COMMAND OUTPUT=${CMAKE_BINARY_DIR}/${deploy_TARGET}.AppImage
54 ${LINUXDEPLOY} 81 ${LINUXDEPLOY}
55 --plugin qt 82 --plugin qt
56 --icon-file=${iconfile} 83 --icon-file=${deploy_ICONFILE}
57 --desktop-file=${desktopfile} 84 --desktop-file=${deploy_DESKTOPFILE}
58 --executable=$<TARGET_FILE:${target}> 85 --executable=$<TARGET_FILE:${deploy_TARGET}>
59 --appdir=AppImage-${target} 86 --appdir=${CMAKE_BINARY_DIR}/AppImage-${deploy_TARGET}
60 --output=appimage 87 --output=appimage
61 --verbosity=2 88 --verbosity=2
62 DEPENDS ${target} linuxdeploy 89 DEPENDS ${deploy_TARGET} ${_deploy_deps} linuxdeploy
63 ) 90 )
64 add_custom_target(deploy_${target} 91 add_dependencies(deploy deploy_${deploy_TARGET})
65 DEPENDS ${CMAKE_BINARY_DIR}/${target}.AppImage)
66 add_dependencies(deploy deploy_${target})
67 endfunction() 92 endfunction()
68endif() 93endif()
69 94
70# MacOS: Build dmg 95# MacOS: Build dmg
71if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") 96if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
72 function(deploy_qt target qtbindir iconfile desktopfile dmgbuildcfg) 97 function(deploy_qt)
98 cmake_parse_arguments(deploy ""
99 "TARGET;DESKTOPFILE;ICONFILE;QTBINDIR;DMGBUILDCFG"
100 "EXECUTABLES"
101 ${ARGN})
73 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") 102 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
74 message(WARNING "Deploying a Debug build.") 103 message(WARNING "Deploying a Debug build.")
75 endif() 104 endif()
@@ -77,6 +106,25 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
77 set(DMGBUILD_STAMP ${CMAKE_BINARY_DIR}/dmgbuild.stamp) 106 set(DMGBUILD_STAMP ${CMAKE_BINARY_DIR}/dmgbuild.stamp)
78 find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${qtbindir}") 107 find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${qtbindir}")
79 108
109 # need extra rules so we can use generator expressions
110 # (using get_target_property() doesn't know neede values during generation)
111 set(_deploy_deps "")
112 foreach(_deploy_exe_tgt ${deploy_EXECUTABLES})
113 add_custom_command(
114 OUTPUT ${CMAKE_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp
115 COMMENT "Copying ${_deploy_exe_tgt} to App"
116 COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_BUNDLE_CONTENT_DIR:${deploy_TARGET}>/bin
117 COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${_deploy_exe_tgt}>
118 $<TARGET_BUNDLE_CONTENT_DIR:${deploy_TARGET}>/bin
119 COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp
120 DEPENDS ${_deploy_exe_tgt}
121 )
122 add_custom_target(deploy_${deploy_TARGET}_${_deploy_exe_tgt}
123 DEPENDS ${CMAKE_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp)
124
125 set(_deploy_deps "${_deploy_deps};deploy_${deploy_TARGET}_${_deploy_exe_tgt}")
126 endforeach()
127
80 add_custom_command( 128 add_custom_command(
81 COMMENT "Setting up dmgbuild virtualenv" 129 COMMENT "Setting up dmgbuild virtualenv"
82 OUTPUT ${DMGBUILD_STAMP} 130 OUTPUT ${DMGBUILD_STAMP}
@@ -86,62 +134,83 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
86 134
87 add_custom_command( 135 add_custom_command(
88 # TODO: find a better way to figure the app bundle name. 136 # TODO: find a better way to figure the app bundle name.
89 OUTPUT ${CMAKE_BINARY_DIR}/${target}.dmg 137 OUTPUT ${CMAKE_BINARY_DIR}/${deploy_TARGET}.dmg
90 COMMENT "Running macdeployqt and creating dmg ${target}" 138 COMMENT "Running macdeployqt and creating dmg ${deploy_TARGET}"
91 COMMAND ${MACDEPLOYQT_EXECUTABLE} ${target}.app 139 COMMAND ${MACDEPLOYQT_EXECUTABLE} ${deploy_TARGET}.app
92 COMMAND ${DMGBUILD} -s ${dmgbuildcfg} 140 COMMAND ${DMGBUILD} -s ${deploy_DMGBUILDCFG}
93 -Dappbundle=${target}.app 141 -Dappbundle=${deploy_TARGET}.app
94 ${target} ${CMAKE_BINARY_DIR}/${target}.dmg 142 ${deploy_TARGET} ${CMAKE_BINARY_DIR}/${deploy_TARGET}.dmg
95 DEPENDS ${target} 143 DEPENDS ${deploy_TARGET}
96 ${DMGBUILD_STAMP} 144 ${DMGBUILD_STAMP}
145 ${_deploy_deps}
97 ) 146 )
98 add_custom_target(deploy_${target} 147 add_custom_target(deploy_${deploy_TARGET}
99 DEPENDS ${CMAKE_BINARY_DIR}/${target}.dmg) 148 DEPENDS ${CMAKE_BINARY_DIR}/${deploy_TARGET}.dmg)
100 add_dependencies(deploy deploy_${target}) 149 add_dependencies(deploy deploy_${deploy_TARGET})
101 endfunction() 150 endfunction()
102endif() 151endif()
103 152
104# Windows. Copy to dist folder, run windeployqt on the binary, compress to zip. 153# Windows. Copy to dist folder, run windeployqt on the binary, compress to zip.
105if(CMAKE_SYSTEM_NAME STREQUAL "Windows") 154if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
106 function(deploy_qt target qtbindir iconfile desktopfile dmgbuildcfg) 155 function(deploy_qt)
156 cmake_parse_arguments(deploy ""
157 "TARGET;DESKTOPFILE;ICONFILE;QTBINDIR;DMGBUILDCFG"
158 "EXECUTABLES"
159 ${ARGN})
107 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") 160 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
108 message(WARNING "Deploying a Debug build.") 161 message(WARNING "Deploying a Debug build.")
109 endif() 162 endif()
110 set(_targetfile ${target}.exe) # TODO: Use property. OUTPUT_NAME seems to fail.
111 find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${qtbindir}") 163 find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${qtbindir}")
112 set(deploydir ${CMAKE_BINARY_DIR}/deploy-${target}) 164 set(deploydir ${CMAKE_BINARY_DIR}/deploy-${deploy_TARGET})
113 if(WINDEPLOYQT_EXECUTABLE) 165 if(WINDEPLOYQT_EXECUTABLE)
114 add_custom_command( 166 add_custom_command(
115 COMMENT "Creating deploy folder and running windeployqt" 167 COMMENT "Creating deploy folder and running windeployqt"
116 OUTPUT ${deploydir}/${_targetfile} 168 OUTPUT ${deploydir}/${deploy_TARGET}
117 COMMAND ${CMAKE_COMMAND} -E make_directory ${deploydir} 169 COMMAND ${CMAKE_COMMAND} -E make_directory ${deploydir}
118 COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_targetfile} ${deploydir} 170 COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${deploy_TARGET}> ${deploydir}
119 COMMAND ${WINDEPLOYQT_EXECUTABLE} 171 COMMAND ${WINDEPLOYQT_EXECUTABLE}
120 $<IF:$<CONFIG:Debug>,--debug,--release> # on MinGW, release is mistaken as debug. 172 $<IF:$<CONFIG:Debug>,--debug,--release> # on MinGW, release is mistaken as debug.
121 ${deploydir}/${_targetfile} 173 ${deploydir}/$<TARGET_FILE:${deploy_TARGET}>
122 DEPENDS ${target} 174 DEPENDS ${deploy_TARGET}
123 ) 175 )
124 else() 176 else()
125 add_custom_command( 177 add_custom_command(
126 COMMENT "Creating deploy folder" 178 COMMENT "Creating deploy folder"
127 OUTPUT ${deploydir}/${_targetfile} 179 OUTPUT ${deploydir}/${deploy_TARGET}
128 COMMAND ${CMAKE_COMMAND} -E make_directory ${deploydir} 180 COMMAND ${CMAKE_COMMAND} -E make_directory ${deploydir}
129 COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_targetfile} ${deploydir} 181 COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${deploy_TARGET}> ${deploydir}
130 DEPENDS ${target} 182 DEPENDS ${deploy_TARGET}
131 ) 183 )
132 endif() 184 endif()
185 # need extra rules so we can use generator expressions
186 # (using get_target_property() doesn't know neede values during generation)
187 set(_deploy_deps "")
188 foreach(_deploy_exe_tgt ${deploy_EXECUTABLES})
189 add_custom_command(
190 OUTPUT ${CMAKE_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp
191 COMMENT "Copying ${_deploy_exe_tgt} to deploy folder"
192 COMMAND ${CMAKE_COMMAND} -E make_directory ${deploydir}
193 COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${_deploy_exe_tgt}> ${deploydir}
194 COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp
195 DEPENDS ${_deploy_exe_tgt}
196 )
197 add_custom_target(deploy_${deploy_TARGET}_${_deploy_exe_tgt}
198 DEPENDS ${CMAKE_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp)
199
200 set(_deploy_deps "${_deploy_deps};deploy_${deploy_TARGET}_${_deploy_exe_tgt}")
201 endforeach()
133 add_custom_command( 202 add_custom_command(
134 COMMENT "Compressing to zip" 203 COMMENT "Compressing to zip"
135 OUTPUT ${CMAKE_BINARY_DIR}/${target}.zip 204 OUTPUT ${CMAKE_BINARY_DIR}/${deploy_TARGET}.zip
136 WORKING_DIRECTORY ${deploydir} 205 WORKING_DIRECTORY ${deploydir}
137 COMMAND ${CMAKE_COMMAND} -E tar c ${CMAKE_BINARY_DIR}/${target}.zip 206 COMMAND ${CMAKE_COMMAND} -E tar c ${CMAKE_BINARY_DIR}/${deploy_TARGET}.zip
138 --format=zip . 207 --format=zip .
139 DEPENDS ${deploydir}/${_targetfile} 208 DEPENDS ${deploydir}/${deploy_TARGET} ${_deploy_deps}
140 ) 209 )
141 210
142 add_custom_target(deploy_${target} 211 add_custom_target(deploy_${deploy_TARGET}
143 DEPENDS ${CMAKE_BINARY_DIR}/${target}.zip) 212 DEPENDS ${CMAKE_BINARY_DIR}/${deploy_TARGET}.zip)
144 add_dependencies(deploy deploy_${target}) 213 add_dependencies(deploy deploy_${deploy_TARGET})
145 endfunction() 214 endfunction()
146endif() 215endif()
147 216
diff --git a/utils/rbutilqt/CMakeLists.txt b/utils/rbutilqt/CMakeLists.txt
index d0ac4d9a54..2293b8ebc4 100644
--- a/utils/rbutilqt/CMakeLists.txt
+++ b/utils/rbutilqt/CMakeLists.txt
@@ -137,11 +137,13 @@ set_property(TARGET RockboxUtility PROPERTY AUTOMOC ON)
137set_property(TARGET RockboxUtility PROPERTY AUTORCC ON) 137set_property(TARGET RockboxUtility PROPERTY AUTORCC ON)
138set_property(TARGET RockboxUtility PROPERTY AUTOUIC ON) 138set_property(TARGET RockboxUtility PROPERTY AUTOUIC ON)
139 139
140deploy_qt(RockboxUtility 140deploy_qt(TARGET RockboxUtility
141 ${QT_BINDIR} 141 QTBINDIR ${QT_BINDIR}
142 ${CMAKE_CURRENT_LIST_DIR}/../../docs/logo/rockbox-clef.svg 142 ICONFILE ${CMAKE_CURRENT_LIST_DIR}/../../docs/logo/rockbox-clef.svg
143 ${CMAKE_CURRENT_LIST_DIR}/RockboxUtility.desktop 143 DESKTOPFILE ${CMAKE_CURRENT_LIST_DIR}/RockboxUtility.desktop
144 ${CMAKE_CURRENT_LIST_DIR}/dmgbuild.cfg) 144 DMGBUILDCFG ${CMAKE_CURRENT_LIST_DIR}/dmgbuild.cfg
145 EXECUTABLES ipodpatcher-bin sansapatcher-bin
146 )
145 147
146add_library(rbbase 148add_library(rbbase
147 ${CMAKE_CURRENT_LIST_DIR}/../../tools/iriver.c 149 ${CMAKE_CURRENT_LIST_DIR}/../../tools/iriver.c
diff --git a/utils/themeeditor/CMakeLists.txt b/utils/themeeditor/CMakeLists.txt
index d0957a96da..b29265898a 100644
--- a/utils/themeeditor/CMakeLists.txt
+++ b/utils/themeeditor/CMakeLists.txt
@@ -142,8 +142,9 @@ if(APPLE)
142 PROPERTIES MACOSX_PACKAGE_LOCATION Resources) 142 PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
143endif() 143endif()
144 144
145deploy_qt(RockboxThemeEditor 145deploy_qt(TARGET RockboxThemeEditor
146 ${QT_BINDIR} 146 QTBINDIR ${QT_BINDIR}
147 ${CMAKE_CURRENT_LIST_DIR}/resources/rbthemeeditor.svg 147 ICONFILE ${CMAKE_CURRENT_LIST_DIR}/resources/rbthemeeditor.svg
148 ${CMAKE_CURRENT_LIST_DIR}/RockboxThemeEditor.desktop 148 DESKTOPFILE ${CMAKE_CURRENT_LIST_DIR}/RockboxThemeEditor.desktop
149 ${CMAKE_CURRENT_LIST_DIR}/dmgbuild.cfg) 149 DMGBUILDCFG ${CMAKE_CURRENT_LIST_DIR}/dmgbuild.cfg)
150