Mercurial > hg > aboriginal
annotate sources/toys/ccwrap.c @ 1187:878dbfe76341
Move $BUILD/logs creation from record-commands.sh to include.sh so it gets reliably recreated when a user blanks the logs and re-runs.
author | Rob Landley <rob@landley.net> |
---|---|
date | Sun, 01 Aug 2010 15:19:00 -0500 |
parents | 66c29043b5ca |
children | 9cf24282eecf |
rev | line source |
---|---|
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
1 /* vi: set ts=4 :*/ |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
2 /* |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
3 * Copyright (C) 2000 Manuel Novoa III |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
4 * Copyright (C) 2002-2003 Erik Andersen |
943
7f2e6bdfcdcb
Remove the old GIMME_AN_S logic, instead make ccwrap autodetect presence of libgcc_s.so. Also fix a typo causing a nasty bug with the two dash version of --static.
Rob Landley <rob@landley.net>
parents:
937
diff
changeset
|
5 * Copyright (C) 2006-2010 Rob Landley <rob@landley.net> |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
6 * |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
7 * Wrapper to use make a C compiler relocatable. |
812
4e1e6aa7f445
Convince gcc to build/install libgcc_eh.a even for --disable-shared compilers, and tell the wrapper to expect it.
Rob Landley <rob@landley.net>
parents:
807
diff
changeset
|
8 * |
4e1e6aa7f445
Convince gcc to build/install libgcc_eh.a even for --disable-shared compilers, and tell the wrapper to expect it.
Rob Landley <rob@landley.net>
parents:
807
diff
changeset
|
9 * Licensed under GPLv2. |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
10 */ |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
11 |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
12 // No, we don't need to check the return value from asprintf(). |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
13 |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
14 #undef _FORTIFY_SOURCE |
888 | 15 |
16
7946bc54424b
Some more work on the wrapper. Still doesn't work yet.
Rob Landley <rob@landley.net>
parents:
14
diff
changeset
|
16 #define _GNU_SOURCE |
433
c7a1631711f4
Smallish wrapper cleanups, more to come.
Rob Landley <rob@landley.net>
parents:
403
diff
changeset
|
17 #include <alloca.h> |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
18 #include <stdio.h> |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
19 #include <stdlib.h> |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
20 #include <stdarg.h> |
76
5703436a408e
Update the uClibc snapshot and make config changes it needs.
Rob Landley <rob@landley.net>
parents:
65
diff
changeset
|
21 #include <string.h> |
57
f393a630a5b3
Weird ordering dependency. I think it's a uClibc bug?
Rob Landley <rob@landley.net>
parents:
56
diff
changeset
|
22 #include <strings.h> |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
23 #include <unistd.h> |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
24 #include <errno.h> |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
25 #include <sys/stat.h> |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
26 #include <sys/wait.h> |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
27 |
1148
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
28 static char *topdir, *devprefix; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
29 static char nostdinc[] = "-nostdinc"; |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
30 static char nostdlib[] = "-nostdlib"; |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
31 |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
32 // For C++ |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
33 static char nostdinc_plus[] = "-nostdinc++"; |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
34 |
550
64779e0f6c28
Make spurious gcc 4.3 warnings shut up. (What a horrible compiler.)
Rob Landley <rob@landley.net>
parents:
549
diff
changeset
|
35 // gcc 4.3 generates tons of spurious warnings which you can't shut off. |
64779e0f6c28
Make spurious gcc 4.3 warnings shut up. (What a horrible compiler.)
Rob Landley <rob@landley.net>
parents:
549
diff
changeset
|
36 |
935
6fb534830d8f
Silence compiler warnings: unused variable ?ignore?
Marc Andre Tanner <mat@brain-dump.org>
parents:
931
diff
changeset
|
37 #define xasprintf(...) do {(void)asprintf(__VA_ARGS__);} while(0) |
550
64779e0f6c28
Make spurious gcc 4.3 warnings shut up. (What a horrible compiler.)
Rob Landley <rob@landley.net>
parents:
549
diff
changeset
|
38 |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
39 // Confirm that a regular file exists, and (optionally) has the executable bit. |
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
40 int is_file(char *filename, int has_exe) |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
41 { |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
42 // Confirm it has the executable bit set, if necessary. |
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
43 if (!has_exe || !access(filename, X_OK)) { |
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
44 struct stat st; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
45 |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
46 // Confirm it exists and is not a directory. |
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
47 if (!stat(filename, &st) && S_ISREG(st.st_mode)) return 1; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
48 } |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
49 return 0; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
50 } |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
51 |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
52 // Find an executable in a colon-separated path |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
53 |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
54 char *find_in_path(char *path, char *filename, int has_exe) |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
55 { |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
56 char *cwd = getcwd(NULL, 0); |
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
57 |
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
58 if (index(filename, '/') && is_file(filename, has_exe)) |
863
4bfe2b34dd9f
Largeish refactoring/simplification of run-emulator.sh and associated code. Now automatically sets up the distcc trick if the appropriate $ARCH-cc toolchain is in the $PATH (or the current directory).
Rob Landley <rob@landley.net>
parents:
839
diff
changeset
|
59 return realpath(filename, NULL); |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
60 |
1104
6ab5dfe6b035
Check for null $PATH after checking for dir/filename (which doesn't need $PATH).
Rob Landley <rob@landley.net>
parents:
948
diff
changeset
|
61 while (path) { |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
62 char *str, *next = path ? index(path, ':') : NULL; |
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
63 int len = next ? next-path : strlen(path); |
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
64 |
64
51b8220c37e7
Make wrapper script work when /bin is a symlink to /usr/bin and the wrapper
Rob Landley <rob@landley.net>
parents:
63
diff
changeset
|
65 // The +3 is a corner case: if strlen(filename) is 1, make sure we |
51b8220c37e7
Make wrapper script work when /bin is a symlink to /usr/bin and the wrapper
Rob Landley <rob@landley.net>
parents:
63
diff
changeset
|
66 // have enough space to append ".." to make topdir. |
51b8220c37e7
Make wrapper script work when /bin is a symlink to /usr/bin and the wrapper
Rob Landley <rob@landley.net>
parents:
63
diff
changeset
|
67 str = malloc(strlen(filename) + (len ? len : strlen(cwd)) + 3); |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
68 if (!len) sprintf(str, "%s/%s", cwd, filename); |
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
69 else { |
16
7946bc54424b
Some more work on the wrapper. Still doesn't work yet.
Rob Landley <rob@landley.net>
parents:
14
diff
changeset
|
70 char *str2 = str; |
7946bc54424b
Some more work on the wrapper. Still doesn't work yet.
Rob Landley <rob@landley.net>
parents:
14
diff
changeset
|
71 |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
72 strncpy(str, path, len); |
16
7946bc54424b
Some more work on the wrapper. Still doesn't work yet.
Rob Landley <rob@landley.net>
parents:
14
diff
changeset
|
73 str2 = str+len; |
7946bc54424b
Some more work on the wrapper. Still doesn't work yet.
Rob Landley <rob@landley.net>
parents:
14
diff
changeset
|
74 *(str2++) = '/'; |
7946bc54424b
Some more work on the wrapper. Still doesn't work yet.
Rob Landley <rob@landley.net>
parents:
14
diff
changeset
|
75 strcpy(str2, filename); |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
76 } |
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
77 |
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
78 // If it's not a directory, return it. |
863
4bfe2b34dd9f
Largeish refactoring/simplification of run-emulator.sh and associated code. Now automatically sets up the distcc trick if the appropriate $ARCH-cc toolchain is in the $PATH (or the current directory).
Rob Landley <rob@landley.net>
parents:
839
diff
changeset
|
79 if (is_file(str, has_exe)) { |
4bfe2b34dd9f
Largeish refactoring/simplification of run-emulator.sh and associated code. Now automatically sets up the distcc trick if the appropriate $ARCH-cc toolchain is in the $PATH (or the current directory).
Rob Landley <rob@landley.net>
parents:
839
diff
changeset
|
80 char *s = realpath(str, NULL); |
4bfe2b34dd9f
Largeish refactoring/simplification of run-emulator.sh and associated code. Now automatically sets up the distcc trick if the appropriate $ARCH-cc toolchain is in the $PATH (or the current directory).
Rob Landley <rob@landley.net>
parents:
839
diff
changeset
|
81 free(str); |
1104
6ab5dfe6b035
Check for null $PATH after checking for dir/filename (which doesn't need $PATH).
Rob Landley <rob@landley.net>
parents:
948
diff
changeset
|
82 free(cwd); |
863
4bfe2b34dd9f
Largeish refactoring/simplification of run-emulator.sh and associated code. Now automatically sets up the distcc trick if the appropriate $ARCH-cc toolchain is in the $PATH (or the current directory).
Rob Landley <rob@landley.net>
parents:
839
diff
changeset
|
83 return s; |
4bfe2b34dd9f
Largeish refactoring/simplification of run-emulator.sh and associated code. Now automatically sets up the distcc trick if the appropriate $ARCH-cc toolchain is in the $PATH (or the current directory).
Rob Landley <rob@landley.net>
parents:
839
diff
changeset
|
84 } else free(str); |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
85 |
1106
33ad2278b2af
Last tweak to this file introduced a bug looping endlessly, failing to proceed past the separator. Oops.
Rob Landley <rob@landley.net>
parents:
1105
diff
changeset
|
86 if (next) next++; |
1104
6ab5dfe6b035
Check for null $PATH after checking for dir/filename (which doesn't need $PATH).
Rob Landley <rob@landley.net>
parents:
948
diff
changeset
|
87 path = next; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
88 } |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
89 free(cwd); |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
90 |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
91 return NULL; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
92 } |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
93 |
1148
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
94 // Some compiler versions don't provide separate T and S versions of begin/end, |
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
95 // so fall back to the base version if they're not there. |
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
96 |
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
97 char *find_TSpath(char *base, int use_shared, int use_static_linking) |
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
98 { |
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
99 int i; |
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
100 char *temp; |
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
101 |
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
102 asprintf(&temp, base, devprefix, |
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
103 use_shared ? "S.o" : use_static_linking ? "T.o" : ".o"); |
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
104 |
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
105 if (!is_file(temp, 0)) { |
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
106 free(temp); |
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
107 asprintf(&temp, base, devprefix, ".o"); |
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
108 } |
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
109 |
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
110 return temp; |
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
111 } |
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
112 |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
113 int main(int argc, char **argv) |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
114 { |
943
7f2e6bdfcdcb
Remove the old GIMME_AN_S logic, instead make ccwrap autodetect presence of libgcc_s.so. Also fix a typo causing a nasty bug with the two dash version of --static.
Rob Landley <rob@landley.net>
parents:
937
diff
changeset
|
115 int linking = 1, use_static_linking = 0, use_shared_libgcc; |
549
2edf40b17ee2
Select crtbegin.o and crtend.o variants more accurately for -static and -shared.
Rob Landley <rob@landley.net>
parents:
548
diff
changeset
|
116 int use_stdinc = 1, use_start = 1, use_stdlib = 1, use_shared = 0; |
435
d8e531563e35
Clean out some of the old uClibc build dir stuff nothing uses anymore.
Rob Landley <rob@landley.net>
parents:
434
diff
changeset
|
117 int source_count = 0, verbose = 0; |
528
71f438cde285
Make compiler wrapper parse -M options correctly, so uClibc make utils works.
Rob Landley <rob@landley.net>
parents:
447
diff
changeset
|
118 int i, argcnt, liblen, lplen; |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
119 char **cc_argv, **libraries, **libpath; |
1148
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
120 char *dlstr; |
748
897fb219ead7
Teach ccwrap to handle --print-prog-name=ld and such.
Rob Landley <rob@landley.net>
parents:
684
diff
changeset
|
121 char *cc, *toolprefix; |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
122 char *debug_wrapper=getenv("CCWRAP_DEBUG"); |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
123 |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
124 // For C++ |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
125 |
547 | 126 char *cpp = NULL; |
748
897fb219ead7
Teach ccwrap to handle --print-prog-name=ld and such.
Rob Landley <rob@landley.net>
parents:
684
diff
changeset
|
127 int prefixlen, ctor_dtor = 1, use_nostdinc_plus = 0; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
128 |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
129 // For profiling |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
130 int profile = 0; |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
131 |
42
7b0f34fbc35a
Fix inappropriate activation of profiling support, and add environment variable
Rob Landley <rob@landley.net>
parents:
30
diff
changeset
|
132 if(debug_wrapper) { |
217
01fd30185476
Use fprintf(stderr,...) instead of dprintf(2,...) to be more portable.
Rob Landley <rob@landley.net>
parents:
76
diff
changeset
|
133 fprintf(stderr,"incoming: "); |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
134 for(cc_argv=argv;*cc_argv;cc_argv++) |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
135 fprintf(stderr,"%s ",*cc_argv); |
217
01fd30185476
Use fprintf(stderr,...) instead of dprintf(2,...) to be more portable.
Rob Landley <rob@landley.net>
parents:
76
diff
changeset
|
136 fprintf(stderr,"\n\n"); |
42
7b0f34fbc35a
Fix inappropriate activation of profiling support, and add environment variable
Rob Landley <rob@landley.net>
parents:
30
diff
changeset
|
137 } |
28
a6a06bf0c541
Replace single character variable names with ones that are easier to grep for.
Rob Landley <rob@landley.net>
parents:
22
diff
changeset
|
138 |
a6a06bf0c541
Replace single character variable names with ones that are easier to grep for.
Rob Landley <rob@landley.net>
parents:
22
diff
changeset
|
139 // Allocate space for new command line |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
140 cc_argv = alloca(sizeof(char*) * (argc + 128)); |
28
a6a06bf0c541
Replace single character variable names with ones that are easier to grep for.
Rob Landley <rob@landley.net>
parents:
22
diff
changeset
|
141 |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
142 // What directory is the wrapper script in? |
16
7946bc54424b
Some more work on the wrapper. Still doesn't work yet.
Rob Landley <rob@landley.net>
parents:
14
diff
changeset
|
143 if(!(topdir = find_in_path(getenv("PATH"), argv[0], 1))) { |
839
1067e99efbdc
ccwrap shouldn't segfault if PATH isn't exported. (Thanks to Wangji Hoan for spotting this bug.)
Rob Landley <rob@landley.net>
parents:
812
diff
changeset
|
144 fprintf(stderr, "can't find %s in $PATH (did you export it?)\n", argv[0]); |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
145 exit(1); |
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
146 } else { |
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
147 char *path = getenv("PATH"), *temp; |
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
148 |
1105
345f49b45123
Another fix for unexported $PATH.
Rob Landley <rob@landley.net>
parents:
1104
diff
changeset
|
149 if (!path) path = ""; |
345f49b45123
Another fix for unexported $PATH.
Rob Landley <rob@landley.net>
parents:
1104
diff
changeset
|
150 |
64
51b8220c37e7
Make wrapper script work when /bin is a symlink to /usr/bin and the wrapper
Rob Landley <rob@landley.net>
parents:
63
diff
changeset
|
151 // Add that directory to the start of $PATH. (Better safe than sorry.) |
16
7946bc54424b
Some more work on the wrapper. Still doesn't work yet.
Rob Landley <rob@landley.net>
parents:
14
diff
changeset
|
152 *rindex(topdir,'/') = 0; |
257
d37e39370d39
Fix cross compiler toolchain to be properly relocatable on x86-64 host.
Rob Landley <rob@landley.net>
parents:
217
diff
changeset
|
153 temp = malloc(5+strlen(topdir)+1+strlen(topdir)+14+strlen(path)+1); |
d37e39370d39
Fix cross compiler toolchain to be properly relocatable on x86-64 host.
Rob Landley <rob@landley.net>
parents:
217
diff
changeset
|
154 sprintf(temp,"PATH=%s:%s/../tools/bin:%s",topdir,topdir,path); |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
155 putenv(temp); |
16
7946bc54424b
Some more work on the wrapper. Still doesn't work yet.
Rob Landley <rob@landley.net>
parents:
14
diff
changeset
|
156 |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
157 // The directory above the wrapper script should have include, cc, |
65
79295919b775
Ok, when appending .. instead of truncating at /, remember the "stop truncating"
Rob Landley <rob@landley.net>
parents:
64
diff
changeset
|
158 // and lib directories. However, the script could have a symlink |
79295919b775
Ok, when appending .. instead of truncating at /, remember the "stop truncating"
Rob Landley <rob@landley.net>
parents:
64
diff
changeset
|
159 // pointing to its directory (ala /bin -> /usr/bin), so append ".." |
79295919b775
Ok, when appending .. instead of truncating at /, remember the "stop truncating"
Rob Landley <rob@landley.net>
parents:
64
diff
changeset
|
160 // instead of trucating the path. |
79295919b775
Ok, when appending .. instead of truncating at /, remember the "stop truncating"
Rob Landley <rob@landley.net>
parents:
64
diff
changeset
|
161 strcat(topdir,"/.."); |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
162 } |
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
163 |
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
164 // What's the name of the C compiler we're wrapping? (It may have a |
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
165 // cross-prefix.) |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
166 cc = getenv("CCWRAP_CC"); |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
167 if (!cc) cc = "rawcc"; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
168 |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
169 // Check end of name, since there could be a cross-prefix on the thing |
748
897fb219ead7
Teach ccwrap to handle --print-prog-name=ld and such.
Rob Landley <rob@landley.net>
parents:
684
diff
changeset
|
170 toolprefix = strrchr(argv[0], '/'); |
897fb219ead7
Teach ccwrap to handle --print-prog-name=ld and such.
Rob Landley <rob@landley.net>
parents:
684
diff
changeset
|
171 if (!toolprefix) toolprefix = argv[0]; |
800
d20b91530061
Be a little more consistent about space vs tab indentation.
Rob Landley <rob@landley.net>
parents:
748
diff
changeset
|
172 else toolprefix++; |
748
897fb219ead7
Teach ccwrap to handle --print-prog-name=ld and such.
Rob Landley <rob@landley.net>
parents:
684
diff
changeset
|
173 |
897fb219ead7
Teach ccwrap to handle --print-prog-name=ld and such.
Rob Landley <rob@landley.net>
parents:
684
diff
changeset
|
174 prefixlen = strlen(toolprefix); |
807
d0b74a631587
Teach ccwrap.c to use arch-specific WRAPPER_TOPDIR values, to avoid interfering with canadian cross.
Rob Landley <rob@landley.net>
parents:
800
diff
changeset
|
175 if (prefixlen>=3 && !strcmp(toolprefix+prefixlen-3, "gcc")) prefixlen -= 3; |
800
d20b91530061
Be a little more consistent about space vs tab indentation.
Rob Landley <rob@landley.net>
parents:
748
diff
changeset
|
176 else if (!strcmp(toolprefix+prefixlen-2, "cc")) prefixlen -= 2; |
748
897fb219ead7
Teach ccwrap to handle --print-prog-name=ld and such.
Rob Landley <rob@landley.net>
parents:
684
diff
changeset
|
177 else if (!strcmp(toolprefix+prefixlen-2, "ld")) { |
800
d20b91530061
Be a little more consistent about space vs tab indentation.
Rob Landley <rob@landley.net>
parents:
748
diff
changeset
|
178 prefixlen -= 2; |
433
c7a1631711f4
Smallish wrapper cleanups, more to come.
Rob Landley <rob@landley.net>
parents:
403
diff
changeset
|
179 |
c7a1631711f4
Smallish wrapper cleanups, more to come.
Rob Landley <rob@landley.net>
parents:
403
diff
changeset
|
180 // TODO: put support for wrapping the linker here. |
c7a1631711f4
Smallish wrapper cleanups, more to come.
Rob Landley <rob@landley.net>
parents:
403
diff
changeset
|
181 |
28
a6a06bf0c541
Replace single character variable names with ones that are easier to grep for.
Rob Landley <rob@landley.net>
parents:
22
diff
changeset
|
182 // Wrapping the c++ compiler? |
748
897fb219ead7
Teach ccwrap to handle --print-prog-name=ld and such.
Rob Landley <rob@landley.net>
parents:
684
diff
changeset
|
183 } else if (!strcmp(toolprefix+prefixlen-2, "++")) { |
897fb219ead7
Teach ccwrap to handle --print-prog-name=ld and such.
Rob Landley <rob@landley.net>
parents:
684
diff
changeset
|
184 int len = strlen(cc); |
433
c7a1631711f4
Smallish wrapper cleanups, more to come.
Rob Landley <rob@landley.net>
parents:
403
diff
changeset
|
185 cpp = alloca(len+1); |
c7a1631711f4
Smallish wrapper cleanups, more to come.
Rob Landley <rob@landley.net>
parents:
403
diff
changeset
|
186 strcpy(cpp, cc); |
c7a1631711f4
Smallish wrapper cleanups, more to come.
Rob Landley <rob@landley.net>
parents:
403
diff
changeset
|
187 cpp[len-1]='+'; |
c7a1631711f4
Smallish wrapper cleanups, more to come.
Rob Landley <rob@landley.net>
parents:
403
diff
changeset
|
188 cpp[len-2]='+'; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
189 use_nostdinc_plus = 1; |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
190 } |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
191 |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
192 devprefix = getenv("CCWRAP_TOPDIR"); |
807
d0b74a631587
Teach ccwrap.c to use arch-specific WRAPPER_TOPDIR values, to avoid interfering with canadian cross.
Rob Landley <rob@landley.net>
parents:
800
diff
changeset
|
193 if (!devprefix) { |
d0b74a631587
Teach ccwrap.c to use arch-specific WRAPPER_TOPDIR values, to avoid interfering with canadian cross.
Rob Landley <rob@landley.net>
parents:
800
diff
changeset
|
194 char *temp, *temp2; |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
195 asprintf(&temp, "%.*sCCWRAP_TOPDIR", prefixlen, toolprefix); |
807
d0b74a631587
Teach ccwrap.c to use arch-specific WRAPPER_TOPDIR values, to avoid interfering with canadian cross.
Rob Landley <rob@landley.net>
parents:
800
diff
changeset
|
196 temp2 = temp; |
d0b74a631587
Teach ccwrap.c to use arch-specific WRAPPER_TOPDIR values, to avoid interfering with canadian cross.
Rob Landley <rob@landley.net>
parents:
800
diff
changeset
|
197 while (*temp2) { |
d0b74a631587
Teach ccwrap.c to use arch-specific WRAPPER_TOPDIR values, to avoid interfering with canadian cross.
Rob Landley <rob@landley.net>
parents:
800
diff
changeset
|
198 if (*temp2 == '-') *temp2='_'; |
d0b74a631587
Teach ccwrap.c to use arch-specific WRAPPER_TOPDIR values, to avoid interfering with canadian cross.
Rob Landley <rob@landley.net>
parents:
800
diff
changeset
|
199 temp2++; |
d0b74a631587
Teach ccwrap.c to use arch-specific WRAPPER_TOPDIR values, to avoid interfering with canadian cross.
Rob Landley <rob@landley.net>
parents:
800
diff
changeset
|
200 } |
d0b74a631587
Teach ccwrap.c to use arch-specific WRAPPER_TOPDIR values, to avoid interfering with canadian cross.
Rob Landley <rob@landley.net>
parents:
800
diff
changeset
|
201 devprefix = getenv(temp); |
d0b74a631587
Teach ccwrap.c to use arch-specific WRAPPER_TOPDIR values, to avoid interfering with canadian cross.
Rob Landley <rob@landley.net>
parents:
800
diff
changeset
|
202 } |
547 | 203 if (!devprefix) devprefix = topdir; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
204 |
943
7f2e6bdfcdcb
Remove the old GIMME_AN_S logic, instead make ccwrap autodetect presence of libgcc_s.so. Also fix a typo causing a nasty bug with the two dash version of --static.
Rob Landley <rob@landley.net>
parents:
937
diff
changeset
|
205 // Do we have libgcc_s.so? |
7f2e6bdfcdcb
Remove the old GIMME_AN_S logic, instead make ccwrap autodetect presence of libgcc_s.so. Also fix a typo causing a nasty bug with the two dash version of --static.
Rob Landley <rob@landley.net>
parents:
937
diff
changeset
|
206 |
7f2e6bdfcdcb
Remove the old GIMME_AN_S logic, instead make ccwrap autodetect presence of libgcc_s.so. Also fix a typo causing a nasty bug with the two dash version of --static.
Rob Landley <rob@landley.net>
parents:
937
diff
changeset
|
207 asprintf(&dlstr, "%s/lib/libgcc_s.so", devprefix); |
7f2e6bdfcdcb
Remove the old GIMME_AN_S logic, instead make ccwrap autodetect presence of libgcc_s.so. Also fix a typo causing a nasty bug with the two dash version of --static.
Rob Landley <rob@landley.net>
parents:
937
diff
changeset
|
208 use_shared_libgcc = is_file(dlstr, 0); |
7f2e6bdfcdcb
Remove the old GIMME_AN_S logic, instead make ccwrap autodetect presence of libgcc_s.so. Also fix a typo causing a nasty bug with the two dash version of --static.
Rob Landley <rob@landley.net>
parents:
937
diff
changeset
|
209 free(dlstr); |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
210 |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
211 // Figure out where the dynamic linker is. |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
212 dlstr = getenv("CCWRAP_DYNAMIC_LINKER"); |
63
89cf9497824e
Teach the native build about ld-uClibc.so.0 can living in /tools.
Rob Landley <rob@landley.net>
parents:
57
diff
changeset
|
213 if (!dlstr) dlstr = "/lib/ld-uClibc.so.0"; |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
214 asprintf(&dlstr, "-Wl,--dynamic-linker,%s", dlstr); |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
215 |
28
a6a06bf0c541
Replace single character variable names with ones that are easier to grep for.
Rob Landley <rob@landley.net>
parents:
22
diff
changeset
|
216 liblen = 0; |
433
c7a1631711f4
Smallish wrapper cleanups, more to come.
Rob Landley <rob@landley.net>
parents:
403
diff
changeset
|
217 libraries = alloca(sizeof(char*) * (argc)); |
439
f257bd255545
Next round of wrapper cleanups: give C++ includes a sane path, prefix environment variables with WRAPPER_, don't set pointers to a char '\0' value.
Rob Landley <rob@landley.net>
parents:
438
diff
changeset
|
218 libraries[liblen] = 0; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
219 |
434
116c10067f4a
Replace variable "n" with something greppable.
Rob Landley <rob@landley.net>
parents:
433
diff
changeset
|
220 lplen = 0; |
433
c7a1631711f4
Smallish wrapper cleanups, more to come.
Rob Landley <rob@landley.net>
parents:
403
diff
changeset
|
221 libpath = alloca(sizeof(char*) * (argc)); |
439
f257bd255545
Next round of wrapper cleanups: give C++ includes a sane path, prefix environment variables with WRAPPER_, don't set pointers to a char '\0' value.
Rob Landley <rob@landley.net>
parents:
438
diff
changeset
|
222 libpath[lplen] = 0; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
223 |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
224 // Parse the incoming compiler arguments. |
18
eaf7a8d5e697
Managed to get a working toolchain, with wrapper script, to build a hello
Rob Landley <rob@landley.net>
parents:
16
diff
changeset
|
225 |
548
b826a6168464
Coding style and whitespace cleanups, and remove one unnecessary if(cpp).
Rob Landley <rob@landley.net>
parents:
547
diff
changeset
|
226 for (i=1; i<argc; i++) { |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
227 if (argv[i][0] == '-' && argv[i][1]) { /* option */ |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
228 switch (argv[i][1]) { |
528
71f438cde285
Make compiler wrapper parse -M options correctly, so uClibc make utils works.
Rob Landley <rob@landley.net>
parents:
447
diff
changeset
|
229 case 'M': /* generate dependencies */ |
71f438cde285
Make compiler wrapper parse -M options correctly, so uClibc make utils works.
Rob Landley <rob@landley.net>
parents:
447
diff
changeset
|
230 { |
71f438cde285
Make compiler wrapper parse -M options correctly, so uClibc make utils works.
Rob Landley <rob@landley.net>
parents:
447
diff
changeset
|
231 char *p = argv[i]; |
71f438cde285
Make compiler wrapper parse -M options correctly, so uClibc make utils works.
Rob Landley <rob@landley.net>
parents:
447
diff
changeset
|
232 |
71f438cde285
Make compiler wrapper parse -M options correctly, so uClibc make utils works.
Rob Landley <rob@landley.net>
parents:
447
diff
changeset
|
233 // -M and -MM imply -E and thus no linking |
71f438cde285
Make compiler wrapper parse -M options correctly, so uClibc make utils works.
Rob Landley <rob@landley.net>
parents:
447
diff
changeset
|
234 // Other -MX options _don't_, including -MMD. |
71f438cde285
Make compiler wrapper parse -M options correctly, so uClibc make utils works.
Rob Landley <rob@landley.net>
parents:
447
diff
changeset
|
235 if (p[2] && (p[2]!='M' || p[3])) break; |
71f438cde285
Make compiler wrapper parse -M options correctly, so uClibc make utils works.
Rob Landley <rob@landley.net>
parents:
447
diff
changeset
|
236 } |
71f438cde285
Make compiler wrapper parse -M options correctly, so uClibc make utils works.
Rob Landley <rob@landley.net>
parents:
447
diff
changeset
|
237 // fall through |
71f438cde285
Make compiler wrapper parse -M options correctly, so uClibc make utils works.
Rob Landley <rob@landley.net>
parents:
447
diff
changeset
|
238 |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
239 case 'c': /* compile or assemble */ |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
240 case 'S': /* generate assembler code */ |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
241 case 'E': /* preprocess only */ |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
242 linking = 0; |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
243 break; |
18
eaf7a8d5e697
Managed to get a working toolchain, with wrapper script, to build a hello
Rob Landley <rob@landley.net>
parents:
16
diff
changeset
|
244 |
eaf7a8d5e697
Managed to get a working toolchain, with wrapper script, to build a hello
Rob Landley <rob@landley.net>
parents:
16
diff
changeset
|
245 case 'L': /* library path */ |
434
116c10067f4a
Replace variable "n" with something greppable.
Rob Landley <rob@landley.net>
parents:
433
diff
changeset
|
246 libpath[lplen++] = argv[i]; |
439
f257bd255545
Next round of wrapper cleanups: give C++ includes a sane path, prefix environment variables with WRAPPER_, don't set pointers to a char '\0' value.
Rob Landley <rob@landley.net>
parents:
438
diff
changeset
|
247 libpath[lplen] = 0; |
f257bd255545
Next round of wrapper cleanups: give C++ includes a sane path, prefix environment variables with WRAPPER_, don't set pointers to a char '\0' value.
Rob Landley <rob@landley.net>
parents:
438
diff
changeset
|
248 if (!argv[i][2]) { |
f257bd255545
Next round of wrapper cleanups: give C++ includes a sane path, prefix environment variables with WRAPPER_, don't set pointers to a char '\0' value.
Rob Landley <rob@landley.net>
parents:
438
diff
changeset
|
249 argv[i] = 0; |
434
116c10067f4a
Replace variable "n" with something greppable.
Rob Landley <rob@landley.net>
parents:
433
diff
changeset
|
250 libpath[lplen++] = argv[++i]; |
439
f257bd255545
Next round of wrapper cleanups: give C++ includes a sane path, prefix environment variables with WRAPPER_, don't set pointers to a char '\0' value.
Rob Landley <rob@landley.net>
parents:
438
diff
changeset
|
251 libpath[lplen] = 0; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
252 } |
439
f257bd255545
Next round of wrapper cleanups: give C++ includes a sane path, prefix environment variables with WRAPPER_, don't set pointers to a char '\0' value.
Rob Landley <rob@landley.net>
parents:
438
diff
changeset
|
253 argv[i] = 0; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
254 break; |
18
eaf7a8d5e697
Managed to get a working toolchain, with wrapper script, to build a hello
Rob Landley <rob@landley.net>
parents:
16
diff
changeset
|
255 |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
256 case 'l': /* library */ |
28
a6a06bf0c541
Replace single character variable names with ones that are easier to grep for.
Rob Landley <rob@landley.net>
parents:
22
diff
changeset
|
257 libraries[liblen++] = argv[i]; |
439
f257bd255545
Next round of wrapper cleanups: give C++ includes a sane path, prefix environment variables with WRAPPER_, don't set pointers to a char '\0' value.
Rob Landley <rob@landley.net>
parents:
438
diff
changeset
|
258 libraries[liblen] = 0; |
f257bd255545
Next round of wrapper cleanups: give C++ includes a sane path, prefix environment variables with WRAPPER_, don't set pointers to a char '\0' value.
Rob Landley <rob@landley.net>
parents:
438
diff
changeset
|
259 argv[i] = 0; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
260 break; |
18
eaf7a8d5e697
Managed to get a working toolchain, with wrapper script, to build a hello
Rob Landley <rob@landley.net>
parents:
16
diff
changeset
|
261 |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
262 case 'v': /* verbose */ |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
263 if (argv[i][2] == 0) verbose = 1; |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
264 printf("Invoked as %s\n", argv[0]); |
16
7946bc54424b
Some more work on the wrapper. Still doesn't work yet.
Rob Landley <rob@landley.net>
parents:
14
diff
changeset
|
265 printf("Reference path: %s\n", topdir); |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
266 break; |
18
eaf7a8d5e697
Managed to get a working toolchain, with wrapper script, to build a hello
Rob Landley <rob@landley.net>
parents:
16
diff
changeset
|
267 |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
268 case 'n': |
548
b826a6168464
Coding style and whitespace cleanups, and remove one unnecessary if(cpp).
Rob Landley <rob@landley.net>
parents:
547
diff
changeset
|
269 if (!strcmp(nostdinc,argv[i])) use_stdinc = 0; |
1148
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
270 else if (!strcmp("-nostartfiles",argv[i])) { |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
271 ctor_dtor = 0; |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
272 use_start = 0; |
1148
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
273 } else if (!strcmp("-nodefaultlibs",argv[i])) { |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
274 use_stdlib = 0; |
439
f257bd255545
Next round of wrapper cleanups: give C++ includes a sane path, prefix environment variables with WRAPPER_, don't set pointers to a char '\0' value.
Rob Landley <rob@landley.net>
parents:
438
diff
changeset
|
275 argv[i] = 0; |
548
b826a6168464
Coding style and whitespace cleanups, and remove one unnecessary if(cpp).
Rob Landley <rob@landley.net>
parents:
547
diff
changeset
|
276 } else if (!strcmp(nostdlib,argv[i])) { |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
277 ctor_dtor = 0; |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
278 use_start = 0; |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
279 use_stdlib = 0; |
548
b826a6168464
Coding style and whitespace cleanups, and remove one unnecessary if(cpp).
Rob Landley <rob@landley.net>
parents:
547
diff
changeset
|
280 } else if (!strcmp(nostdinc_plus,argv[i])) |
b826a6168464
Coding style and whitespace cleanups, and remove one unnecessary if(cpp).
Rob Landley <rob@landley.net>
parents:
547
diff
changeset
|
281 use_nostdinc_plus = 0; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
282 break; |
18
eaf7a8d5e697
Managed to get a working toolchain, with wrapper script, to build a hello
Rob Landley <rob@landley.net>
parents:
16
diff
changeset
|
283 |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
284 case 's': |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
285 if (!strcmp(argv[i],"-static")) { |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
286 use_static_linking = 1; |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
287 use_shared_libgcc=0; |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
288 } |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
289 if (!strcmp(argv[i],"-static-libgcc")) |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
290 use_shared_libgcc = 0; |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
291 if (!strcmp(argv[i],"-shared-libgcc")) |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
292 use_shared_libgcc = 1; |
548
b826a6168464
Coding style and whitespace cleanups, and remove one unnecessary if(cpp).
Rob Landley <rob@landley.net>
parents:
547
diff
changeset
|
293 if (!strcmp("-shared",argv[i])) { |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
294 use_start = 0; |
549
2edf40b17ee2
Select crtbegin.o and crtend.o variants more accurately for -static and -shared.
Rob Landley <rob@landley.net>
parents:
548
diff
changeset
|
295 use_shared = 1; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
296 } |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
297 break; |
18
eaf7a8d5e697
Managed to get a working toolchain, with wrapper script, to build a hello
Rob Landley <rob@landley.net>
parents:
16
diff
changeset
|
298 |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
299 case 'W': /* -static could be passed directly to ld */ |
548
b826a6168464
Coding style and whitespace cleanups, and remove one unnecessary if(cpp).
Rob Landley <rob@landley.net>
parents:
547
diff
changeset
|
300 if (!strncmp("-Wl,",argv[i],4)) { |
684
222886c9b3f5
Fix wrapper so it doesn't misinterpret -static-libgcc as -static.
Rob Landley <rob@landley.net>
parents:
550
diff
changeset
|
301 char *temp = strstr(argv[i], ",-static"); |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
302 if (temp && (!temp[7] || temp[7]==',')) { |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
303 use_static_linking = 1; |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
304 use_shared_libgcc=0; |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
305 } |
548
b826a6168464
Coding style and whitespace cleanups, and remove one unnecessary if(cpp).
Rob Landley <rob@landley.net>
parents:
547
diff
changeset
|
306 if (strstr(argv[i],"--dynamic-linker")) dlstr = 0; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
307 } |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
308 break; |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
309 |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
310 case 'p': |
20
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
311 if (!strncmp("-print-",argv[i],7)) { |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
312 char *temp, *temp2; |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
313 int itemp, showall = 0; |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
314 |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
315 temp = argv[i]+7; |
748
897fb219ead7
Teach ccwrap to handle --print-prog-name=ld and such.
Rob Landley <rob@landley.net>
parents:
684
diff
changeset
|
316 if (!strncmp(temp, "prog-name=", 10)) { |
897fb219ead7
Teach ccwrap to handle --print-prog-name=ld and such.
Rob Landley <rob@landley.net>
parents:
684
diff
changeset
|
317 printf("%.*s%s\n", prefixlen, toolprefix, temp+10); |
897fb219ead7
Teach ccwrap to handle --print-prog-name=ld and such.
Rob Landley <rob@landley.net>
parents:
684
diff
changeset
|
318 exit(0); |
897fb219ead7
Teach ccwrap to handle --print-prog-name=ld and such.
Rob Landley <rob@landley.net>
parents:
684
diff
changeset
|
319 } else if (!strcmp(temp, "search-dirs")) { |
20
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
320 printf("install: %s/\n",devprefix); |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
321 printf("programs: %s\n",getenv("PATH")); |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
322 printf("libraries: "); |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
323 temp2 = ""; |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
324 showall = 1; |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
325 } else if (!strncmp(temp, "file-name=", 10)) |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
326 temp2 = temp+10; |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
327 else if (!strcmp(temp, "libgcc-file-name")) |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
328 temp2="libgcc.a"; |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
329 else break; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
330 |
20
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
331 // Find this entry in the library path. |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
332 for(itemp=0;;itemp++) { |
441
8d14303eeca8
Upgrade --print-file-name to search $WRAPPER_DIR/lib, to print the directories it's trying when WRAPPER_DEBUG=1, and a few in-passing cleanups.
Rob Landley <rob@landley.net>
parents:
439
diff
changeset
|
333 if (itemp == lplen) |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
334 asprintf(&temp, "%s/cc/lib/%s", devprefix, |
550
64779e0f6c28
Make spurious gcc 4.3 warnings shut up. (What a horrible compiler.)
Rob Landley <rob@landley.net>
parents:
549
diff
changeset
|
335 temp2); |
441
8d14303eeca8
Upgrade --print-file-name to search $WRAPPER_DIR/lib, to print the directories it's trying when WRAPPER_DEBUG=1, and a few in-passing cleanups.
Rob Landley <rob@landley.net>
parents:
439
diff
changeset
|
336 else if (itemp == lplen+1) |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
337 asprintf(&temp, "%s/lib/%s", devprefix, temp2); |
441
8d14303eeca8
Upgrade --print-file-name to search $WRAPPER_DIR/lib, to print the directories it's trying when WRAPPER_DEBUG=1, and a few in-passing cleanups.
Rob Landley <rob@landley.net>
parents:
439
diff
changeset
|
338 |
905
023b577fb865
Break up sources/sections/binutils-gcc.sh into binutils, gcc, and ccwrap, plus more gcc->cc cleanup.
Rob Landley <rob@landley.net>
parents:
888
diff
changeset
|
339 // This is so "include" finds the cc internal |
441
8d14303eeca8
Upgrade --print-file-name to search $WRAPPER_DIR/lib, to print the directories it's trying when WRAPPER_DEBUG=1, and a few in-passing cleanups.
Rob Landley <rob@landley.net>
parents:
439
diff
changeset
|
340 // include dir. The uClibc build needs this. |
8d14303eeca8
Upgrade --print-file-name to search $WRAPPER_DIR/lib, to print the directories it's trying when WRAPPER_DEBUG=1, and a few in-passing cleanups.
Rob Landley <rob@landley.net>
parents:
439
diff
changeset
|
341 else if (itemp == lplen+2) |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
342 asprintf(&temp, "%s/cc/%s", devprefix, temp2); |
441
8d14303eeca8
Upgrade --print-file-name to search $WRAPPER_DIR/lib, to print the directories it's trying when WRAPPER_DEBUG=1, and a few in-passing cleanups.
Rob Landley <rob@landley.net>
parents:
439
diff
changeset
|
343 else if (itemp == lplen+3) { |
20
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
344 temp = temp2; |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
345 break; |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
346 } else asprintf(&temp, "%s/%s", libpath[itemp], |
20
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
347 temp2); |
441
8d14303eeca8
Upgrade --print-file-name to search $WRAPPER_DIR/lib, to print the directories it's trying when WRAPPER_DEBUG=1, and a few in-passing cleanups.
Rob Landley <rob@landley.net>
parents:
439
diff
changeset
|
348 |
8d14303eeca8
Upgrade --print-file-name to search $WRAPPER_DIR/lib, to print the directories it's trying when WRAPPER_DEBUG=1, and a few in-passing cleanups.
Rob Landley <rob@landley.net>
parents:
439
diff
changeset
|
349 if (debug_wrapper) |
8d14303eeca8
Upgrade --print-file-name to search $WRAPPER_DIR/lib, to print the directories it's trying when WRAPPER_DEBUG=1, and a few in-passing cleanups.
Rob Landley <rob@landley.net>
parents:
439
diff
changeset
|
350 fprintf(stderr, "try=%s\n", temp); |
8d14303eeca8
Upgrade --print-file-name to search $WRAPPER_DIR/lib, to print the directories it's trying when WRAPPER_DEBUG=1, and a few in-passing cleanups.
Rob Landley <rob@landley.net>
parents:
439
diff
changeset
|
351 |
20
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
352 if (showall) printf(":%s"+(itemp?0:1), temp); |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
353 else if (!access(temp, F_OK)) break; |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
354 } |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
355 |
441
8d14303eeca8
Upgrade --print-file-name to search $WRAPPER_DIR/lib, to print the directories it's trying when WRAPPER_DEBUG=1, and a few in-passing cleanups.
Rob Landley <rob@landley.net>
parents:
439
diff
changeset
|
356 |
8d14303eeca8
Upgrade --print-file-name to search $WRAPPER_DIR/lib, to print the directories it's trying when WRAPPER_DEBUG=1, and a few in-passing cleanups.
Rob Landley <rob@landley.net>
parents:
439
diff
changeset
|
357 |
20
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
358 printf("%s\n"+(showall ? 2 : 0), temp); |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
359 exit(0); |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
360 |
44067ab61cd2
Switch linking back on as the default, add support for -print-search-dirs,
Rob Landley <rob@landley.net>
parents:
19
diff
changeset
|
361 // Profiling. |
42
7b0f34fbc35a
Fix inappropriate activation of profiling support, and add environment variable
Rob Landley <rob@landley.net>
parents:
30
diff
changeset
|
362 } else if (!strcmp("-pg",argv[i])) profile = 1; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
363 break; |
18
eaf7a8d5e697
Managed to get a working toolchain, with wrapper script, to build a hello
Rob Landley <rob@landley.net>
parents:
16
diff
changeset
|
364 |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
365 case 'f': |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
366 // profiling |
549
2edf40b17ee2
Select crtbegin.o and crtend.o variants more accurately for -static and -shared.
Rob Landley <rob@landley.net>
parents:
548
diff
changeset
|
367 if (strcmp("-fprofile-arcs",argv[i]) == 0) profile = 1; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
368 break; |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
369 |
19
b5ffd82d9ae5
Two problems: 1) Needed to parse -print-file-name= to make the uClibc build
Rob Landley <rob@landley.net>
parents:
18
diff
changeset
|
370 // --longopts |
b5ffd82d9ae5
Two problems: 1) Needed to parse -print-file-name= to make the uClibc build
Rob Landley <rob@landley.net>
parents:
18
diff
changeset
|
371 |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
372 case '-': |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
373 if (!strncmp(argv[i],"--print-",8) |
943
7f2e6bdfcdcb
Remove the old GIMME_AN_S logic, instead make ccwrap autodetect presence of libgcc_s.so. Also fix a typo causing a nasty bug with the two dash version of --static.
Rob Landley <rob@landley.net>
parents:
937
diff
changeset
|
374 || !strncmp(argv[i],"--static",8)) |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
375 { |
29
db08bdb5e9de
The poor design of the gcc command line never ceases to amaze. Notice how
Rob Landley <rob@landley.net>
parents:
28
diff
changeset
|
376 argv[i]++; |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
377 i--; |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
378 continue; |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
379 } else if (!strcmp("--no-ctors", argv[i])) { |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
380 ctor_dtor = 0; |
439
f257bd255545
Next round of wrapper cleanups: give C++ includes a sane path, prefix environment variables with WRAPPER_, don't set pointers to a char '\0' value.
Rob Landley <rob@landley.net>
parents:
438
diff
changeset
|
381 argv[i] = 0; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
382 } |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
383 break; |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
384 } |
548
b826a6168464
Coding style and whitespace cleanups, and remove one unnecessary if(cpp).
Rob Landley <rob@landley.net>
parents:
547
diff
changeset
|
385 // assume it is an existing source file |
b826a6168464
Coding style and whitespace cleanups, and remove one unnecessary if(cpp).
Rob Landley <rob@landley.net>
parents:
547
diff
changeset
|
386 } else ++source_count; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
387 } |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
388 |
28
a6a06bf0c541
Replace single character variable names with ones that are easier to grep for.
Rob Landley <rob@landley.net>
parents:
22
diff
changeset
|
389 argcnt = 0; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
390 |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
391 cc_argv[argcnt++] = cpp ? cpp : cc; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
392 |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
393 if (cpp) cc_argv[argcnt++] = "-fno-use-cxa-atexit"; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
394 |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
395 if (linking && source_count) { |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
396 //#if defined HAS_ELF && ! defined HAS_MMU |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
397 // cc_argv[argcnt++] = "-Wl,-elf2flt"; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
398 //#endif |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
399 cc_argv[argcnt++] = nostdlib; |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
400 if (use_static_linking) cc_argv[argcnt++] = "-static"; |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
401 else if (dlstr) cc_argv[argcnt++] = dlstr; |
548
b826a6168464
Coding style and whitespace cleanups, and remove one unnecessary if(cpp).
Rob Landley <rob@landley.net>
parents:
547
diff
changeset
|
402 for (i=0; i<lplen; i++) |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
403 if (libpath[i]) cc_argv[argcnt++] = libpath[i]; |
547 | 404 |
405 // just to be safe: | |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
406 asprintf(cc_argv+(argcnt++), "-Wl,-rpath-link,%s/lib", devprefix); |
547 | 407 |
441
8d14303eeca8
Upgrade --print-file-name to search $WRAPPER_DIR/lib, to print the directories it's trying when WRAPPER_DEBUG=1, and a few in-passing cleanups.
Rob Landley <rob@landley.net>
parents:
439
diff
changeset
|
408 |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
409 asprintf(cc_argv+(argcnt++), "-L%s/lib", devprefix); |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
410 asprintf(cc_argv+(argcnt++), "-L%s/cc/lib", devprefix); |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
411 } |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
412 if (use_stdinc && source_count) { |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
413 cc_argv[argcnt++] = nostdinc; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
414 |
447
4ed02d53fc92
Add C++ support to native compiler, based on uClibc++.
Rob Landley <rob@landley.net>
parents:
441
diff
changeset
|
415 if (cpp) { |
1148
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
416 if (use_nostdinc_plus) cc_argv[argcnt++] = "-nostdinc++"; |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
417 cc_argv[argcnt++] = "-isystem"; |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
418 asprintf(cc_argv+(argcnt++), "%s/c++/include", devprefix); |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
419 } |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
420 |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
421 cc_argv[argcnt++] = "-isystem"; |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
422 asprintf(cc_argv+(argcnt++), "%s/include", devprefix); |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
423 cc_argv[argcnt++] = "-isystem"; |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
424 asprintf(cc_argv+(argcnt++), "%s/cc/include", devprefix); |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
425 } |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
426 |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
427 cc_argv[argcnt++] = "-U__nptl__"; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
428 |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
429 if (linking && source_count) { |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
430 |
547 | 431 if (profile) |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
432 asprintf(cc_argv+(argcnt++), "%s/lib/gcrt1.o", devprefix); |
547 | 433 |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
434 if (ctor_dtor) { |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
435 asprintf(cc_argv+(argcnt++), "%s/lib/crti.o", devprefix); |
1148
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
436 cc_argv[argcnt++]=find_TSpath("%s/cc/lib/crtbegin%s", |
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
437 use_shared, use_static_linking); |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
438 } |
441
8d14303eeca8
Upgrade --print-file-name to search $WRAPPER_DIR/lib, to print the directories it's trying when WRAPPER_DEBUG=1, and a few in-passing cleanups.
Rob Landley <rob@landley.net>
parents:
439
diff
changeset
|
439 if (use_start && !profile) |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
440 asprintf(cc_argv+(argcnt++), "%s/lib/crt1.o", devprefix); |
16
7946bc54424b
Some more work on the wrapper. Still doesn't work yet.
Rob Landley <rob@landley.net>
parents:
14
diff
changeset
|
441 |
7946bc54424b
Some more work on the wrapper. Still doesn't work yet.
Rob Landley <rob@landley.net>
parents:
14
diff
changeset
|
442 // Add remaining unclaimed arguments. |
7946bc54424b
Some more work on the wrapper. Still doesn't work yet.
Rob Landley <rob@landley.net>
parents:
14
diff
changeset
|
443 |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
444 for (i=1; i<argc; i++) if (argv[i]) cc_argv[argcnt++] = argv[i]; |
16
7946bc54424b
Some more work on the wrapper. Still doesn't work yet.
Rob Landley <rob@landley.net>
parents:
14
diff
changeset
|
445 |
948
ce8d2ff56908
Redo library sequencing, add -lgcc before -gcc_s (because that's what gcc expects).
Rob Landley <rob@landley.net>
parents:
947
diff
changeset
|
446 // Add shared libraries. |
ce8d2ff56908
Redo library sequencing, add -lgcc before -gcc_s (because that's what gcc expects).
Rob Landley <rob@landley.net>
parents:
947
diff
changeset
|
447 |
28
a6a06bf0c541
Replace single character variable names with ones that are easier to grep for.
Rob Landley <rob@landley.net>
parents:
22
diff
changeset
|
448 for (i = 0 ; i < liblen ; i++) |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
449 if (libraries[i]) cc_argv[argcnt++] = libraries[i]; |
948
ce8d2ff56908
Redo library sequencing, add -lgcc before -gcc_s (because that's what gcc expects).
Rob Landley <rob@landley.net>
parents:
947
diff
changeset
|
450 |
ce8d2ff56908
Redo library sequencing, add -lgcc before -gcc_s (because that's what gcc expects).
Rob Landley <rob@landley.net>
parents:
947
diff
changeset
|
451 // Add standard libraries |
ce8d2ff56908
Redo library sequencing, add -lgcc before -gcc_s (because that's what gcc expects).
Rob Landley <rob@landley.net>
parents:
947
diff
changeset
|
452 |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
453 if (use_stdlib) { |
447
4ed02d53fc92
Add C++ support to native compiler, based on uClibc++.
Rob Landley <rob@landley.net>
parents:
441
diff
changeset
|
454 if (cpp) { |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
455 cc_argv[argcnt++] = "-lstdc++"; |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
456 cc_argv[argcnt++] = "-lm"; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
457 } |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
458 |
948
ce8d2ff56908
Redo library sequencing, add -lgcc before -gcc_s (because that's what gcc expects).
Rob Landley <rob@landley.net>
parents:
947
diff
changeset
|
459 // libgcc can call libc which can call libgcc |
ce8d2ff56908
Redo library sequencing, add -lgcc before -gcc_s (because that's what gcc expects).
Rob Landley <rob@landley.net>
parents:
947
diff
changeset
|
460 |
ce8d2ff56908
Redo library sequencing, add -lgcc before -gcc_s (because that's what gcc expects).
Rob Landley <rob@landley.net>
parents:
947
diff
changeset
|
461 cc_argv[argcnt++] = "-lgcc"; |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
462 if (!use_static_linking && use_shared_libgcc) |
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
463 cc_argv[argcnt++] = "-Wl,--as-needed,-lgcc_s,--no-as-needed"; |
948
ce8d2ff56908
Redo library sequencing, add -lgcc before -gcc_s (because that's what gcc expects).
Rob Landley <rob@landley.net>
parents:
947
diff
changeset
|
464 else cc_argv[argcnt++] = "-lgcc_eh"; |
ce8d2ff56908
Redo library sequencing, add -lgcc before -gcc_s (because that's what gcc expects).
Rob Landley <rob@landley.net>
parents:
947
diff
changeset
|
465 |
ce8d2ff56908
Redo library sequencing, add -lgcc before -gcc_s (because that's what gcc expects).
Rob Landley <rob@landley.net>
parents:
947
diff
changeset
|
466 cc_argv[argcnt++] = "-lc"; |
ce8d2ff56908
Redo library sequencing, add -lgcc before -gcc_s (because that's what gcc expects).
Rob Landley <rob@landley.net>
parents:
947
diff
changeset
|
467 |
947
b2a18805352c
Fall back to libgcc.a and libgcc_eh.a if two passes of libgcc_s.so didn't resolve the symbols we need.
Rob Landley <rob@landley.net>
parents:
943
diff
changeset
|
468 cc_argv[argcnt++] = "-lgcc"; |
948
ce8d2ff56908
Redo library sequencing, add -lgcc before -gcc_s (because that's what gcc expects).
Rob Landley <rob@landley.net>
parents:
947
diff
changeset
|
469 if (!use_static_linking && use_shared_libgcc) |
ce8d2ff56908
Redo library sequencing, add -lgcc before -gcc_s (because that's what gcc expects).
Rob Landley <rob@landley.net>
parents:
947
diff
changeset
|
470 cc_argv[argcnt++] = "-Wl,--as-needed,-lgcc_s,--no-as-needed"; |
ce8d2ff56908
Redo library sequencing, add -lgcc before -gcc_s (because that's what gcc expects).
Rob Landley <rob@landley.net>
parents:
947
diff
changeset
|
471 else cc_argv[argcnt++] = "-lgcc_eh"; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
472 } |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
473 if (ctor_dtor) { |
1148
66c29043b5ca
Tweak ccwrap.c to handle compiler versions that only provide crtbegin.o and crtend.o without T and S versions.
Rob Landley <rob@landley.net>
parents:
1106
diff
changeset
|
474 cc_argv[argcnt++] = find_TSpath("%s/cc/lib/crtend%s", use_shared, 0); |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
475 asprintf(cc_argv+(argcnt++), "%s/lib/crtn.o", devprefix); |
28
a6a06bf0c541
Replace single character variable names with ones that are easier to grep for.
Rob Landley <rob@landley.net>
parents:
22
diff
changeset
|
476 } |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
477 } else for (i=1; i<argc; i++) if (argv[i]) cc_argv[argcnt++] = argv[i]; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
478 |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
479 cc_argv[argcnt++] = NULL; |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
480 |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
481 if (verbose) { |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
482 for (i=0; cc_argv[i]; i++) printf("arg[%2i] = %s\n", i, cc_argv[i]); |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
483 fflush(stdout); |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
484 } |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
485 |
42
7b0f34fbc35a
Fix inappropriate activation of profiling support, and add environment variable
Rob Landley <rob@landley.net>
parents:
30
diff
changeset
|
486 if (debug_wrapper) { |
217
01fd30185476
Use fprintf(stderr,...) instead of dprintf(2,...) to be more portable.
Rob Landley <rob@landley.net>
parents:
76
diff
changeset
|
487 fprintf(stderr, "outgoing: "); |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
488 for (i=0; cc_argv[i]; i++) fprintf(stderr, "%s ",cc_argv[i]); |
217
01fd30185476
Use fprintf(stderr,...) instead of dprintf(2,...) to be more portable.
Rob Landley <rob@landley.net>
parents:
76
diff
changeset
|
489 fprintf(stderr, "\n\n"); |
42
7b0f34fbc35a
Fix inappropriate activation of profiling support, and add environment variable
Rob Landley <rob@landley.net>
parents:
30
diff
changeset
|
490 } |
7b0f34fbc35a
Fix inappropriate activation of profiling support, and add environment variable
Rob Landley <rob@landley.net>
parents:
30
diff
changeset
|
491 |
937
f2b4d7297c9d
Largeish cleanup of ccwrap.c. Remove lots of uclibc-isms, put rawcc in tools/bin.
Rob Landley <rob@landley.net>
parents:
935
diff
changeset
|
492 execvp(cc_argv[0], cc_argv); |
14
8b4600334a3d
Replace the path finding logic with the stuff from toybox.
Rob Landley <rob@landley.net>
parents:
13
diff
changeset
|
493 fprintf(stderr, "%s: %s\n", cpp ? cpp : cc, strerror(errno)); |
13
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
494 exit(EXIT_FAILURE); |
d34028ce8602
A version of the old uClibc wrapper script, which Chris Faylor maintained for
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
495 } |