summaryrefslogtreecommitdiff
path: root/utils/cmake
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 /utils/cmake
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
Diffstat (limited to 'utils/cmake')
-rw-r--r--utils/cmake/deploy.cmake153
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()
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