aboutsummaryrefslogtreecommitdiff
path: root/libtcc.c
diff options
context:
space:
mode:
authorThomas Preud'homme <thomas.preudhomme@celest.fr>2011-08-01 22:32:44 +0200
committerThomas Preud'homme <thomas.preudhomme@celest.fr>2011-08-02 00:31:17 +0200
commit76adc5770f4ab5b1aaa2e5dde6104efc06431fe2 (patch)
treea3d2f62a38009d395f0b95538946b487e5764470 /libtcc.c
parent5e954fef32ec8b630132c230793e0f3faca34e0a (diff)
downloadtinycc-76adc5770f4ab5b1aaa2e5dde6104efc06431fe2.tar.gz
tinycc-76adc5770f4ab5b1aaa2e5dde6104efc06431fe2.tar.bz2
Add a --multiarch-triplet switch to configure
Add a --multiarch-triplet switch to configure. The switch will allow files to be search for each default path in path/<triplet> and then path. Default paths handled that way: - CONFIG_TCC_SYSINCLUDE_PATHS - CONFIG_TCC_LIBPATH - path to crt*.o - path to libgcc_s.so.1 Path missing: elf interpreter path (will be handled in another commit)
Diffstat (limited to 'libtcc.c')
-rw-r--r--libtcc.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/libtcc.c b/libtcc.c
index bcef2a6..f97149d 100644
--- a/libtcc.c
+++ b/libtcc.c
@@ -1226,14 +1226,19 @@ the_end:
return ret;
}
-LIBTCCAPI int tcc_add_file(TCCState *s, const char *filename)
+static int tcc_add_file_noerror(TCCState *s, const char *filename, int extra_flags)
{
dynarray_add((void ***)&s->input_files, &s->nb_input_files, tcc_strdup(filename));
if (s->output_type == TCC_OUTPUT_PREPROCESS)
- return tcc_add_file_internal(s, filename, AFF_PRINT_ERROR | AFF_PREPROCESS);
+ return tcc_add_file_internal(s, filename, extra_flags | AFF_PREPROCESS);
else
- return tcc_add_file_internal(s, filename, AFF_PRINT_ERROR);
+ return tcc_add_file_internal(s, filename, extra_flags);
+}
+
+LIBTCCAPI int tcc_add_file(TCCState *s, const char *filename)
+{
+ return tcc_add_file_noerror(s, filename, AFF_PRINT_ERROR);
}
LIBTCCAPI int tcc_add_library_path(TCCState *s, const char *pathname)
@@ -1347,9 +1352,16 @@ LIBTCCAPI int tcc_set_output_type(TCCState *s, int output_type)
#else
if ((output_type == TCC_OUTPUT_EXE || output_type == TCC_OUTPUT_DLL) &&
!s->nostdlib) {
- if (output_type != TCC_OUTPUT_DLL)
- tcc_add_file(s, CONFIG_SYSROOT CONFIG_TCC_CRT_PREFIX "/crt1.o");
- tcc_add_file(s, CONFIG_SYSROOT CONFIG_TCC_CRT_PREFIX "/crti.o");
+ if (output_type != TCC_OUTPUT_DLL) {
+#ifdef CONFIG_TCC_MULTIARCH_TRIPLET
+ if (tcc_add_file_noerror(s, CONFIG_SYSROOT CONFIG_TCC_CRT_PREFIX "/" CONFIG_TCC_MULTIARCH_TRIPLET "/crt1.o", 0))
+#endif
+ tcc_add_file(s, CONFIG_SYSROOT CONFIG_TCC_CRT_PREFIX "/crt1.o");
+ }
+#ifdef CONFIG_TCC_MULTIARCH_TRIPLET
+ if (tcc_add_file_noerror(s, CONFIG_SYSROOT CONFIG_TCC_CRT_PREFIX "/" CONFIG_TCC_MULTIARCH_TRIPLET "/crti.o", 0))
+#endif
+ tcc_add_file(s, CONFIG_SYSROOT CONFIG_TCC_CRT_PREFIX "/crti.o");
}
#endif
return 0;