From 882284d7786caeeee3b6fae35fc1a58479b41410 Mon Sep 17 00:00:00 2001 From: sybapp Date: Fri, 14 Feb 2025 03:50:00 +0000 Subject: [PATCH] add initial loongarch64 architecture support Change-Id: I15b68733c0e1cee6c3b07bdd96ecd6c0a819db71 Signed-off-by: sybapp --- ace_config.gni | 3 +++ adapter/ohos/entrance/BUILD.gn | 2 ++ adapter/ohos/entrance/ace_container.cpp | 2 ++ adapter/ohos/entrance/pa_engine/engine/jsi/BUILD.gn | 2 ++ adapter/ohos/osal/ace_engine_ext.cpp | 2 +- adapter/ohos/osal/data_detector_loader.cpp | 2 +- adapter/ohos/osal/data_url_analyzer_loader.cpp | 2 +- adapter/ohos/osal/image_analyzer_loader.cpp | 2 +- adapter/ohos/osal/stylus_detector_loader.cpp | 2 +- adapter/ohos/osal/text_share_loader.cpp | 2 +- adapter/ohos/osal/text_translation_loader.cpp | 2 +- build/tools/run_objcopy.py | 2 ++ build/tools/run_objcopy_pc_mac.py | 2 ++ frameworks/bridge/declarative_frontend/BUILD.gn | 10 ++++++++++ .../bridge/declarative_frontend/engine/jsi/BUILD.gn | 2 ++ frameworks/bridge/js_frontend/engine/BUILD.gn | 5 +++++ .../bridge/js_frontend/engine/common/js_engine.cpp | 2 +- frameworks/bridge/js_frontend/engine/jsi/BUILD.gn | 2 ++ frameworks/core/components_ng/base/frame_node.cpp | 2 +- .../select_overlay/expanded_menu_plugin_loader.h | 2 +- interfaces/inner_api/ace/uicast/uicast_subscriber.cpp | 2 +- 21 files changed, 43 insertions(+), 11 deletions(-) diff --git a/ace_config.gni b/ace_config.gni index 91adf3ca1de..f07116f57c2 100644 --- a/ace_config.gni +++ b/ace_config.gni @@ -144,6 +144,9 @@ if (is_ohos_standard_system) { if (host_cpu == "arm64") { objcopy_default = "//prebuilts/clang/ohos/linux-aarch64/llvm/bin/llvm-objcopy" + } else if (host_cpu == "loongarch64") { + objcopy_default = + "//prebuilts/clang/ohos/linux-loongarch64/llvm/bin/llvm-objcopy" } else { objcopy_default = "//prebuilts/clang/ohos/linux-x86_64/llvm/bin/llvm-objcopy" diff --git a/adapter/ohos/entrance/BUILD.gn b/adapter/ohos/entrance/BUILD.gn index 34e6ee621eb..250c52212bb 100644 --- a/adapter/ohos/entrance/BUILD.gn +++ b/adapter/ohos/entrance/BUILD.gn @@ -85,6 +85,8 @@ template("ace_ohos_standard_source_set") { if (target_cpu == "arm64") { defines += [ "_ARM64_" ] + } else if (target_cpu == "loongarch64") { + defines += [ "_LOONGARCH64_" ] } if (current_os == "ohos" && current_cpu == "x86_64") { defines += [ "SIMULATOR_64" ] diff --git a/adapter/ohos/entrance/ace_container.cpp b/adapter/ohos/entrance/ace_container.cpp index 8db821765ac..39049b1f3d8 100644 --- a/adapter/ohos/entrance/ace_container.cpp +++ b/adapter/ohos/entrance/ace_container.cpp @@ -123,6 +123,8 @@ constexpr uint32_t RES_TYPE_CROWN_ROTATION_STATUS = 129; constexpr int32_t EXTENSION_HALF_SCREEN_MODE = 2; #ifdef _ARM64_ const std::string ASSET_LIBARCH_PATH = "/lib/arm64"; +#elif defined(_LOONGARCH64_) +const std::string ASSET_LIBARCH_PATH = "/lib/loongarch64"; #else const std::string ASSET_LIBARCH_PATH = "/lib/arm"; #endif diff --git a/adapter/ohos/entrance/pa_engine/engine/jsi/BUILD.gn b/adapter/ohos/entrance/pa_engine/engine/jsi/BUILD.gn index 99b774161e2..e283c65747c 100644 --- a/adapter/ohos/entrance/pa_engine/engine/jsi/BUILD.gn +++ b/adapter/ohos/entrance/pa_engine/engine/jsi/BUILD.gn @@ -110,6 +110,8 @@ template("js_pa_engine_ark") { defines += [ "APP_USE_ARM64" ] } else if (target_cpu == "arm") { defines += [ "APP_USE_ARM" ] + } else if (target_cpu == "loongarch64") { + defines += [ "APP_USE_LOONGARCH64" ] } } } diff --git a/adapter/ohos/osal/ace_engine_ext.cpp b/adapter/ohos/osal/ace_engine_ext.cpp index f35220e76b2..37fc785dae9 100644 --- a/adapter/ohos/osal/ace_engine_ext.cpp +++ b/adapter/ohos/osal/ace_engine_ext.cpp @@ -21,7 +21,7 @@ namespace OHOS::Ace { namespace { -#if (defined(__aarch64__) || defined(__x86_64__)) +#if (defined(__aarch64__) || defined(__x86_64__) || defined(__loongarch_lp64)) const std::string DRAG_EXTENSION_SO_PATH = "system/lib64/module/autorun/libhmos_drag_drop.z.so"; #else const std::string DRAG_EXTENSION_SO_PATH = "system/lib/module/autorun/libhmos_drag_drop.z.so"; diff --git a/adapter/ohos/osal/data_detector_loader.cpp b/adapter/ohos/osal/data_detector_loader.cpp index 3060034d0bd..e8e87bc82b2 100644 --- a/adapter/ohos/osal/data_detector_loader.cpp +++ b/adapter/ohos/osal/data_detector_loader.cpp @@ -18,7 +18,7 @@ #include "core/common/ai/data_detector_loader.h" namespace OHOS::Ace { namespace { -#ifdef __aarch64__ +#if (defined(__aarch64__) || defined(__x86_64__) || defined(__loongarch_lp64)) constexpr char AI_ADAPTER_SO_PATH[] = "system/lib64/libai_text_analyzer_innerapi.z.so"; #else constexpr char AI_ADAPTER_SO_PATH[] = "system/lib/libai_text_analyzer_innerapi.z.so"; diff --git a/adapter/ohos/osal/data_url_analyzer_loader.cpp b/adapter/ohos/osal/data_url_analyzer_loader.cpp index ca68a08f6e6..d816cafc55c 100644 --- a/adapter/ohos/osal/data_url_analyzer_loader.cpp +++ b/adapter/ohos/osal/data_url_analyzer_loader.cpp @@ -18,7 +18,7 @@ #include "core/common/ai/data_url_analyzer_loader.h" namespace OHOS::Ace { namespace { -#ifdef __aarch64__ + #if (defined(__aarch64__) || defined(__x86_64__) || defined(__loongarch_lp64)) constexpr char AI_ADAPTER_SO_PATH[] = "system/lib64/libai_nlu_innerapi.z.so"; #else constexpr char AI_ADAPTER_SO_PATH[] = "system/lib/libai_nlu_innerapi.z.so"; diff --git a/adapter/ohos/osal/image_analyzer_loader.cpp b/adapter/ohos/osal/image_analyzer_loader.cpp index afa87f8e2af..c94ae786122 100644 --- a/adapter/ohos/osal/image_analyzer_loader.cpp +++ b/adapter/ohos/osal/image_analyzer_loader.cpp @@ -20,7 +20,7 @@ namespace OHOS::Ace { namespace { -#ifdef __aarch64__ + #if (defined(__aarch64__) || defined(__x86_64__) || defined(__loongarch_lp64)) constexpr char IMAGE_ANALYZER_SO_PATH[] = "system/lib64/libai_image_analyzer_innerapi.z.so"; #else constexpr char IMAGE_ANALYZER_SO_PATH[] = "system/lib/libai_image_analyzer_innerapi.z.so"; diff --git a/adapter/ohos/osal/stylus_detector_loader.cpp b/adapter/ohos/osal/stylus_detector_loader.cpp index 7799f6108b0..c21190af706 100644 --- a/adapter/ohos/osal/stylus_detector_loader.cpp +++ b/adapter/ohos/osal/stylus_detector_loader.cpp @@ -21,7 +21,7 @@ namespace OHOS::Ace { namespace { -#if (defined(__aarch64__) || defined(__x86_64__)) +#if (defined(__aarch64__) || defined(__x86_64__) || defined(__loongarch_lp64)) const std::string STYLUS_CLIENT_SO_PATH = "/system/lib64/libstylus_innerapi.z.so"; #else const std::string STYLUS_CLIENT_SO_PATH = "/system/lib/libstylus_innerapi.z.so"; diff --git a/adapter/ohos/osal/text_share_loader.cpp b/adapter/ohos/osal/text_share_loader.cpp index 65abfcabe8a..4e309f468f1 100644 --- a/adapter/ohos/osal/text_share_loader.cpp +++ b/adapter/ohos/osal/text_share_loader.cpp @@ -19,7 +19,7 @@ namespace OHOS::Ace { namespace { -#ifdef __aarch64__ + #if (defined(__aarch64__) || defined(__x86_64__) || defined(__loongarch_lp64)) constexpr char TEXT_SHARE_SO_PATH[] = "system/lib64/libsystemshare_innerkits.z.so"; #else constexpr char TEXT_SHARE_SO_PATH[] = "system/lib/libsystemshare_innerkits.z.so"; diff --git a/adapter/ohos/osal/text_translation_loader.cpp b/adapter/ohos/osal/text_translation_loader.cpp index 0ed8e093127..a2fb8993d2d 100644 --- a/adapter/ohos/osal/text_translation_loader.cpp +++ b/adapter/ohos/osal/text_translation_loader.cpp @@ -21,7 +21,7 @@ namespace OHOS::Ace { namespace { -#ifdef __aarch64__ + #if (defined(__aarch64__) || defined(__x86_64__) || defined(__loongarch_lp64)) constexpr char AI_TEXT_TRANS_SO_PATH[] = "system/lib64/libai_text_translation_innerapi.z.so"; #else constexpr char AI_TEXT_TRANS_SO_PATH[] = "system/lib/libai_text_translation_innerapi.z.so"; diff --git a/build/tools/run_objcopy.py b/build/tools/run_objcopy.py index 855c3d7df87..6d6c015768f 100755 --- a/build/tools/run_objcopy.py +++ b/build/tools/run_objcopy.py @@ -26,6 +26,7 @@ OUTPUT_TARGET = { "x86_64": "elf64-x86-64", "arm": "elf32-littlearm", "arm64": "elf64-littleaarch64", + "loongarch64": "elf64-loongarch", } BUILD_ID_LINK_OUTPUT = { @@ -33,6 +34,7 @@ BUILD_ID_LINK_OUTPUT = { "x86_64": "i386:x86-64", "arm": "arm", "arm64": "aarch64", + "loongarch64": "loongarch64", } diff --git a/build/tools/run_objcopy_pc_mac.py b/build/tools/run_objcopy_pc_mac.py index c3936d616bd..c8cae9d6a1a 100755 --- a/build/tools/run_objcopy_pc_mac.py +++ b/build/tools/run_objcopy_pc_mac.py @@ -27,6 +27,7 @@ OUTPUT_TARGET = { "x86_64": "pe-x86-64", "arm": "elf32-littlearm", "arm64": "elf64-littleaarch64", + "loongarch64": "elf64-loongarch", } BUILD_ID_LINK_OUTPUT = { @@ -35,6 +36,7 @@ BUILD_ID_LINK_OUTPUT = { "x86_64": "i386:x86-64", "arm": "arm", "arm64": "aarch64", + "loongarch64": "loongarch64", } diff --git a/frameworks/bridge/declarative_frontend/BUILD.gn b/frameworks/bridge/declarative_frontend/BUILD.gn index 34ef6bbda08..a04caec168d 100644 --- a/frameworks/bridge/declarative_frontend/BUILD.gn +++ b/frameworks/bridge/declarative_frontend/BUILD.gn @@ -188,6 +188,11 @@ template("declarative_js_engine") { defines += [ "_ARM64_" ] } } + if (target_cpu == "loongarch64") { + if (!is_mingw) { + defines += [ "_LOONGARCH64_" ] + } + } if (current_os == "ohos" && current_cpu == "x86_64") { defines += [ "SIMULATOR_64" ] } @@ -754,6 +759,11 @@ template("declarative_js_engine_ng") { defines += [ "_ARM64_" ] } } + if (target_cpu == "loongarch64") { + if (!is_mingw) { + defines += [ "_LOONGARCH64_" ] + } + } if (current_os == "ohos" && current_cpu == "x86_64") { defines += [ "SIMULATOR_64" ] } diff --git a/frameworks/bridge/declarative_frontend/engine/jsi/BUILD.gn b/frameworks/bridge/declarative_frontend/engine/jsi/BUILD.gn index b84dc9e6027..116cf4c3fd2 100644 --- a/frameworks/bridge/declarative_frontend/engine/jsi/BUILD.gn +++ b/frameworks/bridge/declarative_frontend/engine/jsi/BUILD.gn @@ -197,6 +197,8 @@ template("declarative_js_engine_ark") { defines += [ "APP_USE_ARM64" ] } else if (target_cpu == "arm") { defines += [ "APP_USE_ARM" ] + } else if (target_cpu == "loongarch64") { + defines += [ "APP_USE_LOONGARCH64" ] } configs = [ "$ace_root:ace_config" ] diff --git a/frameworks/bridge/js_frontend/engine/BUILD.gn b/frameworks/bridge/js_frontend/engine/BUILD.gn index 5687982532c..40413ed1265 100644 --- a/frameworks/bridge/js_frontend/engine/BUILD.gn +++ b/frameworks/bridge/js_frontend/engine/BUILD.gn @@ -27,6 +27,11 @@ template("js_engine") { defines += [ "_ARM64_" ] } } + if (target_cpu == "loongarch64") { + if (!is_mingw) { + defines += [ "_LOONGARCH64_" ] + } + } if (current_os == "ohos" && current_cpu == "x86_64") { defines += [ "SIMULATOR_64" ] } diff --git a/frameworks/bridge/js_frontend/engine/common/js_engine.cpp b/frameworks/bridge/js_frontend/engine/common/js_engine.cpp index 812f83794c1..019136db4ac 100644 --- a/frameworks/bridge/js_frontend/engine/common/js_engine.cpp +++ b/frameworks/bridge/js_frontend/engine/common/js_engine.cpp @@ -41,7 +41,7 @@ PixelMapNapiEntry JsEngine::GetPixelMapNapiEntry() #else static PixelMapNapiEntry pixelMapNapiEntry_ = nullptr; if (!pixelMapNapiEntry_) { -#if defined(_ARM64_) || defined(SIMULATOR_64) +#if defined(_ARM64_) || defined(SIMULATOR_64) || defined(_LOONGARCH64_) std::string prefix = "/system/lib64/module/"; #else std::string prefix = "/system/lib/module/"; diff --git a/frameworks/bridge/js_frontend/engine/jsi/BUILD.gn b/frameworks/bridge/js_frontend/engine/jsi/BUILD.gn index 38b04158bea..488e8c024b5 100644 --- a/frameworks/bridge/js_frontend/engine/jsi/BUILD.gn +++ b/frameworks/bridge/js_frontend/engine/jsi/BUILD.gn @@ -123,6 +123,8 @@ template("js_engine_ark") { defines += [ "APP_USE_ARM64" ] } else if (target_cpu == "arm") { defines += [ "APP_USE_ARM" ] + } else if (target_cpu == "loongarch64") { + defines += [ "APP_USE_LOONGARCH64" ] } # add for cross_platfrom_build temporarily, shall be removed after external_deps is supported diff --git a/frameworks/core/components_ng/base/frame_node.cpp b/frameworks/core/components_ng/base/frame_node.cpp index ee1d5c8ec15..fd0a09f8e06 100644 --- a/frameworks/core/components_ng/base/frame_node.cpp +++ b/frameworks/core/components_ng/base/frame_node.cpp @@ -2397,7 +2397,7 @@ void FrameNode::MarkModifyDone() eventHub_->MarkModifyDone(); } renderContext_->OnModifyDone(); -#if (defined(__aarch64__) || defined(__x86_64__)) +#if (defined(__aarch64__) || defined(__x86_64__) || defined(__loongarch_lp64)) if (Recorder::IsCacheAvaliable()) { auto pipeline = PipelineContext::GetCurrentContext(); CHECK_NULL_VOID(pipeline); diff --git a/frameworks/core/components_ng/pattern/select_overlay/expanded_menu_plugin_loader.h b/frameworks/core/components_ng/pattern/select_overlay/expanded_menu_plugin_loader.h index 53eea6d639d..86524a409b3 100644 --- a/frameworks/core/components_ng/pattern/select_overlay/expanded_menu_plugin_loader.h +++ b/frameworks/core/components_ng/pattern/select_overlay/expanded_menu_plugin_loader.h @@ -23,7 +23,7 @@ namespace OHOS::Ace::NG { class ExpandedMenuPluginLoader { -#if (defined(__aarch64__) || defined(__x86_64__)) +#if (defined(__aarch64__) || defined(__x86_64__) || defined(__loongarch_lp64)) const std::string EXPANDED_MENU_PLUGIN_SO_PATH = "/system/lib64/expanded_menu/libexpanded_menu.z.so"; #else const std::string EXPANDED_MENU_PLUGIN_SO_PATH = "/system/lib/expanded_menu/libexpanded_menu.z.so"; diff --git a/interfaces/inner_api/ace/uicast/uicast_subscriber.cpp b/interfaces/inner_api/ace/uicast/uicast_subscriber.cpp index 4c034906fff..66ec1e12edf 100644 --- a/interfaces/inner_api/ace/uicast/uicast_subscriber.cpp +++ b/interfaces/inner_api/ace/uicast/uicast_subscriber.cpp @@ -30,7 +30,7 @@ constexpr char UICAST_PROXY_UPDATE_CONTEXT_FUNC[] = "OHOS_ACE_UICastProxyUpdateC using UICastProxyStartFunc = void (*)(int, UIContent*); using UICastProxyUpdateContextFunc = void (*)(UIContent*); -#if (defined(__aarch64__) || defined(__x86_64__)) +#if (defined(__aarch64__) || defined(__x86_64__) || defined(__loongarch_lp64)) const char* DISTRIBUTED_UI_PROXY_SO_PATH = "/system/lib64/libace_uicast_proxy.z.so"; #else const char* DISTRIBUTED_UI_PROXY_SO_PATH = "/system/lib/libace_uicast_proxy.z.so"; -- Gitee