diff options
| author | Ramsay Jones <ramsay@ramsay1.demon.co.uk> | 2014-08-04 19:39:12 +0100 |
|---|---|---|
| committer | Christopher Li <sparse@chrisli.org> | 2014-10-10 22:43:37 +0800 |
| commit | 85e2e2a25266ffd24f08f3a396e7ac57fb307fbc (patch) | |
| tree | 44e0e4146862a3f07cf0298d295836cb9cf505af | |
| parent | e23abfd8844e605cfdeecb29ff9b733c95f5d2d5 (diff) | |
| download | sparse-dev-85e2e2a25266ffd24f08f3a396e7ac57fb307fbc.tar.gz | |
Add support for multiarch system header files
Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Christopher Li <sparse@chrisli.org>
| -rw-r--r-- | Makefile | 3 | ||||
| -rwxr-xr-x | cgcc | 10 | ||||
| -rw-r--r-- | lib.c | 18 | ||||
| -rw-r--r-- | sparse.1 | 6 |
4 files changed, 36 insertions, 1 deletions
@@ -36,6 +36,9 @@ HAVE_LLVM:=$(shell $(LLVM_CONFIG) --version >/dev/null 2>&1 && echo 'yes') GCC_BASE = $(shell $(CC) --print-file-name=) BASIC_CFLAGS = -DGCC_BASE=\"$(GCC_BASE)\" +MULTIARCH_TRIPLET = $(shell $(CC) -print-multiarch 2>/dev/null) +BASIC_CFLAGS += -DMULTIARCH_TRIPLET=\"$(MULTIARCH_TRIPLET)\" + ifeq ($(HAVE_GCC_DEP),yes) BASIC_CFLAGS += -Wp,-MD,$(@D)/.$(@F).d endif @@ -11,6 +11,7 @@ my $gendeps = 0; my $do_check = 0; my $do_compile = 1; my $gcc_base_dir; +my $multiarch_dir; my $verbose = 0; while (@ARGV) { @@ -44,6 +45,12 @@ while (@ARGV) { next; } + if (/^-multiarch-dir$/) { + $multiarch_dir = shift @ARGV; + die ("$0: missing argument for -multiarch-dir option") if !$multiarch_dir; + next; + } + # If someone adds "-E", don't pre-process twice. $do_compile = 0 if $_ eq '-E'; @@ -66,8 +73,11 @@ if ($do_check) { } $gcc_base_dir = qx($cc -print-file-name=) if !$gcc_base_dir; + chomp($gcc_base_dir); # possibly remove '\n' from compiler $check .= " -gcc-base-dir " . $gcc_base_dir if $gcc_base_dir; + $check .= " -multiarch-dir " . $multiarch_dir if $multiarch_dir; + print "$check\n" if $verbose; if ($do_compile) { system ($check) == 0 or die; @@ -59,6 +59,7 @@ int gcc_minor = __GNUC_MINOR__; int gcc_patchlevel = __GNUC_PATCHLEVEL__; static const char *gcc_base_dir = GCC_BASE; +static const char *multiarch_dir = MULTIARCH_TRIPLET; struct token *skip_to(struct token *token, int op) { @@ -371,6 +372,14 @@ static char **handle_switch_M(char *arg, char **next) return next; } +static char **handle_multiarch_dir(char *arg, char **next) +{ + multiarch_dir = *++next; + if (!multiarch_dir) + die("missing argument for -multiarch-dir option"); + return next; +} + static char **handle_switch_m(char *arg, char **next) { if (!strcmp(arg, "m64")) { @@ -379,7 +388,8 @@ static char **handle_switch_m(char *arg, char **next) arch_m64 = 0; } else if (!strcmp(arg, "msize-long")) { arch_msize_long = 1; - } + } else if (!strcmp(arg, "multiarch-dir")) + return handle_multiarch_dir(arg, next); return next; } @@ -890,6 +900,12 @@ void create_builtin_stream(void) add_pre_buffer("#weak_define __GNUC_MINOR__ %d\n", gcc_minor); add_pre_buffer("#weak_define __GNUC_PATCHLEVEL__ %d\n", gcc_patchlevel); + /* add the multiarch include directories, if any */ + if (multiarch_dir && *multiarch_dir) { + add_pre_buffer("#add_system \"/usr/include/%s\"\n", multiarch_dir); + add_pre_buffer("#add_system \"/usr/local/include/%s\"\n", multiarch_dir); + } + /* We add compiler headers path here because we have to parse * the arguments to get it, falling back to default. */ add_pre_buffer("#add_system \"%s/include\"\n", gcc_base_dir); @@ -338,6 +338,12 @@ Sparse does not issue these warnings by default. .B \-gcc-base-dir \fIdir\fR Look for compiler-provided system headers in \fIdir\fR/include/ and \fIdir\fR/include-fixed/. . +.TP +.B \-multiarch-dir \fIdir\fR +Look for system headers in the multiarch subdirectory \fIdir\fR. +The \fIdir\fR name would normally take the form of the target's +normalized GNU triplet. (e.g. i386-linux-gnu). +. .SH OTHER OPTIONS .TP .B \-ftabstop=WIDTH |
