diff options
author | Eike Ziller <eike.ziller@qt.io> | 2023-07-27 09:59:40 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2023-08-28 10:13:43 +0000 |
commit | 1db2fea90bc2f22b204263020ca0b570d27619f4 (patch) | |
tree | d2af843888cc01055f60b2c5b72562e31c342398 /scripts | |
parent | 1555ab3094a4a4f778e6fcd95511f5bf325fa6f3 (diff) |
Build/deploy: Move llvm deployment to deploy.py
Moving things away from deployqtHelper_mac.sh
Change-Id: Ifadbf763fdbf12b5e22fc037986eb1b018b96aef
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/deploy.py | 79 | ||||
-rwxr-xr-x | scripts/deployqtHelper_mac.sh | 24 |
2 files changed, 44 insertions, 59 deletions
diff --git a/scripts/deploy.py b/scripts/deploy.py index 92f068ddfb..a0b40990a2 100755 --- a/scripts/deploy.py +++ b/scripts/deploy.py @@ -269,47 +269,52 @@ def copyPreservingLinks(source, destination): else: shutil.copy(source, destination) -def deploy_clang(install_dir, llvm_install_dir, chrpath_bin): +def deploy_clang(qtc_binary_path, llvm_install_dir, chrpath_bin): + print("Copying clang...") + # contains pairs of (source, target directory) deployinfo = [] resourcesource = os.path.join(llvm_install_dir, 'lib', 'clang') if common.is_windows_platform(): - clangbindirtarget = os.path.join(install_dir, 'bin', 'clang', 'bin') - if not os.path.exists(clangbindirtarget): - os.makedirs(clangbindirtarget) - clanglibdirtarget = os.path.join(install_dir, 'bin', 'clang', 'lib') - if not os.path.exists(clanglibdirtarget): - os.makedirs(clanglibdirtarget) - for binary in ['clangd', 'clang-tidy', 'clazy-standalone', 'clang-format']: - binary_filepath = os.path.join(llvm_install_dir, 'bin', binary + '.exe') - if os.path.exists(binary_filepath): - deployinfo.append((binary_filepath, clangbindirtarget)) - resourcetarget = os.path.join(clanglibdirtarget, 'clang') - else: - # clang binaries -> clang libexec - clangbinary_targetdir = os.path.join(install_dir, 'libexec', 'qtcreator', 'clang', 'bin') - if not os.path.exists(clangbinary_targetdir): - os.makedirs(clangbinary_targetdir) - for binary in ['clangd', 'clang-tidy', 'clazy-standalone', 'clang-format']: - binary_filepath = os.path.join(llvm_install_dir, 'bin', binary) - if os.path.exists(binary_filepath): - deployinfo.append((binary_filepath, clangbinary_targetdir)) - # add link target if binary is actually a symlink (to a binary in the same directory) - if os.path.islink(binary_filepath): - linktarget = os.readlink(binary_filepath) - deployinfo.append((os.path.join(os.path.dirname(binary_filepath), linktarget), - os.path.join(clangbinary_targetdir, linktarget))) - clanglibs_targetdir = os.path.join(install_dir, 'libexec', 'qtcreator', 'clang', 'lib') - # support libraries (for clazy) -> clang libexec + clang_targetdir = os.path.join(qtc_binary_path, 'clang') + clangbinary_targetdir = os.path.join(clang_targetdir, 'bin') + resourcetarget = os.path.join(clang_targetdir, 'lib', 'clang') + elif common.is_linux_platform(): + clang_targetdir = os.path.join(qtc_binary_path, '..', 'libexec', 'qtcreator', 'clang') + clangbinary_targetdir = os.path.join(clang_targetdir, 'bin') + resourcetarget = os.path.join(clang_targetdir, 'lib', 'clang') + # ClazyPlugin. On RHEL ClazyPlugin is in lib64, so check both + clanglibs_targetdir = os.path.join(clang_targetdir, 'lib') if not os.path.exists(clanglibs_targetdir): os.makedirs(clanglibs_targetdir) - # on RHEL ClazyPlugin is in lib64 for lib_pattern in ['lib64/ClazyPlugin.so', 'lib/ClazyPlugin.so']: for lib in glob(os.path.join(llvm_install_dir, lib_pattern)): deployinfo.append((lib, clanglibs_targetdir)) - resourcetarget = os.path.join(install_dir, 'libexec', 'qtcreator', 'clang', 'lib', 'clang') + else: + clang_targetdir = os.path.join(qtc_binary_path, 'Contents', 'Resources', 'libexec', 'clang') + clanglibs_targetdir = os.path.join(clang_targetdir, 'lib') + clangbinary_targetdir = os.path.join(clang_targetdir, 'bin') + resourcetarget = os.path.join(clang_targetdir, 'lib', 'clang') + # ClazyPlugin + clanglibs_targetdir = os.path.join(clang_targetdir, 'lib') + if not os.path.exists(clanglibs_targetdir): + os.makedirs(clanglibs_targetdir) + clazy_plugin = os.path.join(llvm_install_dir, 'lib', 'ClazyPlugin.dylib') + deployinfo.append((clazy_plugin, clanglibs_targetdir)) + + # collect binaries + if not os.path.exists(clangbinary_targetdir): + os.makedirs(clangbinary_targetdir) + for binary in ['clangd', 'clang-tidy', 'clazy-standalone', 'clang-format']: + binary_filepath = os.path.join(llvm_install_dir, 'bin', with_exe_ext(binary)) + if os.path.exists(binary_filepath): + deployinfo.append((binary_filepath, clangbinary_targetdir)) + # add link target if binary is actually a symlink (to a binary in the same directory) + if not common.is_windows_platform() and os.path.islink(binary_filepath): + linktarget = os.readlink(binary_filepath) + deployinfo.append((os.path.join(os.path.dirname(binary_filepath), linktarget), + os.path.join(clangbinary_targetdir, linktarget))) - print("copying clang...") for source, target in deployinfo: print(source, '->', target) copyPreservingLinks(source, target) @@ -318,7 +323,6 @@ def deploy_clang(install_dir, llvm_install_dir, chrpath_bin): # libclang was statically compiled, so there is no need for the RPATHs # and they are confusing when fixing RPATHs later in the process. # Also fix clazy-standalone RPATH. - print("fixing Clang RPATHs...") for source, target in deployinfo: filename = os.path.basename(source) targetfilepath = target if not os.path.isdir(target) else os.path.join(target, filename) @@ -328,6 +332,12 @@ def deploy_clang(install_dir, llvm_install_dir, chrpath_bin): targetfilepath = target if not os.path.isdir(target) else os.path.join(target, os.path.basename(source)) subprocess.check_call([chrpath_bin, '-d', targetfilepath]) + if common.is_mac_platform(): + # fix RPATH of clazy-standalone + clazy_dest = os.path.join(clangbinary_targetdir, 'clazy-standalone') + subprocess.call(['xcrun', 'install_name_tool', '-add_rpath', '@loader_path/../lib', clazy_dest], stderr=subprocess.DEVNULL) + subprocess.call(['xcrun', 'install_name_tool', '-delete_rpath', '/Users/qt/work/build/libclang/lib', clazy_dest], stderr=subprocess.DEVNULL) + print(resourcesource, '->', resourcetarget) if (os.path.exists(resourcetarget)): shutil.rmtree(resourcetarget) @@ -428,6 +438,8 @@ def main(): deploy_imports(qtcreator_binary_path, qt_install) deploy_translations(qtcreator_binary_path, qt_install) deploy_qt_conf_files(qtcreator_binary_path) + if args.llvm_path: + deploy_clang(qtcreator_binary_path, args.llvm_path, chrpath_bin) if common.is_mac_platform(): deploy_mac(args) @@ -444,9 +456,6 @@ def main(): else: copy_qt_libs(qt_deploy_prefix, qt_install.bin, qt_install.lib) - if args.llvm_path: - deploy_clang(install_dir, args.llvm_path, chrpath_bin) - if args.elfutils_path: deploy_elfutils(install_dir, chrpath_bin, args) if not common.is_windows_platform(): diff --git a/scripts/deployqtHelper_mac.sh b/scripts/deployqtHelper_mac.sh index c712b92050..e0af5cac19 100755 --- a/scripts/deployqtHelper_mac.sh +++ b/scripts/deployqtHelper_mac.sh @@ -7,35 +7,11 @@ [ $(uname -s) != "Darwin" ] && echo "Run this script on Mac OS X" && exit 2; app_path="$1" -resource_path="$app_path/Contents/Resources" libexec_path="$app_path/Contents/Resources/libexec" bin_src="$2" echo "Deploying Qt" -# copy clang if needed -if [ $LLVM_INSTALL_DIR ]; then - if [ "$LLVM_INSTALL_DIR"/bin/clangd -nt "$libexec_path"/clang/bin/clangd ]; then - echo "- Copying clang" - mkdir -p "$app_path/Contents/Frameworks" || exit 1 - # use recursive copy to make it copy symlinks as symlinks - mkdir -p "$libexec_path/clang/bin" - mkdir -p "$libexec_path/clang/lib" - cp -Rf "$LLVM_INSTALL_DIR"/lib/clang "$libexec_path/clang/lib/" || exit 1 - cp -Rf "$LLVM_INSTALL_DIR"/lib/ClazyPlugin.dylib "$libexec_path/clang/lib/" || exit 1 - clangdsource="$LLVM_INSTALL_DIR"/bin/clangd - cp -Rf "$clangdsource" "$libexec_path/clang/bin/" || exit 1 - clangtidysource="$LLVM_INSTALL_DIR"/bin/clang-tidy - cp -Rf "$clangtidysource" "$libexec_path/clang/bin/" || exit 1 - clangformatsource="$LLVM_INSTALL_DIR"/bin/clang-format - cp -Rf "$clangformatsource" "$libexec_path/clang/bin/" || exit 1 - clazysource="$LLVM_INSTALL_DIR"/bin/clazy-standalone - cp -Rf "$clazysource" "$libexec_path/clang/bin/" || exit 1 - install_name_tool -add_rpath "@executable_path/../lib" "$libexec_path/clang/bin/clazy-standalone" 2> /dev/null - install_name_tool -delete_rpath "/Users/qt/work/build/libclang/lib" "$libexec_path/clang/bin/clazy-standalone" 2> /dev/null - fi -fi - #### macdeployqt if [ ! -d "$app_path/Contents/Frameworks/QtCore.framework" ]; then |