From 4901bf48326d1bd4346cc6e0685f8a7e9b6ad022 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 20 Feb 2020 13:42:34 -0500 Subject: [PATCH] Added functions to read C linker options --- scheme/cyclone/libraries.sld | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/scheme/cyclone/libraries.sld b/scheme/cyclone/libraries.sld index 49f02413..912a469c 100644 --- a/scheme/cyclone/libraries.sld +++ b/scheme/cyclone/libraries.sld @@ -54,6 +54,9 @@ lib:get-all lib:get-all-import-deps lib:get-dep-list + lib:c-linker-options + lib:read-c-linker-options + lib:get-all-c-linker-options ;; Import Database "idb" oriented functions ;; ;; These functions perform operations for a "database" created from @@ -188,6 +191,15 @@ (tagged-list? 'include code)) (cddr ast)))) +(define (lib:c-linker-options ast) + (map + (lambda (inc-lst) + (cadr inc-lst)) + (filter + (lambda (code) + (tagged-list? 'c-linker-options code)) + (cddr ast)))) + (define (lib:include-c-headers ast) (map (lambda (inc-lst) @@ -380,6 +392,23 @@ (close-input-port fp) includes)) +(define (lib:read-c-linker-options import append-dirs prepend-dirs) + (let* ((lib-name (lib:import->library-name import)) + (dir (lib:import->filename lib-name ".sld" append-dirs prepend-dirs)) + (fp (open-input-file dir)) + (lib (read-all fp)) + (options (lib:c-linker-options (car lib)))) + (close-input-port fp) + (string-join options " "))) + +(define (lib:get-all-c-linker-options imports append-dirs prepend-dirs) + (string-join + (map + (lambda (import) + (lib:read-c-linker-options import append-dirs prepend-dirs)) + imports) + " ")) + ;; Read export list for a given import (define (lib:import->export-list import append-dirs prepend-dirs) (let* ((lib-name (lib:import->library-name import))