From 060a0fe6224c72e4f04638787468194c8a5c04ba Mon Sep 17 00:00:00 2001 From: Lyupa Anastasia Date: Fri, 8 Sep 2023 16:07:09 +0300 Subject: [PATCH 1/3] [build][OHOS] Build toolchain for OHOS host Add script to build toolchain for OHOS AArch64 host after main build Issue: https://gitee.com/openharmony/third_party_llvm-project/issues/I7XIP3 Signed-off-by: Lyupa Anastasia --- llvm-build/build-ohos-aarch64.py | 112 +++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 llvm-build/build-ohos-aarch64.py diff --git a/llvm-build/build-ohos-aarch64.py b/llvm-build/build-ohos-aarch64.py new file mode 100644 index 000000000000..b7272dc6d204 --- /dev/null +++ b/llvm-build/build-ohos-aarch64.py @@ -0,0 +1,112 @@ +import os + +from build import BuildConfig, BuildUtils + +def main(): + print('Start building LLVM toolchain for OHOS AArch64 host') + build_config = BuildConfig() + build_utils = BuildUtils(build_config) + + llvm_project_path = os.path.abspath(os.path.join(build_config.LLVM_PROJECT_DIR, 'llvm')) + llvm_path = build_utils.merge_out_path('ohos-aarch64') + llvm_install = build_utils.merge_out_path('ohos-aarch64-install') + llvm_root = build_utils.merge_out_path('llvm-install') + sysroot = build_utils.merge_out_path('sysroot') + + llvm_triple = 'aarch64-linux-ohos' + + cflags = [ '-v', + '-fstack-protector-strong', + '-fdata-sections', + '-ffunction-sections', + '-funwind-tables', + '-no-canonical-prefixes', + '-D__MUSL__', + '-target %s' % llvm_triple, + ] + + cflags_debug = '-O0 -g -fno-limit-debug-info' + cflags_release = '-O2 -DNDEBUG' + + ldflags = [ '-fuse-ld=lld', + '--rtlib=compiler-rt', + '-lunwind', + '-stdlib=libc++', + '-static-libstdc++', + '-pie', + '-Wl,--build-id=sha1', + '-Wl,-z,relro,-z,now', + '-Wl,--dynamic-linker=/lib/ld-musl-aarch64.so.1', + ] + + if build_config.strip: + ldflags.append('-s') + + llvm_extra_env = {} + llvm_extra_env['LD_LIBRARY_PATH'] = os.path.join(llvm_root, 'lib') + env = dict(build_config.ORIG_ENV) + if llvm_extra_env is not None: + env.update(llvm_extra_env) + + llvm_defines = {} + llvm_defines['CMAKE_SYSTEM_NAME'] = 'OHOS' + llvm_defines['CMAKE_CROSSCOMPILING'] = 'True' + llvm_defines['CMAKE_INSTALL_PREFIX'] = llvm_install + llvm_defines['CMAKE_SYSROOT'] = sysroot + llvm_defines['CMAKE_LIBRARY_ARCHITECTURE'] = llvm_triple + llvm_defines['LLVM_TARGETS_TO_BUILD'] = 'AArch64' + llvm_defines['LLVM_TARGET_ARCH'] = 'AArch64' + llvm_defines['LLVM_DEFAULT_TARGET_TRIPLE'] = llvm_triple + llvm_defines['LLVM_BUILD_LLVM_DYLIB'] = 'ON' + llvm_defines['LLVM_LINK_LLVM_DYLIB'] = 'ON' + llvm_defines['LLVM_ENABLE_PROJECTS'] = 'clang;lld' + llvm_defines['LLVM_CONFIG_PATH'] = os.path.join(llvm_root, 'bin', 'llvm-config') + llvm_defines['LLVM_TABLEGEN'] = os.path.join(llvm_root, 'bin', 'llvm-tblgen') + llvm_defines['CLANG_TABLEGEN'] = build_utils.merge_out_path('llvm_make', 'bin', 'clang-tblgen') + llvm_defines['CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN'] = llvm_root + llvm_defines['CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN'] = llvm_root + llvm_defines['CMAKE_ASM_COMPILER_EXTERNAL_TOOLCHAIN'] = llvm_root + llvm_defines['CMAKE_C_COMPILER'] = os.path.join(llvm_root, 'bin', 'clang') + llvm_defines['CMAKE_CXX_COMPILER'] = os.path.join(llvm_root, 'bin', 'clang++') + llvm_defines['CMAKE_AR'] = os.path.join(llvm_root, 'bin', 'llvm-ar') + llvm_defines['CMAKE_NM'] = os.path.join(llvm_root, 'bin', 'llvm-nm') + llvm_defines['CMAKE_RANLIB'] = os.path.join(llvm_root, 'bin', 'llvm-ranlib') + llvm_defines['CMAKE_OBJCOPY'] = os.path.join(llvm_root, 'bin', 'llvm-objcopy') + llvm_defines['CMAKE_OBJDUMP'] = os.path.join(llvm_root, 'bin', 'llvm-objdump') + llvm_defines['CMAKE_READELF'] = os.path.join(llvm_root, 'bin', 'llvm-readelf') + llvm_defines['CMAKE_STRIP'] = os.path.join(llvm_root, 'bin', 'llvm-strip') + llvm_defines['CMAKE_LINKER'] = os.path.join(llvm_root, 'bin', 'ld.lld') + llvm_defines['CMAKE_ASM_FLAGS'] = ' '.join(cflags) + llvm_defines['CMAKE_C_FLAGS'] = ' '.join(cflags) + llvm_defines['CMAKE_CXX_FLAGS'] = ' '.join(cflags) + ' -stdlib=libc++' + llvm_defines['CMAKE_EXE_LINKER_FLAGS'] = ' '.join(ldflags) + ' -Wl,--gc-sections' + llvm_defines['CMAKE_SHARED_LINKER_FLAGS'] = ' '.join(ldflags) + llvm_defines['CMAKE_MODULE_LINKER_FLAGS'] = ' '.join(ldflags) + llvm_defines['CMAKE_FIND_ROOT_PATH_MODE_INCLUDE'] = 'ONLY' + llvm_defines['CMAKE_FIND_ROOT_PATH_MODE_LIBRARY'] = 'ONLY' + llvm_defines['CMAKE_FIND_ROOT_PATH_MODE_PACKAGE'] = 'ONLY' + llvm_defines['CMAKE_FIND_ROOT_PATH_MODE_PROGRAM'] = 'NEVER' + llvm_defines['CMAKE_POSITION_INDEPENDENT_CODE'] = 'True' + llvm_defines['Python3_EXECUTABLE'] = os.path.join(build_utils.get_python_dir(), 'bin', build_config.LLDB_PYTHON) + llvm_defines['CMAKE_C_FLAGS_DEBUG'] = cflags_debug + llvm_defines['CMAKE_CXX_FLAGS_DEBUG'] = cflags_debug + llvm_defines['CMAKE_ASM_FLAGS_DEBUG'] = cflags_debug + llvm_defines['CMAKE_C_FLAGS_RELEASE'] = cflags_release + llvm_defines['CMAKE_CXX_FLAGS_RELEASE'] = cflags_release + llvm_defines['CMAKE_ASM_FLAGS_RELEASE'] = cflags_release + + if build_config.enable_assertions: + llvm_defines['LLVM_ENABLE_ASSERTIONS'] = 'ON' + + if build_config.debug: + llvm_defines['CMAKE_BUILD_TYPE'] = 'Debug' + else: + llvm_defines['CMAKE_BUILD_TYPE'] = 'Release' + + build_utils.invoke_cmake(llvm_project_path, llvm_path, llvm_defines, env=env) + + build_utils.invoke_ninja(out_path=llvm_path, env=env, target=['clang', 'lld'], install=True) + + +if __name__ == '__main__': + main() -- Gitee From e72c3ba4ce1c842af6449bf62b8d0927b1c91e94 Mon Sep 17 00:00:00 2001 From: Lyupa Anastasia Date: Thu, 19 Oct 2023 11:17:26 +0300 Subject: [PATCH 2/3] [build][OHOS] Update options due to LLVMAOT needs Signed-off-by: Lyupa Anastasia --- llvm-build/build-ohos-aarch64.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/llvm-build/build-ohos-aarch64.py b/llvm-build/build-ohos-aarch64.py index b7272dc6d204..f197e3ea75cb 100644 --- a/llvm-build/build-ohos-aarch64.py +++ b/llvm-build/build-ohos-aarch64.py @@ -36,7 +36,6 @@ def main(): '-pie', '-Wl,--build-id=sha1', '-Wl,-z,relro,-z,now', - '-Wl,--dynamic-linker=/lib/ld-musl-aarch64.so.1', ] if build_config.strip: @@ -58,11 +57,16 @@ def main(): llvm_defines['LLVM_TARGET_ARCH'] = 'AArch64' llvm_defines['LLVM_DEFAULT_TARGET_TRIPLE'] = llvm_triple llvm_defines['LLVM_BUILD_LLVM_DYLIB'] = 'ON' - llvm_defines['LLVM_LINK_LLVM_DYLIB'] = 'ON' - llvm_defines['LLVM_ENABLE_PROJECTS'] = 'clang;lld' + llvm_defines['LLVM_ENABLE_FFI'] = 'OFF' + llvm_defines['LLVM_ENABLE_TERMINFO'] = 'OFF' + llvm_defines['LLVM_INCLUDE_BENCHMARKS'] = 'OFF' + llvm_defines['LLVM_INCLUDE_EXAMPLES'] = 'OFF' + llvm_defines['LLVM_INCLUDE_TESTS'] = 'OFF' + llvm_defines['LLVM_BUILD_TOOLS'] = 'ON' + llvm_defines['LLVM_ENABLE_ZLIB'] = 'OFF' + llvm_defines['LLVM_DISTRIBUTION_COMPONENTS'] = 'cmake-exports;llvm-headers;LLVM' llvm_defines['LLVM_CONFIG_PATH'] = os.path.join(llvm_root, 'bin', 'llvm-config') llvm_defines['LLVM_TABLEGEN'] = os.path.join(llvm_root, 'bin', 'llvm-tblgen') - llvm_defines['CLANG_TABLEGEN'] = build_utils.merge_out_path('llvm_make', 'bin', 'clang-tblgen') llvm_defines['CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN'] = llvm_root llvm_defines['CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN'] = llvm_root llvm_defines['CMAKE_ASM_COMPILER_EXTERNAL_TOOLCHAIN'] = llvm_root @@ -105,7 +109,7 @@ def main(): build_utils.invoke_cmake(llvm_project_path, llvm_path, llvm_defines, env=env) - build_utils.invoke_ninja(out_path=llvm_path, env=env, target=['clang', 'lld'], install=True) + build_utils.invoke_ninja(out_path=llvm_path, env=env, target=None, install=True) if __name__ == '__main__': -- Gitee From 685408ac3d7581f1d62855020a3c74fa7e1b184d Mon Sep 17 00:00:00 2001 From: Lyupa Anastasia Date: Tue, 14 Nov 2023 15:28:08 +0300 Subject: [PATCH 3/3] [build] Add build-ohos-aarch64.py info to README Signed-off-by: Lyupa Anastasia --- llvm-build/README.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/llvm-build/README.md b/llvm-build/README.md index 14bb02a45a31..cda87d553c1a 100644 --- a/llvm-build/README.md +++ b/llvm-build/README.md @@ -109,6 +109,28 @@ OHOS fetch prebuilts from: https://mirrors.huaweicloud.com/openharmony/compiler/ License: Apache License v2.0 with LLVM Exceptions ``` +### Build process of AArch64 LLVM components for Ark Runtime + +First build toolchain on Linux. +Here is an example of starting build process on Linux: +``` +# build +python3 ./toolchain/llvm-project/llvm-build/build-ohos-aarch64.py +``` + +
+ +build-ohos-aarch64.py options: + +``` +--enable-assertions # enable assertion when compiling +--debug # build debug version llvm toolchain +--strip # strip llvm toolchain binaries +``` +
+ +When build successfully completed, artifacts will be available in `out/ohos-aarch64-install` directory, including LLVM tools and libLLVM.so for aarch64. + ## Function Introduction
-- Gitee