From: Matthias Braun Date: Thu, 11 Jun 2009 09:30:27 +0000 (+0000) Subject: improve handling of multiple input files X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=338c2dc0519b7f20ec2ec885a46b911edc83d05e;p=cparser improve handling of multiple input files [r26130] --- diff --git a/driver/firm_cmdline.c b/driver/firm_cmdline.c index 28dae27..bb5ee95 100644 --- a/driver/firm_cmdline.c +++ b/driver/firm_cmdline.c @@ -51,7 +51,7 @@ struct a_firm_opt firm_opt = { /* use_DivMod = */ FALSE, /* remove_unused = */ TRUE, /* cloning = */ FALSE, - /* auto_sync = */ TRUE, + /* auto_sync = */ FALSE, /* alias_analysis = */ TRUE, /* strict_alias = */ FALSE, /* no_alias = */ FALSE, diff --git a/main.c b/main.c index d605c49..6d76bac 100644 --- a/main.c +++ b/main.c @@ -300,9 +300,42 @@ static const char *type_to_string(type_t *type) static FILE *preprocess(const char *fname, filetype_t filetype) { - obstack_1grow(&cppflags_obst, '\0'); - const char *flags = obstack_finish(&cppflags_obst); + static const char *common_flags = NULL; + + if (common_flags == NULL) { + obstack_1grow(&cppflags_obst, '\0'); + const char *flags = obstack_finish(&cppflags_obst); + + /* setup default defines */ + add_flag(&cppflags_obst, "-U__WCHAR_TYPE__"); + add_flag(&cppflags_obst, "-D__WCHAR_TYPE__=%s", type_to_string(type_wchar_t)); + add_flag(&cppflags_obst, "-U__SIZE_TYPE__"); + add_flag(&cppflags_obst, "-D__SIZE_TYPE__=%s", type_to_string(type_size_t)); + + add_flag(&cppflags_obst, "-U__VERSION__"); + add_flag(&cppflags_obst, "-D__VERSION__=\"%s\"", cparser_REVISION); + + /* TODO hack... */ + add_flag(&cppflags_obst, "-D__builtin_abort=abort"); + add_flag(&cppflags_obst, "-D__builtin_abs=abs"); + add_flag(&cppflags_obst, "-D__builtin_exit=exit"); + add_flag(&cppflags_obst, "-D__builtin_malloc=malloc"); + add_flag(&cppflags_obst, "-D__builtin_memcmp=memcmp"); + add_flag(&cppflags_obst, "-D__builtin_memcpy=memcpy"); + add_flag(&cppflags_obst, "-D__builtin_memset=memset"); + add_flag(&cppflags_obst, "-D__builtin_strlen=strlen"); + add_flag(&cppflags_obst, "-D__builtin_strcmp=strcmp"); + add_flag(&cppflags_obst, "-D__builtin_strcpy=strcpy"); + + if (flags[0] != '\0') { + size_t len = strlen(flags); + obstack_1grow(&cppflags_obst, ' '); + obstack_grow(&cppflags_obst, flags, len); + } + common_flags = obstack_finish(&cppflags_obst); + } + assert(obstack_object_size(&cppflags_obst) == 0); obstack_printf(&cppflags_obst, "%s", PREPROCESSOR); if (filetype == FILETYPE_C) { add_flag(&cppflags_obst, "-std=c99"); @@ -310,26 +343,7 @@ static FILE *preprocess(const char *fname, filetype_t filetype) add_flag(&cppflags_obst, "-std=c++98"); } - /* setup default defines */ - add_flag(&cppflags_obst, "-U__WCHAR_TYPE__"); - add_flag(&cppflags_obst, "-D__WCHAR_TYPE__=%s", type_to_string(type_wchar_t)); - add_flag(&cppflags_obst, "-U__SIZE_TYPE__"); - add_flag(&cppflags_obst, "-D__SIZE_TYPE__=%s", type_to_string(type_size_t)); - - add_flag(&cppflags_obst, "-U__VERSION__"); - add_flag(&cppflags_obst, "-D__VERSION__=\"%s\"", cparser_REVISION); - - /* TODO hack... */ - add_flag(&cppflags_obst, "-D__builtin_abort=abort"); - add_flag(&cppflags_obst, "-D__builtin_abs=abs"); - add_flag(&cppflags_obst, "-D__builtin_exit=exit"); - add_flag(&cppflags_obst, "-D__builtin_malloc=malloc"); - add_flag(&cppflags_obst, "-D__builtin_memcmp=memcmp"); - add_flag(&cppflags_obst, "-D__builtin_memcpy=memcpy"); - add_flag(&cppflags_obst, "-D__builtin_memset=memset"); - add_flag(&cppflags_obst, "-D__builtin_strlen=strlen"); - add_flag(&cppflags_obst, "-D__builtin_strcmp=strcmp"); - add_flag(&cppflags_obst, "-D__builtin_strcpy=strcpy"); + obstack_printf(&cppflags_obst, "%s", common_flags); /* handle dependency generation */ if (dep_target[0] != '\0') { @@ -340,11 +354,6 @@ static FILE *preprocess(const char *fname, filetype_t filetype) add_flag(&cppflags_obst, outname); } } - if (flags[0] != '\0') { - size_t len = strlen(flags); - obstack_1grow(&cppflags_obst, ' '); - obstack_grow(&cppflags_obst, flags, len); - } add_flag(&cppflags_obst, fname); obstack_1grow(&cppflags_obst, '\0');