summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorRoland McGrath <roland@hack.frob.com>2013-06-17 09:55:21 -0700
committerRoland McGrath <roland@hack.frob.com>2013-06-17 09:55:21 -0700
commit346d65b33a3958c72faab6f675314cbef7963ace (patch)
treeaf8e8e9638397fa5217b4848b52a3f161aa5e4c8 /scripts
parent1a8463176c3edf52c38af022ce44e210f9bf4aaa (diff)
Rewrite sysd-rules generation using an awk script.
Diffstat (limited to 'scripts')
-rw-r--r--scripts/sysd-rules.awk60
1 files changed, 60 insertions, 0 deletions
diff --git a/scripts/sysd-rules.awk b/scripts/sysd-rules.awk
new file mode 100644
index 0000000000..2fb044eacb
--- /dev/null
+++ b/scripts/sysd-rules.awk
@@ -0,0 +1,60 @@
+# This is a GAWK script to generate the sysd-rules file.
+# It does not read any input, but it requires that several variables
+# be set on its command line (using -v) to their makefile counterparts:
+# all_object_suffixes $(all-object-suffixes)
+# inhibit_sysdep_asm $(inhibit-sysdep-asm)
+# config_sysdirs $(config_sysdirs)
+# sysd_rules_patterns $(sysd-rules-patterns)
+
+BEGIN {
+ print "sysd-rules-sysdirs :=", config_sysdirs;
+
+ nsuffixes = split(all_object_suffixes, suffixes);
+ ninhibit_asm = split(inhibit_sysdep_asm, inhibit_asm);
+ nsysdirs = split(config_sysdirs, sysdirs);
+ npatterns = split(sysd_rules_patterns, patterns);
+
+ for (sysdir_idx = 1; sysdir_idx <= nsysdirs; ++sysdir_idx) {
+ dir = sysdirs[sysdir_idx];
+ if (dir !~ /^\//) dir = "$(..)" dir;
+ asm_rules = 1;
+ for (i = 1; i <= ninhibit_asm; ++i) {
+ if (dir ~ ("^.*sysdeps/" inhibit_asm[i] "$")) {
+ asm_rules = 0;
+ break;
+ }
+ }
+ for (suffix_idx = 1; suffix_idx <= nsuffixes; ++suffix_idx) {
+ o = suffixes[suffix_idx];
+ for (pattern_idx = 1; pattern_idx <= npatterns; ++pattern_idx) {
+ pattern = patterns[pattern_idx];
+ if (split(pattern, td, ":") != 2) {
+ print "bad sysd-rules-patterns element '" pattern "'" > "/dev/stderr";
+ exit 2;
+ }
+ target_pattern = td[1];
+ dep_pattern = td[2];
+ if (target_pattern == "%") {
+ command_suffix = "";
+ } else {
+ prefix = gensub(/%/, "", "", target_pattern);
+ command_suffix = " $(" prefix "CPPFLAGS)";
+ }
+ target = "$(objpfx)" target_pattern o ":";
+ if (asm_rules) {
+ dep = dir "/" dep_pattern ".S";
+ print target, dep, "$(before-compile)";
+ print "\t$(compile-command.S)" command_suffix;
+ }
+ dep = dir "/" dep_pattern ".c";
+ print target, dep, "$(before-compile)";
+ print "\t$(compile-command.c)" command_suffix;
+ }
+ }
+ print "$(inst_includedir)/%.h:", dir "/%.h", "$(+force)";
+ print "\t$(do-install)";
+ }
+
+ print "sysd-rules-done := t";
+ exit 0;
+}