Message ID | 20201203105353.149482-2-othacehe@gnu.org |
---|---|
State | Accepted |
Headers | show |
Series | image: Add system field. | expand |
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 |
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!
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
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.
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 --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