mescc: Support -nodefaultlibs, -nostartfiles, -nostdlib.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 5 May 2019 18:25:22 +0000 (20:25 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 5 May 2019 18:25:22 +0000 (20:25 +0200)
* module/mescc.scm (parse-opts): Parse -nodefaultlibs, -nostartfiles, -nostdlib.
* module/mescc/mescc.scm (mescc:link): Handle -nodefaultlibs, -nostdlib.
(hex2->elf): Handle -nostartfiles, -nostdlib.

module/mescc.scm
module/mescc/mescc.scm

index 873e553dc26cdbb3e8954be3f18ef79ce77df474..749be811de74dc36e99d8d36ebf23bd7f94d04fa 100644 (file)
             (compile (single-char #\S))
             (define (single-char #\D) (value #t))
             (debug-info (single-char #\g))
-            (dumpmachine (single-char #\d))
+            (dumpmachine)
             (help (single-char #\h))
             (include (single-char #\I) (value #t))
             (library-dir (single-char #\L) (value #t))
             (library (single-char #\l) (value #t))
             (machine (single-char #\m) (value #t))
+            (nodefaultlibs)
+            (nostartfiles)
+            (nostdlib)
             (preprocess (single-char #\E))
             (std (value #t))
             (output (single-char #\o) (value #t))
@@ -97,6 +100,9 @@ Usage: mescc [OPTION]... FILE...
   -L DIR              append DIR to library path
   -l LIBNAME          link with LIBNAME
   -m BITS             compile for BITS bits [32]
+  -nodefaultlibs      do not use libc.o when linking
+  -nostartfiles       do not use crt1.o when linking
+  -nostdlib           do not use crt1.o or libc.o when linking
   -o FILE             write output to FILE
   -O LEVEL            use optimizing LEVEL
   -S                  preprocess and compile only; do not assemble or link
@@ -119,7 +125,11 @@ General help using GNU software: <http://gnu.org/gethelp/>
            options))))
 
 (define (mescc:main args)
-  (let* ((single-dash-options '("-dumpmachine" "-std"))
+  (let* ((single-dash-options '("-dumpmachine"
+                                "-nodefaultlibs"
+                                "-nostartfiles"
+                                "-nostdlib"
+                                "-std"))
          (args (map (lambda (o)
                       (if (member o single-dash-options) (string-append "-" o)
                           o))
index 875530d439965f118e80333db42014b985ec5872..5ac29078247213150e0713dbb9fbfe8bfcdd94ce 100644 (file)
          (hex2-files (if (null? infos) hex2-files
                          (append hex2-files
                                  (list (infos->hex2 options hex2-file-name infos)))))
+         (default-libraries (if (or (option-ref options 'nodefaultlibs #f)
+                                    (option-ref options 'nostdlib #f)) '()
+                                    '("c")))
          (libraries (filter-map (multi-opt 'library) options))
-         (libraries (if (pair? libraries) libraries '("c")))
-         (libraries (if (equal? libraries '("none")) '() libraries))
+         (libraries (delete-duplicates (append libraries default-libraries)))
          (hex2-libraries (map (cut find-library options ".o" <>) libraries))
          (hex2-files (append hex2-files hex2-libraries))
          (S-files (append S-files (map (cut find-library options ".S" <>)  libraries)))
          (elf-footer (or elf-footer
                          (arch-find options (string-append
                                              "elf" machine "-footer-single-main.hex2"))))
+         (start-files (if (or (option-ref options 'nostartfiles #f)
+                              (option-ref options 'nostdlib #f)) '()
+                              `("-f" ,(arch-find options "crt1.o"))))
          (command `(,hex2
                     "--LittleEndian"
                     "--Architecture" ,architecture
                     "--BaseAddress" ,base-address
                     "-f" ,(arch-find options (string-append "elf" machine "-header.hex2"))
-                    "-f" ,(arch-find options "crt1.o")
+                    ,@start-files
                     ,@(append-map (cut list "-f" <>) hex2-files)
                     "-f" ,elf-footer
                     "--exec_enable"