diff --git a/llvm-build/build.py b/llvm-build/build.py index f754b1f85fcef4fe2b08d2e266726f4b60f22d20..07a436a31a317aad1cb05c92d613af443b4b318f 100755 --- a/llvm-build/build.py +++ b/llvm-build/build.py @@ -744,8 +744,12 @@ class LlvmCore(BuildUtils): self.llvm_compile_llvm_defines(llvm_defines, llvm_clang_install, cflags, ldflags) - linker_path = os.path.abspath(os.path.join(self.build_config.REPOROOT_DIR, 'prebuilts', 'clang', - 'ohos', 'linux-x86_64', 'llvm', 'bin', 'ld.lld')) + if self.platform_prefix() == "linux-aarch64": + linker_path = os.path.abspath(os.path.join(self.build_config.REPOROOT_DIR, 'prebuilts', 'clang', + 'ohos', 'linux-aarch64', 'llvm', 'bin', 'ld.lld')) + else: + linker_path = os.path.abspath(os.path.join(self.build_config.REPOROOT_DIR, 'prebuilts', 'clang', + 'ohos', 'linux-x86_64', 'llvm', 'bin', 'ld.lld')) llvm_defines['CMAKE_LINKER'] = linker_path self.build_llvm(targets=self.build_config.TARGETS, @@ -759,6 +763,7 @@ class LlvmCore(BuildUtils): windows_defines, cc, cxx, + ranlib, windows_sysroot): if self.build_config.enable_assertions: @@ -784,6 +789,7 @@ class LlvmCore(BuildUtils): windows_defines['CMAKE_C_COMPILER'] = cc windows_defines['CMAKE_CXX_COMPILER'] = cxx + windows_defines['CMAKE_RANLIB'] = ranlib windows_defines['CMAKE_SYSTEM_NAME'] = 'Windows' windows_defines['CMAKE_BUILD_TYPE'] = 'Release' windows_defines['LLVM_BUILD_RUNTIME'] = 'OFF' @@ -890,10 +896,11 @@ class LlvmCore(BuildUtils): # used below via the CMake variable CROSS_TOOLCHAIN_FLAGS_NATIVE. cc = os.path.join(windowstool_path, 'bin', 'clang') cxx = os.path.join(windowstool_path, 'bin', 'clang++') + ranlib = os.path.join(windowstool_path, 'bin', 'llvm-ranlib') # Extra cmake defines to use while building for Windows windows_defines = {} - self.llvm_compile_windows_defines(windows_defines, cc, cxx, windows_sysroot) + self.llvm_compile_windows_defines(windows_defines, cc, cxx, ranlib, windows_sysroot) # Set CMake path, toolchain file for native compilation (to build tablegen # etc). Also disable libfuzzer build during native compilation. @@ -1551,6 +1558,7 @@ class LlvmLibs(BuildUtils): cmake_defines = {} cmake_defines['CMAKE_C_COMPILER'] = os.path.join(toolchain_dir, 'bin', 'clang') cmake_defines['CMAKE_CXX_COMPILER'] = os.path.join(toolchain_dir, 'bin', 'clang++') + cmake_defines['CMAKE_RANLIB'] = os.path.join(toolchain_dir, 'bin', 'llvm-ranlib') cmake_defines['CMAKE_CROSSCOMPILING'] = 'True' cmake_defines['CMAKE_SYSTEM_NAME'] = 'Windows' cmake_defines['CMAKE_SYSROOT'] = windows_sysroot @@ -1738,7 +1746,7 @@ class LlvmPackage(BuildUtils): def package_libcxx(self): libcxx_ndk_install=self.merge_out_path('libcxx-ndk') libcxx_ndk_install_include=self.merge_out_path(libcxx_ndk_install, 'include', 'libcxx-ohos', 'include', 'c++', 'v1') - hosts_list=['linux-x86_64', 'darwin-x86_64', 'windows-x86_64', 'darwin-arm64'] + hosts_list=['linux-x86_64', 'darwin-x86_64', 'windows-x86_64', 'darwin-arm64', 'linux-aarch64'] if os.path.exists(libcxx_ndk_install): for headerfile in os.listdir(libcxx_ndk_install_include): diff --git a/llvm-build/env_prepare.sh b/llvm-build/env_prepare.sh index c9996de3b34a0e1322f4190be9eddba73d89afd4..ab61589d68493b4d6be6f2e42d5db656a4cf245d 100755 --- a/llvm-build/env_prepare.sh +++ b/llvm-build/env_prepare.sh @@ -16,6 +16,9 @@ case $(uname -m) in host_cpu=arm64 ;; + aarch64) + host_cpu=aarch64 + ;; *) host_cpu=x86_64 esac @@ -70,7 +73,16 @@ prebuilts/python3,https://mirrors.huaweicloud.com/harmonyos/compiler/python/3.10 prebuilts/build-tools/${host_platform}-x86/bin,https://repo.huaweicloud.com/openharmony/compiler/gn/2024/linux/gn-linux-x86-20230426.tar.gz prebuilts/build-tools/${host_platform}-x86/bin,https://repo.huaweicloud.com/openharmony/compiler/ninja/1.11.0/linux/ninja-linux-x86-1.11.0.tar.gz """ - +# TODO modify url +AARCH64_CLANG_PACKAGE_VERSION="15.0.4-57f5fc" +CLANG_LINUX_AARCH64_BUILD=clang_linux-aarch64-57f5fc-20231130 +copy_config_linux_aarch64=""" +prebuilts/cmake,https://mirrors.huaweicloud.com/openharmony/compiler/cmake/3.16.5/${host_platform}/cmake-${host_platform}-aarch64-3.16.5.tar.gz +prebuilts/clang/ohos/${host_platform}-${host_cpu},https://mirrors.huaweicloud.com/openharmony/compiler/clang/${AARCH64_CLANG_PACKAGE_VERSION}/linux/${CLANG_LINUX_AARCH64_BUILD}.tar.bz2 +prebuilts/python3,https://mirrors.huaweicloud.com/openharmony/compiler/python/3.10.2/${host_platform}/python-${host_platform}-aarch64-3.10.2_20231012.tar.gz +prebuilts/build-tools/${host_platform}-${host_cpu}/bin,https://mirrors.huaweicloud.com/openharmony/compiler/gn/1101/linux/gn-linux-aarch64-20231121.tar.gz +prebuilts/build-tools/${host_platform}-${host_cpu}/bin,https://mirrors.huaweicloud.com/openharmony/compiler/ninja/1.11.0/linux/ninja-linux-aarch64-1.11.0.tar.gz +""" CLANG_DARWIN_BUILD=clang_darwin-x86_64-8e906c-20230415 copy_config_darwin_x86_64=""" @@ -89,6 +101,9 @@ if [[ "${host_platform}" == "linux" ]]; then if [[ "${host_cpu}" == "x86_64" ]]; then copy_config+=${copy_config_linux_x86_64} echo "add ubuntu here" + elif [[ "${host_cpu}" == "aarch64" ]]; then + copy_config+=${copy_config_linux_aarch64} + echo "add aarch64 ubuntu here" else echo "unknwon host_cpu - ${host_cpu} for linux" fi @@ -120,13 +135,18 @@ if [ -d "${code_dir}/prebuilts/clang/ohos/linux-x86_64/${CLANG_LINUX_BUILD}" ]; mv "${code_dir}/prebuilts/clang/ohos/linux-x86_64/${CLANG_LINUX_BUILD}" "${code_dir}/prebuilts/clang/ohos/linux-x86_64/clang-${SET_CLANG_VERSION}" fi +if [ -d "${code_dir}/prebuilts/clang/ohos/linux-aarch64/${CLANG_LINUX_AARCH64_BUILD}" ]; then + SET_CLANG_VERSION='15.0.4' + mv "${code_dir}/prebuilts/clang/ohos/linux-aarch64/${CLANG_LINUX_AARCH64_BUILD}" "${code_dir}/prebuilts/clang/ohos/linux-aarch64/clang-${SET_CLANG_VERSION}" +fi + if [ -d "${code_dir}/prebuilts/clang/ohos/darwin-x86_64/${CLANG_DARWIN_BUILD}" ]; then SET_CLANG_VERSION='15.0.4' mv "${code_dir}/prebuilts/clang/ohos/darwin-x86_64/${CLANG_DARWIN_BUILD}" "${code_dir}/prebuilts/clang/ohos/darwin-x86_64/clang-${SET_CLANG_VERSION}" fi # try to detect version ... -BASE_CLANG_DIR="${code_dir}/prebuilts/clang/ohos/${host_platform}-x86_64" +BASE_CLANG_DIR="${code_dir}/prebuilts/clang/ohos/${host_platform}-${host_cpu}" CLANG_FOUND_VERSION=$(cd ${BASE_CLANG_DIR}; basename $(ls -d clang*/ | head -1) | sed s/clang-//) # check that pipe above didn't fail and that we have (any) clang version diff --git a/llvm-build/mingw.py b/llvm-build/mingw.py index 9d27a5e1eb6e6d1b4cc2b2a3aa6036b28c3c3b4e..fd5ddc04c3d0c7d9aa68979f28e09e21b1e30236 100755 --- a/llvm-build/mingw.py +++ b/llvm-build/mingw.py @@ -17,6 +17,7 @@ import logging import os +import platform import shutil import subprocess import sys @@ -83,7 +84,8 @@ class LlvmMingw(): } def cmake_prebuilt_bin_dir(self): - return self.build_config.repo_root('prebuilts/cmake', 'linux-x86', 'bin') + host_platform = "%s-%s" % (platform.system().lower(), platform.machine()) + return self.build_config.repo_root('prebuilts/cmake', host_platform, 'bin') def base_cmake_defines(self): self.cmake_defines = {} @@ -116,9 +118,11 @@ class LlvmMingw(): arch = 'x86_64' cc = os.path.join(self.LLVM_ROOT, 'bin', 'clang') cxx = os.path.join(self.LLVM_ROOT, 'bin', 'clang++') + ranlib = os.path.join(self.LLVM_ROOT, 'bin', 'llvm-ranlib') self.crt_defines = {} self.crt_defines['CMAKE_C_COMPILER'] = cc self.crt_defines['CMAKE_CXX_COMPILER'] = cxx + self.crt_defines['CMAKE_RANLIB'] = ranlib self.crt_defines['LLVM_CONFIG_PATH'] = self.LLVM_CONFIG clang_libcxx_lib = self.build_config.out_root('clang_mingw', 'clang-%s' % self.build_config.CLANG_VERSION, 'lib') ldflags = [