From 001bcc2a560fb6299a2c948186c5ba74c999862e Mon Sep 17 00:00:00 2001 From: liujia178 Date: Tue, 4 Jul 2023 14:23:59 +0800 Subject: [PATCH] [BUILD] Reform ohos llvm build process Issue: https://gitee.com/openharmony/third_party_llvm-project/issues/I71KOX Signed-off-by: liujia178 --- llvm-build/Makefile | 41 ++++++++++++++++++++-------------------- llvm-build/README.md | 1 + llvm-build/build.py | 28 ++++++++++++++++++++++----- llvm-build/build_musl.sh | 12 +++++++----- 4 files changed, 52 insertions(+), 30 deletions(-) diff --git a/llvm-build/Makefile b/llvm-build/Makefile index 011686dd41bc..ecb982228b0e 100644 --- a/llvm-build/Makefile +++ b/llvm-build/Makefile @@ -54,6 +54,7 @@ NUTTXDIR = $(TOPDIR)/third_party/NuttX SYSROOTDIR = $(TOPDIR)/prebuilts/lite/sysroot LITEOSADIR = $(TOPDIR)/kernel/liteos_a LINUXDIR = $(TOPDIR)/kernel/linux/linux-5.10 +MUSLCOPYDIR = $(TOPDIR) TARGETS = $(if $(wildcard $(LITEOSADIR)),liteos_a_user,) TARGETS += $(if $(wildcard $(LINUXDIR)),linux_user,) @@ -122,19 +123,19 @@ CFLAGS += -Wno-int-conversion all: $(TARGETS:%=musl_install_for_%) $(TARGETS:%=musl_copy_for_%): - $(HIDE) mkdir -p $@ - $(HIDE) cp -rfu $(MUSLDIR)/[!p]* $@ + $(HIDE) mkdir -p $(MUSLCOPYDIR)/$@ + $(HIDE) cp -rfu $(MUSLDIR)/[!p]* $(MUSLCOPYDIR)/$@ optimized_routines_install_for_liteos_a_user: musl_copy_for_liteos_a_user ifneq ($(ARCH),) - $(HIDE) cp -rfp $(OPTRTDIR)/string/$(ARCH)/* $> $> $(MUSLCOPYDIR)/$ $ $(MUSLCOPYDIR)/$ $ $(MUSLCOPYDIR)/$ diff --git a/llvm-build/build.py b/llvm-build/build.py index 4b562ac765c7..c6a62f085050 100755 --- a/llvm-build/build.py +++ b/llvm-build/build.py @@ -43,6 +43,7 @@ class BuildConfig(): self.build_instrumented = args.build_instrumented self.xunit_xml_output = args.xunit_xml_output self.enable_assertions = args.enable_assertions + self.build_clean = args.build_clean self.need_libs = self.do_build and 'libs' not in args.no_build self.need_lldb_server = self.do_build and 'lldb-server' not in args.no_build @@ -80,6 +81,7 @@ class BuildConfig(): self.LLVM_PROJECT_DIR = os.path.join(self.REPOROOT_DIR, 'toolchain', 'llvm-project') self.OUT_PATH = os.path.join(self.REPOROOT_DIR, 'out') + self.PACKAGES_PATH = os.path.join(self.REPOROOT_DIR, 'packages') @staticmethod def parse_add_argument(parser): @@ -154,6 +156,12 @@ class BuildConfig(): default=None, help='Output path for LLVM unit tests XML report') + parser.add_argument( + '--build-clean', + action='store_true', + default=False, + help='Delete out folder after build packages') + def parse_args(self): parser = argparse.ArgumentParser(description='Process some integers.') @@ -329,6 +337,9 @@ class BuildUtils(object): def merge_out_path(self, *args): return os.path.abspath(os.path.join(self.build_config.OUT_PATH, *args)) + def merge_packages_path(self, *args): + return os.path.abspath(os.path.join(self.build_config.PACKAGES_PATH, *args)) + @staticmethod def use_platform(): sysstr = platform.system().lower() @@ -394,6 +405,8 @@ class BuildUtils(object): prebuilts_dir = os.path.abspath(os.path.join(self.build_config.REPOROOT_DIR, 'prebuilts', name)) return prebuilts_dir + def rm_build_output(self): + return self.check_rm_tree(self.build_config.OUT_PATH) class LlvmCore(BuildUtils): @@ -974,7 +987,8 @@ class LlvmLibs(BuildUtils): self.logger().info('Building runtimes(%s) for %s', rt_list, arch) ndk_suffix = '-ndk' if is_libcxx_ndk_install else '' - out_path = self.merge_out_path('lib', rt_list.replace(';', '-') + ndk_suffix + '-' + str(llvm_triple)) + multi_suffix = '-' + multilib_suffix if multilib_suffix else '' + out_path = self.merge_out_path('lib', rt_list.replace(';', '-') + ndk_suffix + '-' + str(llvm_triple) + multi_suffix) libcxx_install_include_path = self.merge_out_path(llvm_install, 'include', 'libcxx-ohos', 'include', 'c++', 'v1') @@ -1378,11 +1392,11 @@ class LlvmPackage(BuildUtils): #Package libcxx-ndk for host in hosts_list: tarball_name = 'libcxx-ndk-%s-%s' % (self.build_config.build_name, host) - package_path = '%s%s' % (self.merge_out_path(tarball_name), '.tar.bz2') + package_path = '%s%s' % (self.merge_packages_path(tarball_name), '.tar.bz2') self.logger().info('Packaging %s', package_path) args = ['tar', '-chjC', self.build_config.OUT_PATH, '-f', package_path, 'libcxx-ndk'] + self.check_create_dir(self.build_config.PACKAGES_PATH) self.check_call(args) - self.check_rm_tree(libcxx_ndk_install) @staticmethod def merge_tree(src_dir, dst_dir): @@ -1607,7 +1621,7 @@ class LlvmPackage(BuildUtils): def package_up_resulting(self, package_name, host, install_host_dir): # Package up the resulting trimmed install/ directory. tarball_name = '%s-%s' % (package_name, host) - package_path = '%s%s' % (self.merge_out_path(tarball_name), '.tar.bz2') + package_path = '%s%s' % (self.merge_packages_path(tarball_name), '.tar.bz2') self.logger().info('Packaging %s', package_path) args = ['tar', '-cjC', install_host_dir, '-f', package_path, package_name] if host.startswith('windows'): @@ -1615,12 +1629,13 @@ class LlvmPackage(BuildUtils): # replace them with file copies args.insert(1, '--dereference') + self.check_create_dir(self.build_config.PACKAGES_PATH) self.check_call(args) # Package ohos NDK if os.path.exists(self.merge_out_path('sysroot')): tarball_ndk_name = 'ohos-sysroot-%s' % self.build_config.build_name - package_ndk_path = '%s%s' % (self.merge_out_path(tarball_ndk_name), '.tar.bz2') + package_ndk_path = '%s%s' % (self.merge_packages_path(tarball_ndk_name), '.tar.bz2') self.logger().info('Packaging %s', package_ndk_path) args = ['tar', '-chjC', self.build_config.OUT_PATH, '-f', package_ndk_path, 'sysroot'] self.check_call(args) @@ -1868,5 +1883,8 @@ def main(): if build_config.do_package and need_windows: llvm_package.package_operation(windows64_install, 'windows-x86_64') + if build_config.build_clean: + build_utils.rm_build_output() + if __name__ == '__main__': main() diff --git a/llvm-build/build_musl.sh b/llvm-build/build_musl.sh index 123da9a1eec6..7f7f44c774e2 100755 --- a/llvm-build/build_musl.sh +++ b/llvm-build/build_musl.sh @@ -99,22 +99,24 @@ echo "TOPDIR=${TOPDIR}" echo "TARGETS=${TARGET_USER}" echo "OUT=${OUT}" echo "SYSROOTDIR=${OUT}/sysroot" +echo "MUSLCOPYDIR=${OUT}/musl_build" # build musl_headers make musl_header_install_for_${TARGET_USER} CLANG="${CLANG_BIN_ROOT}/clang" TOPDIR=${TOPDIR} \ - SYSROOTDIR=${OUT}/sysroot TARGETS=${TARGET_USER} TARGET=${TARGET_TRIPLE} ARCH=${TARGETS_PREFIX} -f Makefile + SYSROOTDIR=${OUT}/sysroot TARGETS=${TARGET_USER} MUSLCOPYDIR=${OUT}/musl_build TARGET=${TARGET_TRIPLE} \ + ARCH=${TARGETS_PREFIX} -f Makefile # build musl_libs if ((make_libs == 1)); then if [ $TARGET_TRIPLE == "aarch64-linux-ohos" ] || [ $TARGET_TRIPLE == "riscv64-linux-ohos" ] || \ [ $TARGET_TRIPLE == "x86_64-linux-ohos" ]; then - make CLANG="${CLANG_BIN_ROOT}/clang" TOPDIR=${TOPDIR} SYSROOTDIR=${OUT}/sysroot TARGETS=${TARGET_USER}\ - TARGET=${TARGET_TRIPLE} ARCH=${TARGETS_PREFIX} -f Makefile + make CLANG="${CLANG_BIN_ROOT}/clang" TOPDIR=${TOPDIR} SYSROOTDIR=${OUT}/sysroot MUSLCOPYDIR=${OUT}/musl_build \ + TARGETS=${TARGET_USER} TARGET=${TARGET_TRIPLE} ARCH=${TARGETS_PREFIX} -f Makefile else for ARCH_CFLAG in "${CFLAGS_FOR_TARGET[@]}" do - make CLANG="${CLANG_BIN_ROOT}/clang" TOPDIR=${TOPDIR} SYSROOTDIR=${OUT}/sysroot TARGETS=${TARGET_USER}\ - TARGET=${TARGET_TRIPLE} ARCH=${TARGETS_PREFIX} ARCH_CFLAGS="${ARCH_CFLAG}" -f Makefile + make CLANG="${CLANG_BIN_ROOT}/clang" TOPDIR=${TOPDIR} SYSROOTDIR=${OUT}/sysroot MUSLCOPYDIR=${OUT}/musl_build \ + TARGETS=${TARGET_USER} TARGET=${TARGET_TRIPLE} ARCH=${TARGETS_PREFIX} ARCH_CFLAGS="${ARCH_CFLAG}" -f Makefile done fi fi -- Gitee