diff options
author | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2022-03-11 20:37:06 +0100 |
---|---|---|
committer | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2022-03-12 20:40:08 +0100 |
commit | 0de2d3a0b6941c566713309078eeed9a8972bae4 (patch) | |
tree | 934e602b2991068659430b7e49d99509216805e5 /utils/cmake/deploy.cmake | |
parent | 7319356dfdeaf16282ef39d05a3213c1d7dc324d (diff) | |
download | rockbox-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
Diffstat (limited to 'utils/cmake/deploy.cmake')
-rw-r--r-- | utils/cmake/deploy.cmake | 153 |
1 files changed, 111 insertions, 42 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() |
68 | endif() | 93 | endif() |
69 | 94 | ||
70 | # MacOS: Build dmg | 95 | # MacOS: Build dmg |
71 | if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") | 96 | if(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() |
102 | endif() | 151 | endif() |
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. |
105 | if(CMAKE_SYSTEM_NAME STREQUAL "Windows") | 154 | if(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() |
146 | endif() | 215 | endif() |
147 | 216 | ||