diff options
author | Jan (janneke) Nieuwenhuizen <janneke@gnu.org> | 2021-12-13 15:00:06 +0100 |
---|---|---|
committer | Jan (janneke) Nieuwenhuizen <janneke@gnu.org> | 2022-10-18 23:00:13 +0200 |
commit | ebef32e07bc892aa3997c8d29fc78f3244281f21 (patch) | |
tree | 3eb608c853055f643fb35e4af59dfe8d91fbc867 /gnu | |
parent | a49dd5b0ba2aeaa1032dd2a43e74fd2fb108928c (diff) | |
download | guix-ebef32e07bc892aa3997c8d29fc78f3244281f21.tar.gz |
gnu: commencement: tcc-boot: Support ARM.
* gnu/packages/commencement.scm (tcc-boot)[arguments]: Cater for armhf-linux, aarch64-linux. [supported-systems]: Add aarch64-linux, armhf-linux.
Diffstat (limited to 'gnu')
-rw-r--r-- | gnu/packages/commencement.scm | 147 |
1 files changed, 109 insertions, 38 deletions
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm index e37392fe2a..158a254ef3 100644 --- a/gnu/packages/commencement.scm +++ b/gnu/packages/commencement.scm @@ -709,7 +709,8 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\" (build-system gnu-build-system) (inputs '()) (propagated-inputs '()) - (native-inputs (%boot-tcc0-inputs)) + (native-inputs `(("mes" ,mes-boot) + ,@(%boot-tcc0-inputs))) (arguments `(#:implicit-inputs? #f #:guile ,%bootstrap-guile @@ -722,45 +723,81 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\" (substitute* "libtcc.c" (("s->alacarte_link = 1;" all) (string-append all " - s->static_link = 1;"))))) + s->static_link = 1;"))) + (substitute* "tccelf.c" + (("tcc_add_support\\(s1, TCC_LIBTCC1\\);" all) + (string-append all " +#if CONFIG_TCC_LIBTCC1_MES + tcc_add_support(s1, TCC_LIBTCC1_MES); +#endif +"))) + ,@(match (%current-system) + ((or "armhf-linux" "aarch64-linux") + '((substitute* "tccelf.c" + ;; This fixes + ;; "cannot execute binary file: Exec format error" + ;; when building on aarch64-linux for ARM + (("#ifdef TCC_ARM_EABI") + "#if defined (TCC_ARM_EABI) || BOOTSTRAP")))) + ((or "i686-linux" "x86_64-linux") + '())))) (replace 'configure (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref %outputs "out")) (tcc (assoc-ref %build-inputs "tcc")) (libc (assoc-ref %build-inputs "libc")) - (interpreter "/mes/loader")) - (invoke "sh" "configure" - (string-append "--cc=tcc") - (string-append "--cpu=i386") - (string-append "--prefix=" out) - (string-append "--elfinterp=" interpreter) - (string-append "--crtprefix=" tcc "/lib") - (string-append "--sysincludepaths=" tcc "/include") - (string-append "--libpaths=" tcc "/lib"))))) + (interpreter "/mes/loader") + (configure-flags + (list "--cc=tcc" + ,@(match (%current-system) + ((or "i686-linux" "x86_64-linux") '("--cpu=i386")) + ((or "armhf-linux" "aarch64-linux") '("--cpu=arm"))) + (string-append "--prefix=" out) + (string-append "--elfinterp=" interpreter) + (string-append "--crtprefix=" tcc "/lib") + (string-append "--sysincludepaths=" tcc "/include") + (string-append "--libpaths=" tcc "/lib")))) + (format (current-error-port) + "running ./configure ~a\n" (string-join configure-flags)) + (apply invoke "sh" "configure" configure-flags)))) (replace 'build (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref %outputs "out")) (tcc (assoc-ref %build-inputs "tcc")) (libc (assoc-ref %build-inputs "libc")) - (interpreter "/mes/loader")) - (invoke - "tcc" - "-vvv" - "-D" "BOOTSTRAP=1" - "-D" "ONE_SOURCE=1" - "-D" "TCC_TARGET_I386=1" - "-D" "CONFIG_TCC_STATIC=1" - "-D" "CONFIG_USE_LIBGCC=1" - "-D" (string-append "CONFIG_TCCDIR=\"" out "/lib/tcc\"") - "-D" (string-append "CONFIG_TCC_CRTPREFIX=\"" out "/lib:{B}/lib:.\"") - "-D" (string-append "CONFIG_TCC_CRTPREFIX=\"" out "/lib:{B}/lib:.\"") - "-D" (string-append "CONFIG_TCC_ELFINTERP=\"" interpreter "\"") - "-D" (string-append "CONFIG_TCC_LIBPATHS=\"" tcc "/lib:{B}/lib:.\"") - "-D" (string-append "CONFIG_TCC_SYSINCLUDEPATHS=\"" - tcc "/include" ":/include:{B}/include\"") - "-D" (string-append "TCC_LIBGCC=\"" tcc "/lib/libc.a\"") - "-o" "tcc" - "tcc.c")))) + (interpreter "/mes/loader") + (cppflags + (list + "-D" "BOOTSTRAP=1" + "-D" "ONE_SOURCE=1" + ,@(match (%current-system) + ((or "i686-linux" "x86_64-linux") + '("-D" "TCC_TARGET_I386=1")) + ((or "armhf-linux" "aarch64-linux") + '("-D" "TCC_TARGET_ARM=1" + "-D" "TCC_ARM_VFP=1" + "-D" "CONFIG_TCC_LIBTCC1_MES=1"))) + "-D" "CONFIG_TCCBOOT=1" + "-D" "CONFIG_TCC_STATIC=1" + "-D" "CONFIG_USE_LIBGCC=1" + "-D" (string-append "CONFIG_TCCDIR=\"" out "/lib/tcc\"") + "-D" (string-append "CONFIG_TCC_CRTPREFIX=\"" out "/lib:{B}/lib:.\"") + "-D" (string-append "CONFIG_TCC_ELFINTERP=\"" interpreter "\"") + "-D" (string-append "CONFIG_TCC_LIBPATHS=\"" tcc "/lib:{B}/lib:{B}/lib/tcc:.\"") + "-D" (string-append "CONFIG_TCC_SYSINCLUDEPATHS=\"" + tcc "/include" ":/include:{B}/include\"") + "-D" (string-append "TCC_LIBGCC=\"" tcc "/lib/libc.a\"") + "-D" (string-append "TCC_LIBTCC1_MES=\"libtcc1-mes.a\""))) + (files ',(match (%current-system) + ((or "i686-linux" "x86_64-linux") + '("tcc.c")) + ((or "armhf-linux" "aarch64-linux") + '("tcc.c" "lib/armflush.c")))) + (arguments (cons* "-vvv" "-g" "-o" "tcc" + (append cppflags files)))) + (format (current-error-port) + "running tcc ~a\n" (string-join arguments)) + (apply invoke "tcc" arguments)))) (replace 'check (lambda _ ;; FIXME: add sensible check target (without depending on make) @@ -769,8 +806,16 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\" (replace 'install (lambda* (#:key outputs #:allow-other-keys) (let ((out (assoc-ref %outputs "out")) - (tcc (assoc-ref %build-inputs "tcc"))) - (and + (tcc (assoc-ref %build-inputs "tcc")) + (mes (assoc-ref %build-inputs "mes")) + (cppflags '(,@(match (%current-system) + ((or "armhf-linux" "aarch64-linux") + '("-D" "TCC_TARGET_ARM=1" + "-D" "TCC_ARM_VFP=1")) + ((or "i686-linux" "x86_64-linux") + '("-D" "TCC_TARGET_I386=1"))) + "-D HAVE_FLOAT=1" + "-D HAVE_LONG_LONG=1"))) (mkdir-p (string-append out "/bin")) (copy-file "tcc" (string-append out "/bin/tcc")) (mkdir-p (string-append out "/lib/tcc")) @@ -778,12 +823,38 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\" (string-append out "/include")) (copy-recursively (string-append tcc "/lib") (string-append out "/lib")) - (invoke "./tcc" "-D" "TCC_TARGET_I386=1" "-c" "-o" "libtcc1.o" "lib/libtcc1.c") - (invoke "./tcc" "-ar" "rc" "libtcc1.a" "libtcc1.o") - (copy-file "libtcc1.a" (string-append out "/lib/libtcc1.a")) - (delete-file (string-append out "/lib/tcc/libtcc1.a")) - (copy-file "libtcc1.a" - (string-append out "/lib/tcc/libtcc1.a"))))))))))) + ,@(match (%current-system) + ((or "armhf-linux" "aarch64-linux") + '((format (current-error-port) "compiling...\n") + (format (current-error-port) "cpp-flags=~s\n" cppflags) + + (delete-file (string-append out "/lib/tcc/libtcc1.a")) + (apply invoke "./tcc" "-c" "-o" "libtcc1.o" "lib/libtcc1.c" cppflags) + (apply invoke "./tcc" "-c" "-o" "armeabi.o" "lib/armeabi.c" cppflags) + (invoke "./tcc" "-ar" "rc" "libtcc1.a" "libtcc1.o" "armeabi.o") + (copy-file "libtcc1.a" (string-append out "/lib/tcc/libtcc1.a")) + + (delete-file (string-append out "/lib/tcc/libtcc1-mes.a")) + (apply invoke "./tcc" "-c" "-o" "libtcc1-mes.o" + (string-append mes "/lib/libtcc1.c") cppflags) + (invoke "./tcc" "-ar" "rc" "libtcc1-mes.a" + "libtcc1-mes.o" "armeabi.o") + (copy-file "libtcc1-mes.a" + (string-append out "/lib/tcc/libtcc1-mes.a")) + + (delete-file (string-append out "/lib/libc.a")) + (apply invoke "./tcc" "-c" "-o" "libc.o" + "-I" (string-append tcc "/include") + "-I" (string-append tcc "/include/linux/arm") + (string-append mes "/lib/libc+gnu.c") + cppflags) + (invoke "./tcc" "-ar" "rc" "libc.a" "libc.o") + (copy-file "libc.a" (string-append out "/lib/libc.a")))) + ((or "i686-linux" "x86_64-linux") + '((delete-file (string-append out "/lib/tcc/libtcc1.a")) + (apply invoke "./tcc" "-c" "-o" "libtcc1.o" "lib/libtcc1.c" cppflags) + (invoke "./tcc" "-ar" "rc" "libtcc1.a" "libtcc1.o") + (copy-file "libtcc1.a" (string-append out "/lib/tcc/libtcc1.a"))))))))))))) (define patch-mesboot ;; The initial patch. |