* 32-bit Python interpreter on a 64-bit system (ARM) @ 2023-12-08 15:40 Wicki Gabriel (wicg) 2023-12-10 8:03 ` Csepp 0 siblings, 1 reply; 4+ messages in thread From: Wicki Gabriel (wicg) @ 2023-12-08 15:40 UTC (permalink / raw) To: help-guix@gnu.org Hello! Due to dynamic linkage to a library that is only provided for ARMv6 architecture (32-bit) my Python application that is developed for a 64-bit ARM architecture refuses to work (I load the library with ctypes). According to the internet this could be solved by running that script with a 32-bit interpreter which - of course - is readily available in Guix. How can I declare on the package (or on the system level if necessary) that this specific script needs the interpreter of a different architecture than the system/package is built for? To give you an example, the end-product will be a whole system configuration with packages and services and whatnot, that will be generated throught guix system image my-img.scm --system=aarch64-linux but this one package must make use of the armhf-linux Python ELF. Thanks for any ideas and input! ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: 32-bit Python interpreter on a 64-bit system (ARM) 2023-12-08 15:40 32-bit Python interpreter on a 64-bit system (ARM) Wicki Gabriel (wicg) @ 2023-12-10 8:03 ` Csepp 2023-12-12 15:09 ` Wicki Gabriel (wicg) 0 siblings, 1 reply; 4+ messages in thread From: Csepp @ 2023-12-10 8:03 UTC (permalink / raw) To: Wicki Gabriel (wicg); +Cc: help-guix “Wicki Gabriel (wicg)” <wicg@zhaw.ch> writes: > Hello! > > Due to dynamic linkage to a library that is only provided for ARMv6 architecture > (32-bit) my Python application that is developed for a 64-bit ARM architecture > refuses to work (I load the library with ctypes). According to the internet this > could be solved by running that script with a 32-bit interpreter which - of > course - is readily available in Guix. > How can I declare on the package (or on the system level if necessary) that this > specific script needs the interpreter of a different architecture than the > system/package is built for? > > To give you an example, the end-product will be a whole system configuration > with packages and services and whatnot, that will be generated throught guix > system image my-img.scm –system=aarch64-linux but this one package must make > use of the armhf-linux Python ELF. > > Thanks for any ideas and input! Maybe a cursed idea and completely untested, but you could wrap the expression that evaluates to the Python package with a block that temporarily changes the current-system or target-system parameters. I think there is already a Guile function for this, most likely named with-parameters. ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: 32-bit Python interpreter on a 64-bit system (ARM) 2023-12-10 8:03 ` Csepp @ 2023-12-12 15:09 ` Wicki Gabriel (wicg) 2023-12-12 15:56 ` Tomas Volf 0 siblings, 1 reply; 4+ messages in thread From: Wicki Gabriel (wicg) @ 2023-12-12 15:09 UTC (permalink / raw) To: help-guix@gnu.org Hi Thanks for the input, Csepp, this seems to be exactly what I was looking for! Now I include the altered package like so: ` (package (name foo) ... (propagated-inputs (list (with-parameters ((%current-system "armhf-linux")) some-package))) ... ) ` But this produces the following error message when building package "foo". What am I missing? I am able to ,lower and ,build the (with-parameters) package in a repl so i guess the expression itself is fine? Backtrace: 18 (primitive-load "/home/gabriel/.cache/guix/inferiors/dr…") In guix/ui.scm: 2323:7 17 (run-guix . _) 2286:10 16 (run-guix-command _ . _) In ice-9/boot-9.scm: 1752:10 15 (with-exception-handler _ _ #:unwind? _ # _) 1752:10 14 (with-exception-handler _ _ #:unwind? _ # _) In guix/store.scm: 659:37 13 (thunk) 1298:8 12 (call-with-build-handler #<procedure 7f3322b32450 at g…> …) In guix/status.scm: 839:4 11 (call-with-status-report _ _) In guix/scripts/environment.scm: 340:4 10 (_) In srfi/srfi-1.scm: 673:15 9 (append-map _ _ . _) 586:29 8 (map1 _) 586:17 7 (map1 ((package ad-hoc-package "nMASC-bin") (# . #t) # …)) In guix/scripts/environment.scm: 323:4 6 (_ _) In guix/profiles.scm: 386:19 5 (package->manifest-entry #<package nMASC-bin@0.1 guix/…> …) In srfi/srfi-1.scm: 586:17 4 (map1 (("_" #<<parameterized> bindings: ((#<<param…>) …)) In guix/profiles.scm: 383:46 3 (package->manifest-entry #<<parameterized> bindings: (…> …) 377:19 2 (default-properties _) In ice-9/boot-9.scm: 1685:16 1 (raise-exception _ #:continuable? _) 1685:16 0 (raise-exception _ #:continuable? _) ice-9/boot-9.scm:1685:16: In procedure raise-exception: In procedure package-properties: Wrong type argument: #<<parameterized> bindings: ((#<<parameter> 7f3322b456a0 proc: #<procedure 7f3322b46600 at ice-9/boot-9.scm:1315:5 () | (x)>> #<procedure 7f330adf3fa0 at ice-9/eval.scm:330:13 ()>)) thunk: #<procedure 7f330adf3f80 at ice-9/eval.scm:330:13 ()>> ________________________________ From: Csepp <raingloom@riseup.net> Sent: Sunday, December 10, 2023 9:03 AM To: Wicki Gabriel (wicg) <wicg@zhaw.ch> Cc: help-guix@gnu.org <help-guix@gnu.org> Subject: Re: 32-bit Python interpreter on a 64-bit system (ARM) “Wicki Gabriel (wicg)” <wicg@zhaw.ch> writes: > Hello! > > Due to dynamic linkage to a library that is only provided for ARMv6 architecture > (32-bit) my Python application that is developed for a 64-bit ARM architecture > refuses to work (I load the library with ctypes). According to the internet this > could be solved by running that script with a 32-bit interpreter which - of > course - is readily available in Guix. > How can I declare on the package (or on the system level if necessary) that this > specific script needs the interpreter of a different architecture than the > system/package is built for? > > To give you an example, the end-product will be a whole system configuration > with packages and services and whatnot, that will be generated throught guix > system image my-img.scm –system=aarch64-linux but this one package must make > use of the armhf-linux Python ELF. > > Thanks for any ideas and input! Maybe a cursed idea and completely untested, but you could wrap the expression that evaluates to the Python package with a block that temporarily changes the current-system or target-system parameters. I think there is already a Guile function for this, most likely named with-parameters. ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: 32-bit Python interpreter on a 64-bit system (ARM) 2023-12-12 15:09 ` Wicki Gabriel (wicg) @ 2023-12-12 15:56 ` Tomas Volf 0 siblings, 0 replies; 4+ messages in thread From: Tomas Volf @ 2023-12-12 15:56 UTC (permalink / raw) To: Wicki Gabriel (wicg); +Cc: help-guix@gnu.org [-- Attachment #1: Type: text/plain, Size: 3343 bytes --] On 2023-12-12 15:09:52 +0000, Wicki Gabriel (wicg) wrote: > Hi > > Thanks for the input, Csepp, this seems to be exactly what I was looking for! > > Now I include the altered package like so: > ` > > (package > (name foo) > ... > (propagated-inputs > (list > (with-parameters ((%current-system "armhf-linux")) > some-package))) > ... > ) > > ` > > But this produces the following error message when building package "foo". What am I missing? I am able to ,lower and ,build the (with-parameters) package in a repl so i guess the expression itself is fine? I cannot say what you are doing wrong, but my interest got piqued so I gave it a try as well. It works for me: $ guix build --no-offload -f /tmp/test.scm [..] /gnu/store/867m8dkv9hzsl4c1nqrj1nzg502a4l3c-hello-2.10 $ file /gnu/store/867m8dkv9hzsl4c1nqrj1nzg502a4l3c-hello-2.10/bin/python-native/bin/python3.10 /gnu/store/867m8dkv9hzsl4c1nqrj1nzg502a4l3c-hello-2.10/bin/python-native/bin/python3.10: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /gnu/store/ln6hxqjvz6m9gdd9s97pivlqck7hzs99-glibc-2.35/lib/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, stripped $ file /gnu/store/867m8dkv9hzsl4c1nqrj1nzg502a4l3c-hello-2.10/bin/python-i686/bin/python3.10 /gnu/store/867m8dkv9hzsl4c1nqrj1nzg502a4l3c-hello-2.10/bin/python-i686/bin/python3.10: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /gnu/store/0hr9jpczkcgpgqkhf4q4868xd57h5a62-glibc-2.35/lib/ld-linux.so.2, for GNU/Linux 2.6.32, stripped So for me it seems to work. My package definition (adjusted hello package from the cookbook), maybe you can use it as a starting point: (use-modules (gnu) (gnu packages) (gnu packages python) (guix build-system gnu) (guix download) (guix gexp) (guix licenses) (guix packages)) (package (name "hello") (version "2.10") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/hello/hello-" version ".tar.gz")) (sha256 (base32 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i")))) (inputs `(("python-native" ,python) ("python-i686" ,(with-parameters ((%current-system "i686-linux")) python)))) (build-system gnu-build-system) (arguments (list #:phases #~(modify-phases %standard-phases (add-after 'install 'link-pythons (lambda* (#:key inputs #:allow-other-keys) (symlink (assoc-ref inputs "python-native") (string-append #$output "/bin/python-native")) (symlink (assoc-ref inputs "python-i686") (string-append #$output "/bin/python-i686"))))))) (synopsis "Hello, GNU world: An example GNU package") (description "GNU Hello prints the message \"Hello, world!\" and then exits. It serves as an example of standard GNU coding practices. As such, it supports command-line arguments, multiple languages, and so on.") (home-page "https://www.gnu.org/software/hello/") (license gpl3+)) Hope this helps, Tomas -- There are only two hard things in Computer Science: cache invalidation, naming things and off-by-one errors. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-12-12 15:57 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-12-08 15:40 32-bit Python interpreter on a 64-bit system (ARM) Wicki Gabriel (wicg) 2023-12-10 8:03 ` Csepp 2023-12-12 15:09 ` Wicki Gabriel (wicg) 2023-12-12 15:56 ` Tomas Volf
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).