libtcc: minor adjustments
- use {B} to substitute tcc_lih_path (instead of \b)
- expand CONFIG_TCC_CRTPREFIX in CONFIG_TCC_LIBPATHS
which fixes duplicate CONFIG_SYSROOT.
- put default CONFIG_SYSROOT ("") into tcc.h
- remove hack from commit db6fcce78f
because $(tccdir)/include is already in sysincludes
- configure: error out for unrecognized options.
- win32/build-tcc.bat: put libtcc into base dir where it will
find lib/include automatically, and build libtcc_test example.
This commit is contained in:
59
tcc.c
59
tcc.c
@ -263,6 +263,16 @@ static void exec_other_tcc(TCCState *s, char **argv, const char *optarg)
|
||||
}
|
||||
#endif
|
||||
|
||||
static void parse_option_D(TCCState *s1, const char *optarg)
|
||||
{
|
||||
char *sym = tcc_strdup(optarg);
|
||||
char *value = strchr(sym, '=');
|
||||
if (value)
|
||||
*value++ = '\0';
|
||||
tcc_define_symbol(s1, sym, value);
|
||||
tcc_free(sym);
|
||||
}
|
||||
|
||||
static int parse_args(TCCState *s, int argc, char **argv)
|
||||
{
|
||||
int optind;
|
||||
@ -327,16 +337,7 @@ static int parse_args(TCCState *s, int argc, char **argv)
|
||||
error("too many include paths");
|
||||
break;
|
||||
case TCC_OPTION_D:
|
||||
{
|
||||
char *sym, *value;
|
||||
sym = (char *)optarg;
|
||||
value = strchr(sym, '=');
|
||||
if (value) {
|
||||
*value = '\0';
|
||||
value++;
|
||||
}
|
||||
tcc_define_symbol(s, sym, value);
|
||||
}
|
||||
parse_option_D(s, optarg);
|
||||
break;
|
||||
case TCC_OPTION_U:
|
||||
tcc_undefine_symbol(s, optarg);
|
||||
@ -347,12 +348,6 @@ static int parse_args(TCCState *s, int argc, char **argv)
|
||||
case TCC_OPTION_B:
|
||||
/* set tcc utilities path (mainly for tcc development) */
|
||||
tcc_set_lib_path(s, optarg);
|
||||
/* append /include and add it as -isystem, as gcc does */
|
||||
r = tcc_strdup(optarg);
|
||||
r = tcc_realloc(r, strlen(r) + 8 + 1);
|
||||
strcat(r, "/include");
|
||||
tcc_add_sysinclude_path(s, r);
|
||||
tcc_free(r);
|
||||
break;
|
||||
case TCC_OPTION_l:
|
||||
dynarray_add((void ***)&files, &nb_files, r);
|
||||
@ -360,14 +355,14 @@ static int parse_args(TCCState *s, int argc, char **argv)
|
||||
break;
|
||||
case TCC_OPTION_pthread:
|
||||
was_pthread = 1;
|
||||
tcc_define_symbol(s, "_REENTRANT", "1");
|
||||
parse_option_D(s, "_REENTRANT");
|
||||
break;
|
||||
case TCC_OPTION_bench:
|
||||
do_bench = 1;
|
||||
break;
|
||||
#ifdef CONFIG_TCC_BACKTRACE
|
||||
case TCC_OPTION_bt:
|
||||
set_num_callers(atoi(optarg));
|
||||
tcc_set_num_callers(atoi(optarg));
|
||||
break;
|
||||
#endif
|
||||
#ifdef CONFIG_TCC_BCHECK
|
||||
@ -417,17 +412,17 @@ static int parse_args(TCCState *s, int argc, char **argv)
|
||||
print_search_dirs = 1;
|
||||
break;
|
||||
case TCC_OPTION_run:
|
||||
{
|
||||
int argc1;
|
||||
char **argv1;
|
||||
argc1 = expand_args(&argv1, optarg);
|
||||
if (argc1 > 0) {
|
||||
parse_args(s, argc1, argv1);
|
||||
}
|
||||
multiple_files = 0;
|
||||
output_type = TCC_OUTPUT_MEMORY;
|
||||
{
|
||||
int argc1;
|
||||
char **argv1;
|
||||
argc1 = expand_args(&argv1, optarg);
|
||||
if (argc1 > 0) {
|
||||
parse_args(s, argc1, argv1);
|
||||
}
|
||||
multiple_files = 0;
|
||||
output_type = TCC_OUTPUT_MEMORY;
|
||||
break;
|
||||
}
|
||||
case TCC_OPTION_v:
|
||||
do ++s->verbose; while (*optarg++ == 'v');
|
||||
break;
|
||||
@ -447,10 +442,8 @@ static int parse_args(TCCState *s, int argc, char **argv)
|
||||
s->rdynamic = 1;
|
||||
break;
|
||||
case TCC_OPTION_Wl:
|
||||
{
|
||||
if ((r = (char *) tcc_set_linker(s, (char *)optarg, TRUE)))
|
||||
error("unsupported linker option '%s'", r);
|
||||
}
|
||||
if ((r = (char *) tcc_set_linker(s, (char *)optarg, TRUE)))
|
||||
error("unsupported linker option '%s'", r);
|
||||
break;
|
||||
case TCC_OPTION_E:
|
||||
output_type = TCC_OUTPUT_PREPROCESS;
|
||||
@ -473,9 +466,7 @@ static int parse_args(TCCState *s, int argc, char **argv)
|
||||
}
|
||||
}
|
||||
/* fixme: these options could be different on your platform */
|
||||
if (was_pthread
|
||||
&& output_type != TCC_OUTPUT_OBJ)
|
||||
{
|
||||
if (was_pthread && output_type != TCC_OUTPUT_OBJ) {
|
||||
dynarray_add((void ***)&files, &nb_files, "-lpthread");
|
||||
nb_libraries++;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user