diff --git a/llvm-build/build.py b/llvm-build/build.py index 2ece38079dd387ca4b76b83a30e579a0c410d70f..33b914b484b5ff7539d43167c333e1fc2da65051 100755 --- a/llvm-build/build.py +++ b/llvm-build/build.py @@ -897,6 +897,13 @@ class LlvmLibs(BuildUtils): # libunwind is added to linker command line by OHOS toolchain, so we have to use two step build self.build_runtimes(llvm_install, "libunwind", ldflags, cflags, llvm_triple, arch, multilib_suffix, defines) self.build_runtimes(llvm_install, "libunwind;libcxxabi;libcxx", ldflags, cflags, llvm_triple, arch, multilib_suffix, defines) + + libcxx_ndk_install = self.merge_out_path('libcxx-ndk') + libcxx_ndk_install_tmp = self.merge_out_path('libcxx-ndk-tmp') + self.check_create_dir(libcxx_ndk_install) + self.build_runtimes(libcxx_ndk_install_tmp, "libunwind;libcxxabi;libcxx", ldflags, cflags, llvm_triple, + arch, multilib_suffix, defines, libcxx_ndk_install) + self.build_crts(llvm_install, arch, llvm_triple, cflags, ldflags, multilib_suffix, defines, first_time=False) @@ -921,11 +928,13 @@ class LlvmLibs(BuildUtils): llvm_triple, arch, multilib_suffix, - defines): + defines, + libcxx_ndk_install=None): - self.logger().info('Building runtimes(%s) for %s', (rt_list, arch)) + self.logger().info('Building runtimes(%s) for %s', rt_list, arch) - out_path = self.merge_out_path('lib', rt_list.replace(';', '-') + '-' + str(llvm_triple)) + ndk_suffix = '-ndk' if libcxx_ndk_install else '' + out_path = self.merge_out_path('lib', rt_list.replace(';', '-') + ndk_suffix + '-' + str(llvm_triple)) rt_cflags = list(cflags) rt_cflags.append('-fstack-protector-strong') @@ -945,7 +954,6 @@ class LlvmLibs(BuildUtils): rt_defines['LIBCXXABI_ENABLE_SHARED'] = 'OFF' rt_defines['LIBCXXABI_LIBCXX_INCLUDES'] = os.path.abspath(os.path.join(self.build_config.LLVM_PROJECT_DIR, 'libcxx', 'include')) rt_defines['LIBCXX_USE_COMPILER_RT'] = 'ON' - rt_defines['LIBCXX_ABI_NAMESPACE'] = '__h' rt_defines['LIBCXX_ENABLE_ABI_LINKER_SCRIPT'] = 'OFF' rt_defines['LIBCXX_ENABLE_STATIC_ABI_LIBRARY'] = 'ON' rt_defines['CMAKE_ASM_FLAGS'] = ' '.join(rt_cflags) @@ -956,6 +964,17 @@ class LlvmLibs(BuildUtils): rt_defines['CMAKE_SYSTEM_NAME'] = 'OHOS' rt_defines['CMAKE_CROSSCOMPILING'] = 'True' rt_defines['CMAKE_TRY_COMPILE_TARGET_TYPE'] = 'STATIC_LIBRARY' + + if libcxx_ndk_install: + rt_defines['LIBCXX_ABI_NAMESPACE'] = '__n1' + rt_defines['LIBCXX_OUTPUT_NAME'] = 'c++_shared' + rt_defines['LIBCXX_OUTPUT_STATIC_NAME'] = 'c++_static' + rt_defines['LIBCXX_INSTALL_INCLUDE_DIR'] = self.merge_out_path(libcxx_ndk_install, 'include', 'libcxx-ohos', 'include', 'c++', 'v1') + rt_defines['LIBCXX_INSTALL_LIBRARY_DIR'] = self.merge_out_path(libcxx_ndk_install, 'lib', llvm_triple, 'c++', multilib_suffix) + rt_defines['LIBCXXABI_INSTALL_LIBRARY'] = 'OFF' + rt_defines['LIBUNWIND_INSTALL_LIBRARY'] = 'OFF' + else: + rt_defines['LIBCXX_ABI_NAMESPACE'] = '__h' self.check_rm_tree(out_path) cmake_rt = os.path.abspath(os.path.join(self.build_config.LLVM_PROJECT_DIR, 'runtimes')) @@ -1426,6 +1445,7 @@ class LlvmPackage(BuildUtils): def package_libcxx(self): libcxx_ndk_install=self.merge_out_path('libcxx-ndk') + libcxx_ndk_install_tmp=self.merge_out_path('libcxx-ndk-tmp') 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'] @@ -1445,6 +1465,7 @@ class LlvmPackage(BuildUtils): args = ['tar', '-chjC', self.build_config.OUT_PATH, '-f', package_path, 'libcxx-ndk'] self.check_call(args) self.check_rm_tree(libcxx_ndk_install) + self.check_rm_tree(libcxx_ndk_install_tmp) @staticmethod def merge_tree(src_dir, dst_dir):