diff mbox series

[bug#45021,1/2] image: Add system field.

Message ID 20201203105353.149482-2-othacehe@gnu.org
State Accepted
Headers show
Series image: Add system field. | expand

Checks

Context Check Description
cbaines/submitting builds success
cbaines/comparison success View comparision
cbaines/git branch success View Git branch
cbaines/applying patch success View Laminar job
cbaines/issue success View issue

Commit Message

Mathieu Othacehe Dec. 3, 2020, 10:53 a.m. UTC
* gnu/image.scm (<system>): New field.
* gnu/system/image.scm (arm32-disk-image, arm64-disk-image): Set the system
field.
(system-image): Do not try to cross-compile if we are running on the
appropriate system.
* gnu/system/images/hurd.scm (hurd-disk-image): Set the system field.
---
 gnu/image.scm              |  3 +++
 gnu/system/image.scm       | 12 +++++++++++-
 gnu/system/images/hurd.scm |  1 +
 3 files changed, 15 insertions(+), 1 deletion(-)

Comments

Danny Milosavljevic Dec. 3, 2020, 8:41 p.m. UTC | #1
Hi Mathieu,

On Thu,  3 Dec 2020 11:53:52 +0100
Mathieu Othacehe <othacehe@gnu.org> wrote:

> diff --git a/gnu/image.scm b/gnu/image.scm
> index a60d83b175..a56710d540 100644
> --- a/gnu/image.scm
> +++ b/gnu/image.scm
> @@ -33,6 +33,7 @@
>              image
>              image-name
>              image-format
> +            image-system
>              image-target
>              image-size
>              image-operating-system
> @@ -613,7 +615,15 @@ it can be used for bootloading."
>    "Return the derivation of IMAGE.  It can be a raw disk-image or an ISO9660
>  image, depending on IMAGE format."
>    (define substitutable? (image-substitutable? image))
> -  (define target (image-target image))
> +
> +  ;; The image definition may provide the appropriate "system" architecture
> +  ;; for the image.  If we are already running on this system, the image can
> +  ;; be built natively.  If we are running on a different system, then we need
> +  ;; to cross-compile, using the "target" provided by the image definition.
> +  (define system (image-system image))
> +  (define target (if (eq? system (%current-system))

Should be string=? instead of eq?, otherwise it downloads a cross compiler
for armhf on armhf.

With that change, I tested this patchset on armhf--works fine then.

LGTM!
Mathieu Othacehe Dec. 4, 2020, 8:12 a.m. UTC | #2
Hey Danny,

> Should be string=? instead of eq?, otherwise it downloads a cross compiler
> for armhf on armhf.

I used "eq?" because if "system" is left to its default in some image
definition, then we would end-up comparing "#f" and a string.

> With that change, I tested this patchset on armhf--works fine then.

Thanks for testing!

Mathieu
Danny Milosavljevic Dec. 4, 2020, 9:01 a.m. UTC | #3
Hi Mathieu,

On Fri, 04 Dec 2020 09:12:13 +0100
Mathieu Othacehe <othacehe@gnu.org> wrote:

> I used "eq?" because if "system" is left to its default in some image
> definition, then we would end-up comparing "#f" and a string.

Yeah, but eq? only compares the "addresses" of things, not the content.

(eq? "a" "a") could totally be #f if one is unlucky.

For example try:

(eq? "a" (read))

and enter "a".  The result will be #f.

On the other hand, (equal? "a" "a") would work; also (equal? "a" #f) would
not fail.
Mathieu Othacehe Dec. 5, 2020, 10:24 a.m. UTC | #4
Hey Danny,

> On the other hand, (equal? "a" "a") would work; also (equal? "a" #f) would
> not fail.

Oh you're right, I always get confused with those equality procedures even
after all these years. I'll fix it before pushing.

Thanks,

Mathieu
diff mbox series

Patch

diff --git a/gnu/image.scm b/gnu/image.scm
index a60d83b175..a56710d540 100644
--- a/gnu/image.scm
+++ b/gnu/image.scm
@@ -33,6 +33,7 @@ 
             image
             image-name
             image-format
+            image-system
             image-target
             image-size
             image-operating-system
@@ -77,6 +78,8 @@ 
   (name               image-name ;symbol
                       (default #f))
   (format             image-format) ;symbol
+  (system             image-system
+                      (default #f))
   (target             image-target
                       (default #f))
   (size               image-size  ;size in bytes as integer
diff --git a/gnu/system/image.scm b/gnu/system/image.scm
index 4972d9067b..f3d5734381 100644
--- a/gnu/system/image.scm
+++ b/gnu/system/image.scm
@@ -131,6 +131,7 @@ 
 (define arm32-disk-image
   (image
    (format 'disk-image)
+   (system "armhf-linux")
    (target "arm-linux-gnueabihf")
    (partitions
     (list (partition
@@ -143,6 +144,7 @@ 
 (define arm64-disk-image
   (image
    (inherit arm32-disk-image)
+   (system "aarch64-linux")
    (target "aarch64-linux-gnu")))
 
 
@@ -613,7 +615,15 @@  it can be used for bootloading."
   "Return the derivation of IMAGE.  It can be a raw disk-image or an ISO9660
 image, depending on IMAGE format."
   (define substitutable? (image-substitutable? image))
-  (define target (image-target image))
+
+  ;; The image definition may provide the appropriate "system" architecture
+  ;; for the image.  If we are already running on this system, the image can
+  ;; be built natively.  If we are running on a different system, then we need
+  ;; to cross-compile, using the "target" provided by the image definition.
+  (define system (image-system image))
+  (define target (if (eq? system (%current-system))
+                     #f
+                     (image-target image)))
 
   (with-parameters ((%current-target-system target))
     (let* ((os (operating-system-for-image image))
diff --git a/gnu/system/images/hurd.scm b/gnu/system/images/hurd.scm
index 4417952c5d..6e7dbaa7a7 100644
--- a/gnu/system/images/hurd.scm
+++ b/gnu/system/images/hurd.scm
@@ -75,6 +75,7 @@ 
 (define hurd-disk-image
   (image
    (format 'disk-image)
+   (system "i586-gnu")
    (target "i586-pc-gnu")
    (partitions
     (list (partition