From c88315281f3fd9d7967bd8a133cd45eba946c715 Mon Sep 17 00:00:00 2001 From: zeshanpeng Date: Thu, 30 May 2024 22:29:05 -0400 Subject: [PATCH] [XVM] Introduce a new CMake macro and an option for generating pluggable dynamic library Description: A new CMake macro and an option (--build-xvm) for generating pluggable dynamic library. The corresponding issue is here: https://gitee.com/openharmony/third_party_llvm-project/issues/I9TPKG Signed-off-by: zeshanpeng --- llvm-build/build.py | 19 +++++++-- llvm/CMakeLists.txt | 2 + llvm/lib/Target/XVM/CMakeLists.txt | 2 +- .../Target/XVM/MCTargetDesc/CMakeLists.txt | 2 +- llvm/lib/Target/XVM/TargetInfo/CMakeLists.txt | 2 +- llvm/tools/llvm-shlib/CMakeLists.txt | 42 +++++++++++-------- 6 files changed, 45 insertions(+), 24 deletions(-) diff --git a/llvm-build/build.py b/llvm-build/build.py index 6ab2dd662359..338b7096f742 100755 --- a/llvm-build/build.py +++ b/llvm-build/build.py @@ -62,6 +62,7 @@ class BuildConfig(): self.build_only_llvm = args.build_only["llvm"] if self.build_only else [] self.build_only_libs = args.build_only["libs"] if self.build_only else [] + self.build_xvm = (not args.skip_build) and args.build_xvm self.no_build_arm = args.skip_build or args.no_build_arm self.no_build_aarch64 = args.skip_build or args.no_build_aarch64 self.no_build_riscv64 = args.skip_build or args.no_build_riscv64 @@ -168,6 +169,12 @@ class BuildConfig(): default=False, help='Strip final LLVM binaries.') + parser.add_argument( + '--build-xvm', + action='store_true', + default=False, + help='Add building XVM target.') + parser.add_argument( '--no-build-arm', action='store_true', @@ -921,7 +928,8 @@ class LlvmCore(BuildUtils): no_lto=False, build_instrumented=False, build_target=None, - xunit_xml_output=None): + xunit_xml_output=None, + build_xvm=False): llvm_clang_install = os.path.abspath(os.path.join(self.build_config.REPOROOT_DIR, 'prebuilts/clang/ohos', self.use_platform(), @@ -974,7 +982,11 @@ class LlvmCore(BuildUtils): linker_path = os.path.join(llvm_clang_install, 'bin', 'ld.lld') llvm_defines['CMAKE_LINKER'] = linker_path - self.build_llvm(targets=self.build_config.TARGETS, + if build_xvm: + target_list = self.build_config.TARGETS + ";XVM" + else: + target_list = self.build_config.TARGETS + self.build_llvm(targets=target_list, build_dir=llvm_path, install_dir=out_dir, build_name=build_name, @@ -2794,7 +2806,8 @@ def main(): build_config.no_lto, build_config.build_instrumented, build_config.build_only_llvm, - build_config.xunit_xml_output) + build_config.xunit_xml_output, + build_config.build_xvm) llvm_package.copy_python_to_host(llvm_make) llvm_package.copy_python_to_host(llvm_install) diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt index 34c1f19a9f95..1cc0e305db3c 100644 --- a/llvm/CMakeLists.txt +++ b/llvm/CMakeLists.txt @@ -704,6 +704,8 @@ else() set(LLVM_BUILD_LLVM_DYLIB_default ON) endif() option(LLVM_BUILD_LLVM_DYLIB "Build libllvm dynamic library" ${LLVM_BUILD_LLVM_DYLIB_default}) + # OHOS_LOCAL + option(LLVM_SPLIT_LLVM_DYLIB_TARGETS "Build dynamic target libraries" OFF) endif() if (LLVM_LINK_LLVM_DYLIB AND BUILD_SHARED_LIBS) diff --git a/llvm/lib/Target/XVM/CMakeLists.txt b/llvm/lib/Target/XVM/CMakeLists.txt index 0f5ef89440fd..0fe324ea3f8b 100644 --- a/llvm/lib/Target/XVM/CMakeLists.txt +++ b/llvm/lib/Target/XVM/CMakeLists.txt @@ -1,5 +1,5 @@ -if(LLVM_BUILD_LLVM_DYLIB) +if(LLVM_SPLIT_LLVM_DYLIB_TARGETS) ADD_DEFINITIONS("-DXVM_DYLIB_MODE=1") endif() diff --git a/llvm/lib/Target/XVM/MCTargetDesc/CMakeLists.txt b/llvm/lib/Target/XVM/MCTargetDesc/CMakeLists.txt index 04738c3f0a8c..d290513bf911 100644 --- a/llvm/lib/Target/XVM/MCTargetDesc/CMakeLists.txt +++ b/llvm/lib/Target/XVM/MCTargetDesc/CMakeLists.txt @@ -1,5 +1,5 @@ -if(LLVM_BUILD_LLVM_DYLIB) +if(LLVM_SPLIT_LLVM_DYLIB_TARGETS) ADD_DEFINITIONS("-DXVM_DYLIB_MODE=1") endif() diff --git a/llvm/lib/Target/XVM/TargetInfo/CMakeLists.txt b/llvm/lib/Target/XVM/TargetInfo/CMakeLists.txt index aad77bae6d27..3d9481cfe3e6 100644 --- a/llvm/lib/Target/XVM/TargetInfo/CMakeLists.txt +++ b/llvm/lib/Target/XVM/TargetInfo/CMakeLists.txt @@ -1,5 +1,5 @@ -if(LLVM_BUILD_LLVM_DYLIB) +if(LLVM_SPLIT_LLVM_DYLIB_TARGETS) ADD_DEFINITIONS("-DXVM_DYLIB_MODE=1") endif() diff --git a/llvm/tools/llvm-shlib/CMakeLists.txt b/llvm/tools/llvm-shlib/CMakeLists.txt index f48196378489..45adda0b88e5 100644 --- a/llvm/tools/llvm-shlib/CMakeLists.txt +++ b/llvm/tools/llvm-shlib/CMakeLists.txt @@ -28,20 +28,21 @@ if(LLVM_BUILD_LLVM_DYLIB) list(REMOVE_ITEM LIB_NAMES "LLVMTableGen") # OHOS_LOCAL begin - foreach(target ${LLVM_TARGETS_TO_BUILD}) - get_property(target_link_components TARGET ${target} PROPERTY LLVM_LINK_COMPONENTS) - set(objects "") - foreach(component ${target_link_components}) - list(REMOVE_ITEM LIB_NAMES "LLVM${component}") - list(APPEND objects "$") + if (LLVM_SPLIT_LLVM_DYLIB_TARGETS) + foreach(target ${LLVM_TARGETS_TO_BUILD}) + get_property(target_link_components TARGET ${target} PROPERTY LLVM_LINK_COMPONENTS) + set(objects "") + foreach(component ${target_link_components}) + list(REMOVE_ITEM LIB_NAMES "LLVM${component}") + list(APPEND objects "$") + endforeach() + add_llvm_library("LLVM${target}Target" + MODULE + DISABLE_LLVM_LINK_LLVM_DYLIB + ${INSTALL_WITH_TOOLCHAIN} + OBJLIBS ${objects}) endforeach() - add_llvm_library("LLVM${target}Target" - MODULE - DISABLE_LLVM_LINK_LLVM_DYLIB - ${INSTALL_WITH_TOOLCHAIN} - OBJLIBS ${objects}) - - endforeach() + endif() # OHOS_LOCAL end if(LLVM_DYLIB_EXPORTED_SYMBOL_FILE) @@ -50,8 +51,11 @@ if(LLVM_BUILD_LLVM_DYLIB) endif() add_llvm_library(LLVM SHARED DISABLE_LLVM_LINK_LLVM_DYLIB SONAME ${INSTALL_WITH_TOOLCHAIN} ${SOURCES}) - # OHOS_LOCAL - target_compile_definitions(LLVM PRIVATE "LLVM_BUILD_BACKEND_MODULE") + # OHOS_LOCAL begin + if (LLVM_SPLIT_LLVM_DYLIB_TARGETS) + target_compile_definitions(LLVM PRIVATE "LLVM_BUILD_BACKEND_MODULE") + endif() + # OHOS_LOCAL end list(REMOVE_DUPLICATES LIB_NAMES) if(("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") OR (MINGW) OR (HAIKU) @@ -86,9 +90,11 @@ if(LLVM_BUILD_LLVM_DYLIB) target_link_libraries(LLVM PRIVATE ${LIB_NAMES}) # OHOS_LOCAL begin - foreach(target ${LLVM_TARGETS_TO_BUILD}) - add_dependencies(LLVM LLVM${target}Target) - endforeach() + if (LLVM_SPLIT_LLVM_DYLIB_TARGETS) + foreach(target ${LLVM_TARGETS_TO_BUILD}) + add_dependencies(LLVM LLVM${target}Target) + endforeach() + endif() # OHOS_LOCAL end if (APPLE) -- Gitee