[gnome-build-meta/valentindavid/riscv64: 2/2] Add support for RISC-V




commit c88c3d27bfb88056c04b694dcbe3bd141433d759
Author: Valentin David <valentin david codethink co uk>
Date:   Wed Apr 21 19:25:25 2021 +0200

    Add support for RISC-V

 elements/core-deps/eos-updater.bst  |  2 +-
 elements/core-deps/fwupd.bst        |  5 +++-
 elements/core-deps/qemu.bst         |  2 ++
 elements/core-deps/slirp-helper.bst |  2 ++
 elements/freedesktop-sdk.bst        |  4 ++-
 elements/iso/eos-installer.bst      |  2 ++
 elements/iso/initramfs.bst          | 19 ++++++++-----
 elements/vm/image.bst               |  5 +++-
 elements/vm/initramfs.bst           |  2 +-
 elements/vm/toolbox.bst             |  4 ++-
 files/eos-installer/riscv.patch     | 24 +++++++++++++++++
 files/fwupd/riscv64.patch           | 26 ++++++++++++++++++
 files/slirp-helper/nix-riscv.patch  | 53 +++++++++++++++++++++++++++++++++++++
 files/toolbox/riscv.patch           | 12 +++++++++
 junction.refs                       |  2 +-
 project.conf                        | 12 +++++++++
 16 files changed, 162 insertions(+), 14 deletions(-)
---
diff --git a/elements/core-deps/eos-updater.bst b/elements/core-deps/eos-updater.bst
index 9af6b7bf..82649518 100644
--- a/elements/core-deps/eos-updater.bst
+++ b/elements/core-deps/eos-updater.bst
@@ -16,7 +16,7 @@ depends:
 build-depends:
 - sdk/gobject-introspection.bst
 - sdk/gtk-doc.bst
-- freedesktop-sdk.bst:components/valgrind.bst
+- freedesktop-sdk.bst:components/valgrind-maybe.bst
 - freedesktop-sdk.bst:public-stacks/buildsystem-autotools.bst
 
 variables:
diff --git a/elements/core-deps/fwupd.bst b/elements/core-deps/fwupd.bst
index 964e15a8..0ce5a192 100644
--- a/elements/core-deps/fwupd.bst
+++ b/elements/core-deps/fwupd.bst
@@ -3,6 +3,8 @@ kind: meson
 sources:
 - kind: tar
   url: github_com:fwupd/fwupd/archive/1.4.4.tar.gz
+- kind: patch
+  path: files/fwupd/riscv64.patch
 
 build-depends:
 - sdk/gobject-introspection.bst
@@ -33,10 +35,11 @@ depends:
 - freedesktop-sdk.bst:components/pycairo.bst
 - freedesktop-sdk.bst:components/python3-pil.bst
 - freedesktop-sdk.bst:components/tpm2-tss.bst
+- freedesktop-sdk.bst:components/gnu-efi-maybe.bst
 
 variables:
   (?):
-  - arch in ["arm", "aarch64"]:
+  - arch in ["arm", "aarch64", "riscv64"]:
       meson-local: >-
         -Dplugin_dell=false
   - arch == "ppc64le":
diff --git a/elements/core-deps/qemu.bst b/elements/core-deps/qemu.bst
index 6d990ea4..ae1288ea 100644
--- a/elements/core-deps/qemu.bst
+++ b/elements/core-deps/qemu.bst
@@ -39,6 +39,8 @@ variables:
       targets: --target-list=arm-softmmu
   - arch == "ppc64le":
       targets: --target-list=ppc64-softmmu
+  - arch == "riscv64":
+      targets: --target-list=riscv64-softmmu
 
   conf-local: >-
     --disable-werror
diff --git a/elements/core-deps/slirp-helper.bst b/elements/core-deps/slirp-helper.bst
index 6d93de1a..224c2850 100644
--- a/elements/core-deps/slirp-helper.bst
+++ b/elements/core-deps/slirp-helper.bst
@@ -14,6 +14,8 @@ sources:
 - kind: tar
   url: https://static.crates.io/crates/libslirp/libslirp-4.3.0.crate
 - kind: cargo
+- kind: patch
+  path: files/slirp-helper/nix-riscv.patch
 
 config:
   install-commands:
diff --git a/elements/freedesktop-sdk.bst b/elements/freedesktop-sdk.bst
index e696d243..c833eb73 100644
--- a/elements/freedesktop-sdk.bst
+++ b/elements/freedesktop-sdk.bst
@@ -2,7 +2,7 @@ kind: junction
 sources:
 - kind: git_tag
   url: https://gitlab.com/freedesktop-sdk/freedesktop-sdk.git
-  track: master
+  track: valentindavid/gnome-os-riscv
   track-tags: false
 config:
   options:
@@ -14,3 +14,5 @@ config:
         bootstrap_build_arch: 'aarch64'
     - arch == "ppc64le":
         bootstrap_build_arch: "ppc64le"
+    - arch == "riscv64":
+        bootstrap_build_arch: "x86_64"
diff --git a/elements/iso/eos-installer.bst b/elements/iso/eos-installer.bst
index 9de6fe6a..92af1752 100644
--- a/elements/iso/eos-installer.bst
+++ b/elements/iso/eos-installer.bst
@@ -21,6 +21,8 @@ sources:
   path: files/eos-installer/remove-branding.patch
 - kind: patch
   path: files/eos-installer/remove-endless-support.patch
+- kind: patch
+  path: files/eos-installer/riscv.patch
 
 depends:
 - freedesktop-sdk.bst:bootstrap-import.bst
diff --git a/elements/iso/initramfs.bst b/elements/iso/initramfs.bst
index cfc5a0cc..5b232ce7 100644
--- a/elements/iso/initramfs.bst
+++ b/elements/iso/initramfs.bst
@@ -16,7 +16,7 @@ variables:
       image-name: bzImage
   - arch == "i686":
       efi-arch: ia32
-  - arch == "aarch64":
+  - arch in ["aarch64", "riscv64"]:
       image-name: Image
 
 config:
@@ -43,12 +43,10 @@ config:
        --noboot >/dev/null
 
   - |
-    dracut -v --uefi \
-           --uefi-stub /usr/lib/systemd/boot/efi/linux%{efi-arch}.efi.stub \
-           --kernel-image "/boot/%{image-name}" \
-           --no-machineid \
+    dracut -v --no-machineid \
+           --kernel-image /boot/%{image-name} \
            --kver "$(ls -1 /usr/lib/modules | head -n1)" \
-           --kernel-cmdline 'rw quiet splash root=live:LABEL=%{installer-volume-id}' \
+           --kernel-cmdline 'rw quiet splash root=live:LABEL=%{installer-volume-id} console=tty0' \
            --add dmsquash-live \
            --add plymouth \
            --install grep \
@@ -72,6 +70,13 @@ config:
     EOF
 
   - |
-    rm -f /boot/%{image-name}
     rm -f /boot/System.map
 
+  - |
+    cat <<EOF >/boot/loader/entries/gnome-os-installer.conf
+    title GNOME OS Installer
+    version 1
+    options rw quiet splash root=live:LABEL=%{installer-volume-id} console=tty0
+    linux /%{image-name}
+    initrd /initramfs-$(ls -1 /lib/modules | head -n1).img
+    EOF
diff --git a/elements/vm/image.bst b/elements/vm/image.bst
index f13331ae..295b1d40 100644
--- a/elements/vm/image.bst
+++ b/elements/vm/image.bst
@@ -17,6 +17,8 @@ variables:
       linux-root: 69DAD710-2CE4-4E3C-B16C-21A1D49ABED3
   - arch == "aarch64":
       linux-root: B921B045-1DF0-41C3-AF44-4C6F280D3FAE
+  - arch == "riscv64":
+      linux-root: 72EC70A6-CF74-40E6-BD49-4BDA08E8F224
 
   sysroot: "/sysroot"
 
@@ -56,7 +58,8 @@ config:
   - |
     ostree admin deploy --os="gnome-os" \
          --sysroot="%{sysroot}" %{ostree-branch} \
-         --karg="rw" --karg="quiet" --karg="splash"
+         --karg="rw" --karg="quiet" --karg="splash" \
+         --karg="console=tty0"
 
   - |
     ostree admin set-origin --sysroot="%{sysroot}" \
diff --git a/elements/vm/initramfs.bst b/elements/vm/initramfs.bst
index 50ae6448..2f9cea7f 100644
--- a/elements/vm/initramfs.bst
+++ b/elements/vm/initramfs.bst
@@ -11,7 +11,7 @@ variables:
   (?):
   - arch == "x86_64":
       image-name: bzImage
-  - arch == "aarch64":
+  - arch in ["aarch64", "riscv64"]:
       image-name: Image
 
 config:
diff --git a/elements/vm/toolbox.bst b/elements/vm/toolbox.bst
index f35a6ac0..8f8ba057 100644
--- a/elements/vm/toolbox.bst
+++ b/elements/vm/toolbox.bst
@@ -80,9 +80,11 @@ sources:
   directory: 'src/vendor/golang.org/x/crypto'
 - kind: git_tag
   url: https://github.com/golang/sys.git
-  track: 953cdadca894
+  track: 66c3f260301c
   track-tags: false
   directory: 'src/vendor/golang.org/x/sys'
+- kind: patch
+  path: files/toolbox/riscv.patch
 
 build-depends:
 - freedesktop-sdk.bst:components/systemd.bst
diff --git a/files/eos-installer/riscv.patch b/files/eos-installer/riscv.patch
new file mode 100644
index 00000000..8629104e
--- /dev/null
+++ b/files/eos-installer/riscv.patch
@@ -0,0 +1,24 @@
+diff --git a/gnome-image-installer/util/gpt.c b/gnome-image-installer/util/gpt.c
+index 8d23cf6a..3982ef5a 100644
+--- a/gnome-image-installer/util/gpt.c
++++ b/gnome-image-installer/util/gpt.c
+@@ -9,6 +9,8 @@ static uint8_t GPT_GUID_LINUX_ROOTFS1[] = {0x40, 0x95, 0x47, 0x44, 0x97, 0xf2, 0
+ static uint8_t GPT_GUID_LINUX_ROOTFS2[] = {0xe3, 0xbc, 0x68, 0x4f, 0xcd, 0xe8, 0xb1, 0x4d, 0x96, 0xe7, 
0xfb, 0xca, 0xf9, 0x84, 0xb7, 0x09};
+ static uint8_t GPT_GUID_LINUX_ROOTFS3[] = {0x10, 0xd7, 0xda, 0x69, 0xe4, 0x2c, 0x3c, 0x4e, 0xb1, 0x6c, 
0x21, 0xa1, 0xd4, 0x9a, 0xbe, 0xd3};
+ static uint8_t GPT_GUID_LINUX_ROOTFS4[] = {0x45, 0xb0, 0x21, 0xb9, 0xf0, 0x1d, 0xc3, 0x41, 0xaf, 0x44, 
0x4c, 0x6f, 0x28, 0x0d, 0x3f, 0xae};
++static uint8_t GPT_GUID_LINUX_ROOTFS5[] = {0xa6, 0x70, 0xec, 0x72, 0x74, 0xcf, 0xe6, 0x40, 0xbd, 0x49, 
0x4b, 0xda, 0x08, 0xe8, 0xf2, 0x24};
++static uint8_t GPT_GUID_LINUX_ROOTFS6[] = {0xfe, 0xa7, 0xd5, 0x60, 0x7d, 0x8e, 0x5c, 0x43, 0xb7, 0x14, 
0x3d, 0xd8, 0x16, 0x21, 0x44, 0xe1};
+ 
+ uint8_t is_nth_flag_set(uint64_t flags, uint8_t n)
+ {
+@@ -234,7 +236,9 @@ int is_eos_gpt_valid(struct ptable *pt, uint64_t *size)
+           || memcmp(&pt->partitions[i].type_guid, GPT_GUID_LINUX_ROOTFS1, 16)==0
+           || memcmp(&pt->partitions[i].type_guid, GPT_GUID_LINUX_ROOTFS2, 16)==0
+           || memcmp(&pt->partitions[i].type_guid, GPT_GUID_LINUX_ROOTFS3, 16)==0
+-          || memcmp(&pt->partitions[i].type_guid, GPT_GUID_LINUX_ROOTFS4, 16)==0) {
++          || memcmp(&pt->partitions[i].type_guid, GPT_GUID_LINUX_ROOTFS4, 16)==0
++          || memcmp(&pt->partitions[i].type_guid, GPT_GUID_LINUX_ROOTFS5, 16)==0
++          || memcmp(&pt->partitions[i].type_guid, GPT_GUID_LINUX_ROOTFS6, 16)==0) {
+         // invalid third partition GUID
+         uint64_t flags = 0;
+         memcpy(&flags, pt->partitions[i].attributes, 8);
diff --git a/files/fwupd/riscv64.patch b/files/fwupd/riscv64.patch
new file mode 100644
index 00000000..f3f7ce6f
--- /dev/null
+++ b/files/fwupd/riscv64.patch
@@ -0,0 +1,26 @@
+Only in fwupd: _builddir
+diff -ur fwupd.old/meson.build fwupd/meson.build
+--- fwupd.old/meson.build      2020-06-10 16:42:51.000000000 +0200
++++ fwupd/meson.build  2021-04-18 00:36:06.436423691 +0200
+@@ -302,6 +302,9 @@
+   elif efi_arch == 'aarch64'
+           EFI_MACHINE_TYPE_NAME = 'aa64'
+           gnu_efi_arch = 'aarch64'
++  elif efi_arch == 'riscv64'
++          EFI_MACHINE_TYPE_NAME = 'riscv64'
++          gnu_efi_arch = 'riscv64'
+   else
+           EFI_MACHINE_TYPE_NAME = ''
+           gnu_efi_arch = ''
+diff -ur fwupd.old/plugins/uefi/efi/meson.build fwupd/plugins/uefi/efi/meson.build
+--- fwupd.old/plugins/uefi/efi/meson.build     2020-06-10 16:42:51.000000000 +0200
++++ fwupd/plugins/uefi/efi/meson.build 2021-04-18 00:36:32.706429876 +0200
+@@ -113,7 +113,7 @@
+                '-L', efi_ldsdir,
+                '-L', efi_libdir,
+                join_paths(efi_ldsdir, arch_crt)]
+-if efi_arch == 'aarch64' or efi_arch == 'arm'
++if efi_arch == 'aarch64' or efi_arch == 'arm' or efi_arch == 'riscv64'
+   # Aarch64 and ARM32 don't have an EFI capable objcopy. Use 'binary'
+   # instead, and add required symbols manually.
+   efi_ldflags += ['--defsym=EFI_SUBSYSTEM=0xa']
diff --git a/files/slirp-helper/nix-riscv.patch b/files/slirp-helper/nix-riscv.patch
new file mode 100644
index 00000000..3b83f7d8
--- /dev/null
+++ b/files/slirp-helper/nix-riscv.patch
@@ -0,0 +1,53 @@
+diff -ru slirp-helper.old/crates/nix-0.17.0/src/sys/ptrace/linux.rs 
slirp-helper/crates/nix-0.17.0/src/sys/ptrace/linux.rs
+--- slirp-helper.old/crates/nix-0.17.0/src/sys/ptrace/linux.rs 2020-02-03 17:25:40.000000000 +0100
++++ slirp-helper/crates/nix-0.17.0/src/sys/ptrace/linux.rs     2021-04-19 15:50:19.553193749 +0200
+@@ -46,7 +46,6 @@
+                                                target_arch = "mips",
+                                                target_arch = "mips64",
+                                                target_arch = "x86_64",
+-                                               target_arch = "riscv64",
+                                                target_pointer_width = "32"))))]
+         PTRACE_GETREGS,
+         #[cfg(any(all(target_os = "android", target_pointer_width = "32"),
+@@ -54,7 +53,6 @@
+                                                target_arch = "mips",
+                                                target_arch = "mips64",
+                                                target_arch = "x86_64",
+-                                               target_arch = "riscv64",
+                                                target_pointer_width = "32"))))]
+         PTRACE_SETREGS,
+         #[cfg(any(all(target_os = "android", target_pointer_width = "32"),
+@@ -62,7 +60,6 @@
+                                                target_arch = "mips",
+                                                target_arch = "mips64",
+                                                target_arch = "x86_64",
+-                                               target_arch = "riscv64",
+                                                target_pointer_width = "32"))))]
+         PTRACE_GETFPREGS,
+         #[cfg(any(all(target_os = "android", target_pointer_width = "32"),
+@@ -70,7 +67,6 @@
+                                                target_arch = "mips",
+                                                target_arch = "mips64",
+                                                target_arch = "x86_64",
+-                                               target_arch = "riscv64",
+                                                target_pointer_width = "32"))))]
+         PTRACE_SETFPREGS,
+         PTRACE_ATTACH,
+@@ -79,15 +75,13 @@
+                                            target_arch = "mips",
+                                            target_arch = "mips64",
+                                            target_arch = "x86",
+-                                           target_arch = "x86_64",
+-                                           target_arch = "riscv64")))]
++                                           target_arch = "x86_64")))]
+         PTRACE_GETFPXREGS,
+         #[cfg(all(target_os = "linux", any(target_env = "musl",
+                                            target_arch = "mips",
+                                            target_arch = "mips64",
+                                            target_arch = "x86",
+-                                           target_arch = "x86_64",
+-                                           target_arch = "riscv64")))]
++                                           target_arch = "x86_64")))]
+         PTRACE_SETFPXREGS,
+         PTRACE_SYSCALL,
+         PTRACE_SETOPTIONS,
diff --git a/files/toolbox/riscv.patch b/files/toolbox/riscv.patch
new file mode 100644
index 00000000..ece7fd57
--- /dev/null
+++ b/files/toolbox/riscv.patch
@@ -0,0 +1,12 @@
+diff -x .git -ur toolbox.old/src/libc-wrappers/libc-wrappers.c toolbox/src/libc-wrappers/libc-wrappers.c
+--- toolbox.old/src/libc-wrappers/libc-wrappers.c      2021-02-23 19:57:46.648985862 +0100
++++ toolbox/src/libc-wrappers/libc-wrappers.c  2021-04-19 15:55:57.421788023 +0200
+@@ -30,6 +30,8 @@
+ __asm__(".symver pthread_sigmask,pthread_sigmask@GLIBC_2.2");
+ #elif defined __x86_64__
+ __asm__(".symver pthread_sigmask,pthread_sigmask@GLIBC_2.2.5");
++#elif defined __riscv
++__asm__(".symver pthread_sigmask,pthread_sigmask@GLIBC_2.32");
+ #else
+ #error "Please specify symbol version for pthread_sigmask"
+ #endif
diff --git a/junction.refs b/junction.refs
index e9ab5530..dce43a2b 100644
--- a/junction.refs
+++ b/junction.refs
@@ -1,6 +1,6 @@
 projects:
   gnome:
     freedesktop-sdk.bst:
-    - ref: freedesktop-sdk-20.08rc.1-998-g3b65f9722bc51c751533a7359d4fdb983468d2e3
+    - ref: freedesktop-sdk-20.08rc.1-1010-g12fdb56757d904a89a3e7fbb61016dd85e258ea5
     openh264-extension.bst:
     - ref: openh264-2.0.0-4-0-g7191bc88fbeed3ac842543706f856cb6dde99bc9
diff --git a/project.conf b/project.conf
index 547cf01c..aa5fef50 100644
--- a/project.conf
+++ b/project.conf
@@ -35,6 +35,7 @@ options:
     - i686
     - x86_64
     - ppc64le
+    - riscv64
   toolbox:
     type: bool
     default: false
@@ -107,6 +108,16 @@ environment:
       CFLAGS: "%{flags_ppc64le}"
       CXXFLAGS: "%{flags_ppc64le}"
       LDFLAGS: "%{ldflags_defaults}"
+  - arch == "riscv64":
+      CFLAGS: "%{flags_riscv64}"
+      CXXFLAGS: "%{flags_riscv64}"
+      LDFLAGS: "%{ldflags_defaults}"
+      G_SLICE: always-malloc
+
+(?):
+- arch == "riscv64":
+    environment-nocache:
+    - G_SLICE
 
 # Some overrides to element configuration based on type
 #
@@ -309,6 +320,7 @@ variables:
   flags_aarch64: "%{common_flags} -fasynchronous-unwind-tables -fstack-clash-protection %{local_flags}"
   flags_arm: "%{common_flags} %{local_flags}"
   flags_ppc64le: "%{common_flags} -mcpu=power9 -mtune=power9 %{local_flags}"
+  flags_riscv64: "%{common_flags} -fasynchronous-unwind-tables -fstack-clash-protection %{local_flags}"
   ldflags_defaults: "-Wl,-z,relro,-z,now -Wl,--as-needed -L%{libdir}"
   local_flags: ''
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]