compiler: accept foreign object files
authorDaniel Kochmański <daniel@turtleware.eu>
Wed, 23 Sep 2015 07:03:51 +0000 (09:03 +0200)
committerDaniel Kochmański <daniel@turtleware.eu>
Wed, 23 Sep 2015 07:03:51 +0000 (09:03 +0200)
Sometimes we want to build with objects from CFFI (like
wrappers). These doesn't have entry point and initialization
function. If we'll encounter such an object just attach it without
adding it to the initialization queue. Fixes #174.

Signed-off-by: Daniel Kochmański <daniel@turtleware.eu>
src/cmp/cmpmain.lsp
src/cmp/cmpname.lsp

index 6e8aa53..9f7e742 100755 (executable)
@@ -471,7 +471,8 @@ output = si_safe_eval(2, ecl_read_from_cstring(lisp_code), ECL_NIL);
                (flags (guess-ld-flags path)))
           ;; We should give a warning that we cannot link this module in
           (when flags (push flags ld-flags))
-          (push (list init-fn path) submodules))))
+          (when init-fn
+            (push (list init-fn path) submodules)))))
     (setf submodules-data (apply #'concatenate '(array base-char (*))
                                  submodules-data))
     (setq c-file (open c-name :direction :output :external-format :default))
index 6f611d9..d97c4b4 100644 (file)
@@ -107,7 +107,7 @@ the function name it precedes."
     ((:object :c :static-library :lib :shared-library :dll)
      (or (and (probe-file pathname)
               (find-init-name pathname :tag (kind->tag kind)))
-         (error "Cannot find out entry point for binary file ~A" pathname)))
+         (cmpnote "Cannot find out entry point for binary file ~A" pathname)))
     (otherwise (compute-init-name pathname kind))))
 
 (defun remove-prefix (prefix name)