Unified · Split
| @@ -296,7 +296,13 @@ if test -z "$cross_prefix" ; then · 295 unmodified lines | ||
| 296 | 296 | gcc_major="$($CONFTEST version)" |
| 297 | 297 | gcc_minor="$($CONFTEST minor)" |
| 298 | 298 | if test "$mingw32" = "no" ; then |
| 299 | − libc_dir="$(ldd $CONFTEST | grep libc.so | sed 's|[^/]*/\(.*/\)[^/]*|\1|')" | |
| 299 | + triplet="$($CONFTEST triplet)" | |
| 300 | + if test -f "/usr/lib/$triplet/crti.o" ; then | |
| 301 | + tcc_lddir="lib/$triplet" | |
| 302 | + multiarch_triplet="$triplet" | |
| 303 | + elif test -f "usr/lib64/crti.o" ; then | |
| 304 | + tcc_lddir="lib64" | |
| 305 | + fi | |
| 300 | 306 | |
| 301 | 307 | # gr: FIXME |
| 302 | 308 | # ldd $CONFTEST gives (ubuntu 8) |
| @@ -306,13 +312,13 @@ if test -z "$cross_prefix" ; then · 3 unmodified lines | ||
| 306 | 312 | # result is crap: |
| 307 | 313 | # CONFIG_LDDIR="lib/tls/i686/cmov" |
| 308 | 314 | # CONFIG_MUADIR="tls/i686/cmov" |
| 309 | − | |
| 310 | − multiarch_triplet=${libc_dir#*/} | |
| 311 | − multiarch_triplet=${multiarch_triplet%/} | |
| 312 | − tcc_lddir="${libc_dir%%/*}" | |
| 313 | − if test -n "$multiarch_triplet" ; then | |
| 314 | − tcc_lddir="$tcc_lddir/$multiarch_triplet" | |
| 315 | − fi | |
| 315 | +# | |
| 316 | +# multiarch_triplet=${libc_dir#*/} | |
| 317 | +# multiarch_triplet=${multiarch_triplet%/} | |
| 318 | +# tcc_lddir="${libc_dir%%/*}" | |
| 319 | +# if test -n "$multiarch_triplet" ; then | |
| 320 | +# tcc_lddir="$tcc_lddir/$multiarch_triplet" | |
| 321 | +# fi | |
| 316 | 322 | |
| 317 | 323 | # gr: maybe for after the release: |
| 318 | 324 | # tcc_elfinterp="$(ldd $CONFTEST | grep 'ld.*.so' | sed 's,\s*\(\S\+\).*,\1,')" |
| @@ -1,27 +1,59 @@ | ||
| 1 | 1 | #include <stdio.h> |
| 2 | 2 | |
| 3 | +/* Define architecture */ | |
| 4 | +#if defined(__i386__) | |
| 5 | +# define TRIPLET_ARCH "i386" | |
| 6 | +#elif defined(__x86_64__) | |
| 7 | +# define TRIPLET_ARCH "x86_64" | |
| 8 | +#elif defined(__arm__) | |
| 9 | +# define TRIPLET_ARCH "arm" | |
| 10 | +#else | |
| 11 | +# define TRIPLET_ARCH "unknown" | |
| 12 | +#endif | |
| 13 | + | |
| 14 | +/* Define OS */ | |
| 15 | +#if defined (__linux__) | |
| 16 | +# define TRIPLET_OS "linux" | |
| 17 | +#elif defined (__FreeBSD__) || defined (__FreeBSD_kernel__) | |
| 18 | +# define TRIPLET_OS "kfreebsd" | |
| 19 | +#elif !defined (__GNU__) | |
| 20 | +# define TRIPLET_OS "unknown" | |
| 21 | +#endif | |
| 22 | + | |
| 23 | +/* Define calling convention and ABI */ | |
| 24 | +#define TRIPLET_ABI "gnu" | |
| 25 | + | |
| 26 | +#ifdef __GNU__ | |
| 27 | +# define TRIPLET TRIPLET_ARCH "-" TRIPLET_ABI | |
| 28 | +#else | |
| 29 | +# define TRIPLET TRIPLET_ARCH "-" TRIPLET_OS "-" TRIPLET_ABI | |
| 30 | +#endif | |
| 31 | + | |
| 3 | 32 | int main(int argc, char *argv[]) |
| 4 | 33 | { |
| 5 | 34 | switch(argc == 2 ? argv[1][0] : 0) { |
| 6 | −#ifdef __GNUC__ | |
| 7 | − case 'v': | |
| 8 | − printf("%d\n", __GNUC__); | |
| 35 | + case 'b': | |
| 36 | + { | |
| 37 | + volatile unsigned foo = 0x01234567; | |
| 38 | + puts(*(unsigned char*)&foo == 0x67 ? "no" : "yes"); | |
| 9 | 39 | break; |
| 40 | + } | |
| 41 | +#ifdef __GNUC__ | |
| 10 | 42 | case 'm': |
| 11 | 43 | printf("%d\n", __GNUC_MINOR__); |
| 12 | 44 | break; |
| 13 | −#else | |
| 14 | 45 | case 'v': |
| 46 | + printf("%d\n", __GNUC__); | |
| 47 | + break; | |
| 48 | +#else | |
| 15 | 49 | case 'm': |
| 50 | + case 'v': | |
| 16 | 51 | puts("0"); |
| 17 | 52 | break; |
| 18 | 53 | #endif |
| 19 | − case 'b': | |
| 20 | − { | |
| 21 | − volatile unsigned foo = 0x01234567; | |
| 22 | − puts(*(unsigned char*)&foo == 0x67 ? "no" : "yes"); | |
| 54 | + case 't': | |
| 55 | + puts(TRIPLET); | |
| 23 | 56 | break; |
| 24 | − } | |
| 25 | 57 | case -1: |
| 26 | 58 | /* to test -Wno-unused-result */ |
| 27 | 59 | fread(NULL, 1, 1, NULL); |