From 92751409f7e9c403cbfeb503cc494279c712c9ab Mon Sep 17 00:00:00 2001 From: Michael Forney Date: Sat, 29 Oct 2016 13:28:03 -0700 Subject: Provide mechanism to track library dependencies Now, ar/lib rules can list static libraries or other .d files. These (as well as the target library) are written to a file called $lib.d. link/exe rules can list these .d files, causing them to be flattened into an RSP file and appear on the command line as @$rsp. The rule to generate the dependency list files depends on the libraries they contain, so they also act as a stamp file for the dependencies. This gives us dependency management for free. --- scripts/rsp.awk | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 scripts/rsp.awk (limited to 'scripts') diff --git a/scripts/rsp.awk b/scripts/rsp.awk new file mode 100644 index 00000000..d157e249 --- /dev/null +++ b/scripts/rsp.awk @@ -0,0 +1,34 @@ +function line() { + if (match($0, /\.d$/)) + read($0) + else + libs[++n] = $0 +} + +function read(name) { + for (;;) { + ret = getline < name + if (ret < 0) { + print "failed to read line from " name > "/proc/self/fd/2" + exit(1) + } + if (ret == 0) + break + line() + } + close(name) +} + +{line()} + +END { + for (i = n; i > 0; --i) { + lib = libs[i] + if (lib in seen) + continue + seen[lib] = 1 + uniq[++m] = lib + } + for (i = m; i > 0; --i) + print uniq[i] +} -- cgit v1.2.3