/* Id */ /* $NetBSD: prog_cpp.c,v 1.1.1.1 2016/02/09 20:29:13 plunky Exp $ */ /*- * Copyright (c) 2014 Iain Hibbert. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "driver.h" static void JUNK(void) { // __LITTLE_ENDIAN__ // __BIG_ENDIAN__ /* Machine specific macros */ switch (targmach) { case mach_amd64: list_add(l, "-D__amd64__"); list_add(l, "-D__amd64"); list_add(l, "-D__x86_64__"); list_add(l, "-D__x86_64"); list_add(l, "-D__LP64__"); list_add(l, "-D_LP64"); break; case mach_arm: list_add(l, "-D__arm__"); break; case mach_i386: list_add(l, "-D__i386__"); list_add(l, "-D__i386"); break; case mach_nova: list_add(l, "-D__nova__"); break; case mach_m16c: list_add(l, "-D__m16c__"); break; case mach_mips: list_add(l, "-D__mips__"); break; case mach_pdp10: list_add(l, "-D__pdp10__"); break; case mach_pdp11: list_add(l, "-D__pdp11__"); break; case mach_powerpc: list_add(l, "-D__powerpc__"); list_add(l, "-D__ppc__"); break; case mach_sparc: list_add(l, "-D__sparc__"); list_add(l, "-D__sparc"); break; case mach_sparc64: list_add(l, "-D__sparc64__"); list_add(l, "-D__sparc_v9__"); list_add(l, "-D__sparcv9"); list_add(l, "-D__sparc__"); list_add(l, "-D__sparc"); list_add(l, "-D__LP64__"); list_add(l, "-D_LP64"); break; case mach_vax: list_add(l, "-D__vax__"); break; } } static void cpp_add_stddef(struct list *l) { /* STDC */ list_add(l, "-D__STDC__=1"); list_add(l, "-D__STDC_HOSTED__=%d", opt.hosted ? 1 : 0); list_add(l, "-D__STDC_VERSION_=199901L"); list_add(l, "-D__STDC_ISO_10646__=200009L"); /* PCC specific */ list_add(l, "-D__PCC__=%d", PCC_MAJOR); list_add(l, "-D__PCC_MINOR__=%d", PCC_MINOR); list_add(l, "-D__PCC_MINORMINOR__=%d", PCC_MINORMINOR); list_add(l, "-D__VERSION__=\"%s\"", VERSSTR); /* GNU C compat */ if (opt.gnu89 || opt.gnu99) { list_add(l, "-D__GNUC__=4"); list_add(l, "-D__GNUC_MINOR__=3"); list_add(l, "-D__GNUC_PATCHLEVEL__=1"); list_add(l, "-D__GNUC_%s_INLINE__", opt.gnu89 ? "GNU" : "STDC"); } /* language specific */ if (strcmp(infile->next, "I") list_add(l, "-D__cplusplus"); if (strcmp(infile->next, "f") list_add(l, "-D__FORTRAN__"); if (strcmp(infile->next, "s") list_add(l, "-D__ASSEMBLER__"); /* runtime options */ if (opt.optim > 0) list_add(l, "-D__OPTIMIZE__"); if (opt.ssp > 0) list_add(l, "-D__SSP__"); if (opt.pthread) list_add(l, "-D_PTHREADS"); if (opt.uchar) list_add(l, "-D__CHAR_UNSIGNED__"); /* target specific definitions */ list_add_array(l, target_defs); } static int cpp_exec(const char *infile, const char *outfile) { list_t *l; const char *file; int rv; if (prog_cpp == NULL) error("No preprocessor is defined"); l = list_alloc(); list_add_file(l, prog_cpp, &progdirs, X_OK); for (int i = 0; i < opt.C; i++) list_add(l, "-C"); if (opt.M) list_add(l, "-M"); if (opt.P) list_add(l, "-P"); if (opt.traditional) list_add(l, "-t"); if (opt.verbose) list_add(l, "-v"); Wflag_add(l, W_CPP); if (opt.stddefs) cpp_add_stddef(l); list_add_list(l, opt.DIU); list_add_list(l, opt.Wp); if (infile != NULL) list_add(l, infile); else if (outfile != NULL) list_add(l, "-"); if (outfile != NULL) list_add(l, outfile); rv = list_exec(l); list_free(l); return rv; } .