#include "warning.h"
#ifndef PREPROCESSOR
-#define PREPROCESSOR "cpp -std=c99 -U__WCHAR_TYPE__ -D__WCHAR_TYPE__=int -U__SIZE_TYPE__ -D__SIZE_TYPE__=__SIZE_TYPE__ -m32"
+#define PREPROCESSOR "cpp -std=c99 -U__WCHAR_TYPE__ -D__WCHAR_TYPE__=int -U__SIZE_TYPE__ -D__SIZE_TYPE__=__SIZE_TYPE__ -m32 -U__STRICT_ANSI__"
#endif
#ifndef LINKER
} else if(strcmp(option, "M") == 0) {
mode = PreprocessOnly;
add_flag(&cppflags_obst, "-M");
- } else if(strcmp(option, "MMD") == 0
- || strcmp(option, "MD") == 0
- || strcmp(option, "MM") == 0) {
+ } else if (strcmp(option, "MMD") == 0 ||
+ strcmp(option, "MD") == 0 ||
+ strcmp(option, "MM") == 0 ||
+ strcmp(option, "MP") == 0) {
add_flag(&cppflags_obst, "-%s", option);
} else if(strcmp(option, "MT") == 0
|| strcmp(option, "MQ") == 0
add_flag(&cppflags_obst, "%s", opt);
} else if(strcmp(option, "pipe") == 0) {
/* here for gcc compatibility */
- } else if(option[0] == 'f') {
+ } else if (option[0] == 'f') {
+ bool truth_value = true;
const char *opt;
GET_ARG_AFTER(opt, "-f");
+ if (opt[0] == 'n' && opt[1] == 'o' && opt[2] == '-') {
+ truth_value = false;
+ opt += 3;
+ }
- if(strcmp(opt, "syntax-only") == 0) {
+ if (strcmp(opt, "dollars-in-identifiers") == 0) {
+ allow_dollar_in_symbol = truth_value;
+ } else if (strcmp(opt, "short-wchar") == 0) {
+ opt_short_wchar_t = truth_value;
+ } else if (strcmp(opt, "syntax-only") == 0) {
mode = ParseOnly;
} else if(strcmp(opt, "omit-frame-pointer") == 0) {
- set_be_option("omitfp");
- } else if(strcmp(opt, "no-omit-frame-pointer") == 0) {
- set_be_option("omitfp=no");
+ set_be_option(truth_value ? "omitfp" : "omitfp=no");
} else if(strcmp(opt, "strength-reduce") == 0) {
firm_option("strength-red");
- } else if(strcmp(opt, "fast-math") == 0
+ } else if (strcmp(opt, "fast-math") == 0
+ || strcmp(opt, "jump-tables") == 0
|| strcmp(opt, "unroll-loops") == 0
|| strcmp(opt, "expensive-optimizations") == 0
|| strcmp(opt, "no-common") == 0
+ || strcmp(opt, "PIC") == 0
|| strncmp(opt, "align-loops=", sizeof("align-loops=")-1) == 0
|| strncmp(opt, "align-jumps=", sizeof("align-jumps=")-1) == 0
|| strncmp(opt, "align-functions=", sizeof("align-functions=")-1) == 0) {
- fprintf(stderr, "ignoring gcc option '-f %s'\n", opt);
+ fprintf(stderr, "ignoring gcc option '-f %s'\n", truth_value ? opt : opt - 3);
} else {
+ if (! truth_value)
+ opt -= 3;
int res = firm_option(opt);
if (res == 0) {
fprintf(stderr, "error: unknown Firm option '-f %s'\n",
help_displayed = true;
}
}
- } else if(option[0] == 'b') {
+ } else if (option[0] == 'b') {
const char *opt;
GET_ARG_AFTER(opt, "-b");
int res = firm_be_option(opt);
if (strncmp(opt, "isa=", 4) == 0)
strncpy(cpu_arch, opt, sizeof(cpu_arch));
}
- } else if(option[0] == 'W') {
- if(strncmp(option + 1, "l,", 2) == 0) // a gcc-style linker option
+ } else if (option[0] == 'W') {
+ if (strncmp(option + 1, "l,", 2) == 0) // a gcc-style linker option
{
const char *opt;
GET_ARG_AFTER(opt, "-Wl,");
char arch_opt[64];
GET_ARG_AFTER(opt, "-m");
- if(strncmp(opt, "arch=", 5) == 0) {
+ if (strncmp(opt, "arch=", 5) == 0) {
GET_ARG_AFTER(opt, "-march=");
snprintf(arch_opt, sizeof(arch_opt), "%s-arch=%s", cpu_arch, opt);
int res = firm_be_option(arch_opt);
} else if(strcmp(option, "pg") == 0) {
set_be_option("gprof");
add_flag(&ldflags_obst, "-pg");
- } else if(strcmp(option, "pedantic") == 0) {
+ } else if(strcmp(option, "pedantic") == 0
+ || strcmp(option, "ansi") == 0) {
fprintf(stderr, "warning: ignoring gcc option '%s'\n", arg);
} else if(strcmp(option, "shared") == 0) {
add_flag(&ldflags_obst, "-shared");
if (type == FILETYPE_AUTODETECT) {
size_t len = strlen(arg);
if (len < 2 && arg[0] == '-') {
- /* - implicitely means C source file */
+ /* - implicitly means C source file */
type = FILETYPE_C;
filename = NULL;
} else if (len > 2 && arg[len-2] == '.') {
if (in == preprocessed_in) {
int pp_result = pclose(preprocessed_in);
if (pp_result != EXIT_SUCCESS) {
- return pp_result;
+ exit(EXIT_FAILURE);
}
}