From c0528b24b56fb1b5058aea04e8977a4a5b6f1219 Mon Sep 17 00:00:00 2001 From: Megvii Engine Team Date: Tue, 11 Aug 2020 13:03:26 +0800 Subject: [PATCH] chore(third_party): add cpuinfo --- .gitmodules | 3 + third_party/apply-patches.sh | 20 +++++ third_party/cpuinfo | 1 + ...0001-fix-arm-linux-fix-uclibc-build-error.patch | 86 ++++++++++++++++++++++ third_party/prepare.sh | 9 +++ 5 files changed, 119 insertions(+) create mode 100755 third_party/apply-patches.sh create mode 160000 third_party/cpuinfo create mode 100644 third_party/patches/0001-fix-arm-linux-fix-uclibc-build-error.patch diff --git a/.gitmodules b/.gitmodules index 68edae23..4c6835b5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -25,3 +25,6 @@ [submodule "third_party/flatbuffers"] path = third_party/flatbuffers url = https://github.com/google/flatbuffers.git +[submodule "third_party/cpuinfo"] + path = third_party/cpuinfo + url = https://github.com/pytorch/cpuinfo.git diff --git a/third_party/apply-patches.sh b/third_party/apply-patches.sh new file mode 100755 index 00000000..380fd239 --- /dev/null +++ b/third_party/apply-patches.sh @@ -0,0 +1,20 @@ +#!/bin/bash +set -e + +function apply_cpuinfo_patches() { + if [ -d "./cpuinfo" ]; then + cp ./patches/0001-fix-arm-linux-fix-uclibc-build-error.patch cpuinfo/ + pushd cpuinfo >/dev/null + git am --abort || true + git rebase --abort || true + git reset --hard + # Use git apply instead of git am to prevent git require name in .gitconfig + git apply 0001-fix-arm-linux-fix-uclibc-build-error.patch + rm *.patch + popd >/dev/null + else + echo "cpuinfo not exist, can not apply patches." + echo "Please run: 'git submodule update --init cpuinfo' first." + exit -1 + fi +} diff --git a/third_party/cpuinfo b/third_party/cpuinfo new file mode 160000 index 00000000..63b25457 --- /dev/null +++ b/third_party/cpuinfo @@ -0,0 +1 @@ +Subproject commit 63b254577ed77a8004a9be6ac707f3dccc4e1fd9 diff --git a/third_party/patches/0001-fix-arm-linux-fix-uclibc-build-error.patch b/third_party/patches/0001-fix-arm-linux-fix-uclibc-build-error.patch new file mode 100644 index 00000000..86451750 --- /dev/null +++ b/third_party/patches/0001-fix-arm-linux-fix-uclibc-build-error.patch @@ -0,0 +1,86 @@ +From 0c64236f0d9463e508f8ebd8e73efafa0049d13b Mon Sep 17 00:00:00 2001 +From: Megvii Engine Team +Date: Thu, 30 Jul 2020 14:26:40 +0800 +Subject: [PATCH] fix(arm/linux): fix uclibc build error + +--- + src/arm/linux/hwcap.c | 7 ++++--- + src/arm/linux/init.c | 4 +++- + src/linux/processors.c | 5 +++++ + 3 files changed, 12 insertions(+), 4 deletions(-) + +diff --git a/src/arm/linux/hwcap.c b/src/arm/linux/hwcap.c +index 36d0d91..5e1c301 100644 +--- a/src/arm/linux/hwcap.c ++++ b/src/arm/linux/hwcap.c +@@ -15,7 +15,8 @@ + #include + #include + +-#if CPUINFO_ARCH_ARM64 || CPUINFO_ARCH_ARM && !defined(__ANDROID__) ++#if CPUINFO_ARCH_ARM64 || CPUINFO_ARCH_ARM && !defined(__ANDROID__) && !defined(__UCLIBC__) ++ + #include + #else + #define AT_HWCAP 16 +@@ -38,7 +39,7 @@ + #endif + + +-#if CPUINFO_ARCH_ARM ++#if CPUINFO_ARCH_ARM && !defined(__UCLIBC__) + typedef unsigned long (*getauxval_function_t)(unsigned long); + + bool cpuinfo_arm_linux_hwcap_from_getauxval( +@@ -144,7 +145,7 @@ + #endif + } + #endif /* __ANDROID__ */ +-#elif CPUINFO_ARCH_ARM64 ++#elif CPUINFO_ARCH_ARM64 && !defined(__UCLIBC__) + uint32_t cpuinfo_arm_linux_hwcap_from_getauxval(void) { + #if CPUINFO_MOCK + return mock_hwcap; +diff --git a/src/arm/linux/init.c b/src/arm/linux/init.c +index 89d957e..8225f5e 100644 +--- a/src/arm/linux/init.c ++++ b/src/arm/linux/init.c +@@ -234,6 +234,8 @@ void cpuinfo_arm_linux_init(void) { + cpuinfo_arm_linux_decode_chipset(proc_cpuinfo_hardware, proc_cpuinfo_revision, valid_processors, 0); + #endif + ++#if !defined(__UCLIBC__) ++ + #if CPUINFO_ARCH_ARM + uint32_t isa_features = 0, isa_features2 = 0; + #ifdef __ANDROID__ +@@ -282,7 +284,7 @@ void cpuinfo_arm_linux_init(void) { + cpuinfo_arm64_linux_decode_isa_from_proc_cpuinfo( + isa_features, last_midr, &chipset, &cpuinfo_isa); + #endif +- ++#endif + /* Detect min/max frequency and package ID */ + for (uint32_t i = 0; i < arm_linux_processors_count; i++) { + if (bitmask_all(arm_linux_processors[i].flags, CPUINFO_LINUX_FLAG_VALID)) { +diff --git a/src/linux/processors.c b/src/linux/processors.c +index 4904e2a..a1d4693 100644 +--- a/src/linux/processors.c ++++ b/src/linux/processors.c +@@ -90,8 +90,13 @@ static bool uint32_parser(const char* text_start, const char* text_end, void* co + uint32_t kernel_max = 0; + const char* parsed_end = parse_number(text_start, text_end, &kernel_max); + if (parsed_end == text_start) { ++#if defined(__UCLIBC__) ++ cpuinfo_log_warning("failed to parse file %s: \"%.*s\" is not an unsigned number", ++ KERNEL_MAX_FILENAME, (int) (text_end - text_start), text_start); ++#else + cpuinfo_log_error("failed to parse file %s: \"%.*s\" is not an unsigned number", + KERNEL_MAX_FILENAME, (int) (text_end - text_start), text_start); ++#endif + return false; + } else { + for (const char* char_ptr = parsed_end; char_ptr != text_end; char_ptr++) { +-- +2.26.2 + diff --git a/third_party/prepare.sh b/third_party/prepare.sh index 4e95e936..a893ad13 100755 --- a/third_party/prepare.sh +++ b/third_party/prepare.sh @@ -11,12 +11,21 @@ fi cd $(dirname $0) git submodule sync + +git submodule foreach --recursive git reset --hard +git submodule foreach --recursive git clean -fd + + git submodule update --init intel-mkl-dnn git submodule update --init Halide git submodule update --init protobuf git submodule update --init flatbuffers git submodule update --init gtest +git submodule update --init cpuinfo +source ./apply-patches.sh +apply_cpuinfo_patches + git submodule update --init OpenBLAS git submodule update --init libzmq git submodule update --init cppzmq