diff --git a/libEMF.changes b/libEMF.changes index 2e68b25..dc05079 100644 --- a/libEMF.changes +++ b/libEMF.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Sat Sep 24 08:37:06 UTC 2022 - Dirk Müller + +- add riscv64-support.patch +- enable build for riscv64 + ------------------------------------------------------------------- Mon Aug 17 09:51:29 UTC 2020 - Dirk Mueller diff --git a/libEMF.spec b/libEMF.spec index 6307a90..690a473 100644 --- a/libEMF.spec +++ b/libEMF.spec @@ -1,7 +1,7 @@ # # spec file for package libEMF # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -22,12 +22,13 @@ Release: 0 Summary: Library for Manipulation with Enhanced MetaFile (EMF, ECMA-234) License: GPL-2.0-or-later AND LGPL-2.1-or-later Group: System/Libraries -URL: http://libemf.sourceforge.net/ -Source: http://downloads.sourceforge.net/libemf/libemf-%{version}.tar.gz +URL: https://libemf.sourceforge.net/ +Source: https://downloads.sourceforge.net/libemf/libemf-%{version}.tar.gz +Patch1: riscv64-support.patch Patch2: ppc64le-support.patch BuildRequires: gcc-c++ # taken from includes/wine/winnt.h -ExclusiveArch: alpha %{arm} aarch64 %{ix86} mips ppc ppc64 ppc64le sparc s390 s390x x86_64 +ExclusiveArch: alpha %{arm} aarch64 %{ix86} mips ppc ppc64 ppc64le riscv64 sparc s390 s390x x86_64 %description LibEMF is a C/C++ library that provides a drawing toolkit based on @@ -89,8 +90,7 @@ SO/OO. The EMF format also has the additional advantage that it can be SO/OO graphics object. %prep -%setup -q -n libemf-%{version} -%patch2 -p1 +%autosetup -p1 -n libemf-%{version} %build %configure\ diff --git a/riscv64-support.patch b/riscv64-support.patch new file mode 100644 index 0000000..5d9bf28 --- /dev/null +++ b/riscv64-support.patch @@ -0,0 +1,104 @@ +From: Bo YU +Date: Mon, 27 Jun 2022 20:11:46 +0800 +Subject: add-support-riscv64 + +add support for riscv64 arch + +Original reference e2k code for supporting riscv64 arch +--- + include/libEMF/wine/winnt.h | 75 +++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 75 insertions(+) + +diff --git a/include/libEMF/wine/winnt.h b/include/libEMF/wine/winnt.h +index 39e2f90..1609f38 100644 +--- a/include/libEMF/wine/winnt.h ++++ b/include/libEMF/wine/winnt.h +@@ -69,6 +69,10 @@ + # define WORDS_BIGENDIAN + # define BITFIELDS_BIGENDIAN + # undef ALLOW_UNALIGNED_ACCESS ++#elif defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64 ++# undef WORDS_BIGENDIAN ++# undef BITFIELDS_BIGENDIAN ++# undef ALLOW_UNALIGNED_ACCESS + #elif !defined(RC_INVOKED) + # error Unknown CPU architecture! + #endif +@@ -1582,6 +1586,77 @@ typedef struct _CONTEXT { + + #endif /* __e2k__ */ + ++#ifdef __riscv && __riscv_xlen==64 ++/* ++ * FIXME: ++ * ++ * There is not yet an official CONTEXT structure defined for the ++ * riscv64 architecture (64-bit LE), so I just made one up. ++ * ++ */ ++ ++#define CONTEXT_RISCV64 0x4000000 ++#define CONTEXT_CONTROL (CONTEXT_RISCV64 | 0x00000001) ++#define CONTEXT_INTEGER (CONTEXT_RISCV64 | 0x00000002) ++#define CONTEXT_FLOATING_POINT (CONTEXT_RISCV64 | 0x00000004) ++#define CONTEXT_DEBUG_REGISTERS (CONTEXT_RISCV64 | 0x00000008) ++ ++#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER) ++ ++#define EXCEPTION_READ_FAULT 0 ++#define EXCEPTION_WRITE_FAULT 1 ++#define EXCEPTION_EXECUTE_FAULT 8 ++ ++typedef struct _CONTEXT { ++ ULONG ContextFlags; ++ ++ /* This section is specified/returned if the ContextFlags word contains ++ the flag CONTEXT_INTEGER. */ ++ ULONGLONG X0; ++ ULONGLONG X1; ++ ULONGLONG X2; ++ ULONGLONG X3; ++ ULONGLONG X4; ++ ULONGLONG X5; ++ ULONGLONG X6; ++ ULONGLONG X7; ++ ULONGLONG X8; ++ ULONGLONG X9; ++ ULONGLONG X10; ++ ULONGLONG X11; ++ ULONGLONG X12; ++ ULONGLONG X13; ++ ULONGLONG X14; ++ ULONGLONG X15; ++ ULONGLONG X16; ++ ULONGLONG X17; ++ ULONGLONG X18; ++ ULONGLONG X19; ++ ULONGLONG X20; ++ ULONGLONG X21; ++ ULONGLONG X22; ++ ULONGLONG X23; ++ ULONGLONG X24; ++ ULONGLONG X25; ++ ULONGLONG X26; ++ ULONGLONG X27; ++ ULONGLONG X28; ++ ULONGLONG X29; ++ ULONGLONG X30; ++ ULONGLONG X31; ++ ++ /* These are selected by CONTEXT_CONTROL */ ++ ULONGLONG Sp; ++ ULONGLONG Pc; ++ ULONGLONG PState; ++ ++ /* These are selected by CONTEXT_FLOATING_POINT */ ++ /* FIXME */ ++} CONTEXT; ++ ++#endif /* __riscv64__ */ ++ ++ + #if !defined(CONTEXT_FULL) && !defined(RC_INVOKED) + #error You need to define a CONTEXT for your CPU + #endif