diff options
| author | Henry Kroll III <henry@comptune.com> | 2010-12-06 16:17:20 -0800 |
|---|---|---|
| committer | Henry Kroll III <henry@comptune.com> | 2010-12-06 16:17:20 -0800 |
| commit | bb7bb37fe2eb47a35edcb4a5d4de62c044aafabf (patch) | |
| tree | 2d667f99ce2547b807ba262f555f6ce366aad059 /tcc.c | |
| parent | 33f86ada92cdd25864e37947ecd487f567ee6782 (diff) | |
| download | tinycc-bb7bb37fe2eb47a35edcb4a5d4de62c044aafabf.tar.gz tinycc-bb7bb37fe2eb47a35edcb4a5d4de62c044aafabf.tar.bz2 | |
tcc: add -m32 option to x86_64 cross compilers
Diffstat (limited to 'tcc.c')
| -rw-r--r-- | tcc.c | 35 |
1 files changed, 34 insertions, 1 deletions
@@ -212,6 +212,36 @@ static int expand_args(char ***pargv, const char *str) return argc; } +void exec_other_tcc(TCCState *s, int argc,char **argv,int optarg) +{ +#ifdef TCC_TARGET_X86_64 +#define WIN32_CAST + char arg[20]="i386-tcc"; + char sep='/',*tcc; + if (32 == optarg) {/* -m32 launches 32 bit tcc */ +#ifdef TCC_TARGET_PE +#ifdef _WIN32 +#define WIN32_CAST (const char**)(const char *) + strcpy(arg,"tcc.exe"); + sep='\\'; +#else + strcpy(arg,"i386-win32-tcc"); +#endif +#endif + if (!(tcc=strrchr(argv[0],sep))) + tcc=argv[0]; + else tcc++; + if (0<s->verbose) printf("%s->%s\n",tcc,arg); + if (strcmp(tcc,arg)) { + execvp(arg, WIN32_CAST (argv)); + error("cross compiler not found!"); + exit(1); +#undef WIN32_CAST + } else warning("-m32 infinite loop prevented"); + } else warning("usupported option \"-m%s\"",optarg); +#endif +} + static int parse_args(TCCState *s, int argc, char **argv) { int optind; @@ -334,7 +364,10 @@ static int parse_args(TCCState *s, int argc, char **argv) output_type = TCC_OUTPUT_DLL; break; case TCC_OPTION_soname: - s->soname = optarg; + s->soname = optarg; + break; + case TCC_OPTION_m: + exec_other_tcc(s,argc+1,argv-1,atoi(optarg)); break; case TCC_OPTION_o: multiple_files = 1; |
