From 25615d6af5c78eaa505ea103c0c1ba95fe0c43a4 Mon Sep 17 00:00:00 2001 From: Dingli Zhang Date: Wed, 14 Aug 2024 15:38:16 +0000 Subject: [PATCH] Fix build error for riscv64 (cherry picked from commit 97167a2fbd7657ff99b5afeeabe9fc055cf89860) --- 0002-Fix-build-error-for-riscv64.patch | 74 ++++++++++++++++++++++++++ pytorch.spec | 8 ++- 2 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 0002-Fix-build-error-for-riscv64.patch diff --git a/0002-Fix-build-error-for-riscv64.patch b/0002-Fix-build-error-for-riscv64.patch new file mode 100644 index 0000000..c3115f7 --- /dev/null +++ b/0002-Fix-build-error-for-riscv64.patch @@ -0,0 +1,74 @@ +From 1dc0fa9e37959b8fedfd1799670388e3f06d0ecc Mon Sep 17 00:00:00 2001 +From: Dingli Zhang +Date: Tue, 16 Jul 2024 17:52:28 +0000 +Subject: [PATCH] Fix build error for riscv64 + + +diff --git a/third_party/benchmark/src/cycleclock.h b/third_party/benchmark/src/cycleclock.h +index d65d32a3..452e11e4 100644 +--- a/third_party/benchmark/src/cycleclock.h ++++ b/third_party/benchmark/src/cycleclock.h +@@ -208,7 +208,7 @@ inline BENCHMARK_ALWAYS_INLINE int64_t Now() { + asm volatile("rdcycle %0" : "=r"(cycles)); + return cycles; + #endif +-#elif defined(__e2k__) || defined(__elbrus__) ++#elif defined(__e2k__) || defined(__elbrus__) || defined(__riscv) + struct timeval tv; + gettimeofday(&tv, nullptr); + return static_cast(tv.tv_sec) * 1000000 + tv.tv_usec; +diff --git a/third_party/onnx-tensorrt/third_party/onnx/third_party/benchmark/src/cycleclock.h b/third_party/onnx-tensorrt/third_party/onnx/third_party/benchmark/src/cycleclock.h +index 3b376ac5..add2f298 100644 +--- a/third_party/onnx-tensorrt/third_party/onnx/third_party/benchmark/src/cycleclock.h ++++ b/third_party/onnx-tensorrt/third_party/onnx/third_party/benchmark/src/cycleclock.h +@@ -153,7 +153,7 @@ inline BENCHMARK_ALWAYS_INLINE int64_t Now() { + struct timeval tv; + gettimeofday(&tv, nullptr); + return static_cast(tv.tv_sec) * 1000000 + tv.tv_usec; +-#elif defined(__mips__) ++#elif defined(__mips__) || defined(__riscv) + // mips apparently only allows rdtsc for superusers, so we fall + // back to gettimeofday. It's possible clock_gettime would be better. + struct timeval tv; +diff --git a/third_party/onnx/third_party/benchmark/src/cycleclock.h b/third_party/onnx/third_party/benchmark/src/cycleclock.h +index d65d32a3..452e11e4 100644 +--- a/third_party/onnx/third_party/benchmark/src/cycleclock.h ++++ b/third_party/onnx/third_party/benchmark/src/cycleclock.h +@@ -208,7 +208,7 @@ inline BENCHMARK_ALWAYS_INLINE int64_t Now() { + asm volatile("rdcycle %0" : "=r"(cycles)); + return cycles; + #endif +-#elif defined(__e2k__) || defined(__elbrus__) ++#elif defined(__e2k__) || defined(__elbrus__) || defined(__riscv) + struct timeval tv; + gettimeofday(&tv, nullptr); + return static_cast(tv.tv_sec) * 1000000 + tv.tv_usec; +diff --git a/third_party/protobuf/third_party/benchmark/src/cycleclock.h b/third_party/protobuf/third_party/benchmark/src/cycleclock.h +index 4251fe4c..07d63307 100644 +--- a/third_party/protobuf/third_party/benchmark/src/cycleclock.h ++++ b/third_party/protobuf/third_party/benchmark/src/cycleclock.h +@@ -153,7 +153,7 @@ inline BENCHMARK_ALWAYS_INLINE int64_t Now() { + struct timeval tv; + gettimeofday(&tv, nullptr); + return static_cast(tv.tv_sec) * 1000000 + tv.tv_usec; +-#elif defined(__mips__) ++#elif defined(__mips__) || defined(__riscv) + // mips apparently only allows rdtsc for superusers, so we fall + // back to gettimeofday. It's possible clock_gettime would be better. + struct timeval tv; +diff --git a/third_party/sleef/src/arch/helperpurec_scalar.h b/third_party/sleef/src/arch/helperpurec_scalar.h +index e77e518f..f28c2b83 100644 +--- a/third_party/sleef/src/arch/helperpurec_scalar.h ++++ b/third_party/sleef/src/arch/helperpurec_scalar.h +@@ -54,7 +54,7 @@ + #define ENABLE_FMA_SP + //@#define ENABLE_FMA_SP + +-#if defined(__AVX2__) || defined(__aarch64__) || defined(__arm__) || defined(__powerpc64__) || defined(__zarch__) || CONFIG == 3 ++#if defined(__AVX2__) || defined(__aarch64__) || defined(__arm__) || defined(__powerpc64__) || defined(__zarch__) || defined(__riscv) || CONFIG == 3 + #ifndef FP_FAST_FMA + #define FP_FAST_FMA + //@#define FP_FAST_FMA +-- +2.41.0 + diff --git a/pytorch.spec b/pytorch.spec index 73c7523..f1b247d 100644 --- a/pytorch.spec +++ b/pytorch.spec @@ -1,13 +1,16 @@ %global _empty_manifest_terminate_build 0 Name: pytorch Version: 2.1.2 -Release: 2 +Release: 3 Summary: Tensors and Dynamic neural networks in Python with strong GPU acceleration License: BSD-3-Clause URL: https://pytorch.org/ Source0: https://github.com/pytorch/pytorch/releases/download/v%{version}/pytorch-v%{version}.tar.gz Patch1: 0001-add-Wno-error-nonnull-for-test-cpp-api.patch +%ifarch riscv64 +Patch2: 0002-Fix-build-error-for-riscv64.patch +%endif BuildRequires: g++ Requires: python3-future Requires: python3-numpy @@ -86,6 +89,9 @@ mv %{buildroot}/doclist.lst . %{_docdir}/* %changelog +* Wed Jul 17 2024 Dingli Zhang - 2.1.2-3 +- Fix build error for riscv64 + * Thu Jan 11 2024 Dongxing Wang - 2.1.2-2 - Patch: Add -Wno-error=nonnull for test/cpp/api/ -- Gitee