xref: /netbsd-src/external/bsd/pcc/dist/pcc/driver/prog_cpp.c (revision 411dcbec990c8aa9c57d3bd2f4bcacadec0b1ab5)
1*411dcbecSplunky /*	Id	*/
2*411dcbecSplunky /*	$NetBSD: prog_cpp.c,v 1.1.1.1 2016/02/09 20:29:13 plunky Exp $	*/
3*411dcbecSplunky 
4*411dcbecSplunky /*-
5*411dcbecSplunky  * Copyright (c) 2014 Iain Hibbert.
6*411dcbecSplunky  *
7*411dcbecSplunky  * Permission is hereby granted, free of charge, to any person obtaining a copy
8*411dcbecSplunky  * of this software and associated documentation files (the "Software"), to deal
9*411dcbecSplunky  * in the Software without restriction, including without limitation the rights
10*411dcbecSplunky  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11*411dcbecSplunky  * copies of the Software, and to permit persons to whom the Software is
12*411dcbecSplunky  * furnished to do so, subject to the following conditions:
13*411dcbecSplunky  *
14*411dcbecSplunky  * The above copyright notice and this permission notice shall be included in
15*411dcbecSplunky  * all copies or substantial portions of the Software.
16*411dcbecSplunky  *
17*411dcbecSplunky  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18*411dcbecSplunky  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19*411dcbecSplunky  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20*411dcbecSplunky  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21*411dcbecSplunky  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22*411dcbecSplunky  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23*411dcbecSplunky  * THE SOFTWARE.
24*411dcbecSplunky  */
25*411dcbecSplunky 
26*411dcbecSplunky #include "driver.h"
27*411dcbecSplunky 
JUNK(void)28*411dcbecSplunky static void JUNK(void)
29*411dcbecSplunky {
30*411dcbecSplunky 	// __LITTLE_ENDIAN__
31*411dcbecSplunky 	// __BIG_ENDIAN__
32*411dcbecSplunky 
33*411dcbecSplunky 	/* Machine specific macros */
34*411dcbecSplunky 	switch (targmach) {
35*411dcbecSplunky 	case mach_amd64:
36*411dcbecSplunky 		list_add(l, "-D__amd64__");
37*411dcbecSplunky 		list_add(l, "-D__amd64");
38*411dcbecSplunky 		list_add(l, "-D__x86_64__");
39*411dcbecSplunky 		list_add(l, "-D__x86_64");
40*411dcbecSplunky 		list_add(l, "-D__LP64__");
41*411dcbecSplunky 		list_add(l, "-D_LP64");
42*411dcbecSplunky 		break;
43*411dcbecSplunky 
44*411dcbecSplunky 	case mach_arm:
45*411dcbecSplunky 		list_add(l, "-D__arm__");
46*411dcbecSplunky 		break;
47*411dcbecSplunky 
48*411dcbecSplunky 	case mach_i386:
49*411dcbecSplunky 		list_add(l, "-D__i386__");
50*411dcbecSplunky 		list_add(l, "-D__i386");
51*411dcbecSplunky 		break;
52*411dcbecSplunky 
53*411dcbecSplunky 	case mach_nova:
54*411dcbecSplunky 		list_add(l, "-D__nova__");
55*411dcbecSplunky 		break;
56*411dcbecSplunky 
57*411dcbecSplunky 	case mach_m16c:
58*411dcbecSplunky 		list_add(l, "-D__m16c__");
59*411dcbecSplunky 		break;
60*411dcbecSplunky 
61*411dcbecSplunky 	case mach_mips:
62*411dcbecSplunky 		list_add(l, "-D__mips__");
63*411dcbecSplunky 		break;
64*411dcbecSplunky 
65*411dcbecSplunky 	case mach_pdp10:
66*411dcbecSplunky 		list_add(l, "-D__pdp10__");
67*411dcbecSplunky 		break;
68*411dcbecSplunky 
69*411dcbecSplunky 	case mach_pdp11:
70*411dcbecSplunky 		list_add(l, "-D__pdp11__");
71*411dcbecSplunky 		break;
72*411dcbecSplunky 
73*411dcbecSplunky 	case mach_powerpc:
74*411dcbecSplunky 		list_add(l, "-D__powerpc__");
75*411dcbecSplunky 		list_add(l, "-D__ppc__");
76*411dcbecSplunky 		break;
77*411dcbecSplunky 
78*411dcbecSplunky 	case mach_sparc:
79*411dcbecSplunky 		list_add(l, "-D__sparc__");
80*411dcbecSplunky 		list_add(l, "-D__sparc");
81*411dcbecSplunky 		break;
82*411dcbecSplunky 
83*411dcbecSplunky 	case mach_sparc64:
84*411dcbecSplunky 		list_add(l, "-D__sparc64__");
85*411dcbecSplunky 		list_add(l, "-D__sparc_v9__");
86*411dcbecSplunky 		list_add(l, "-D__sparcv9");
87*411dcbecSplunky 		list_add(l, "-D__sparc__");
88*411dcbecSplunky 		list_add(l, "-D__sparc");
89*411dcbecSplunky 		list_add(l, "-D__LP64__");
90*411dcbecSplunky 		list_add(l, "-D_LP64");
91*411dcbecSplunky 		break;
92*411dcbecSplunky 
93*411dcbecSplunky 	case mach_vax:
94*411dcbecSplunky 		list_add(l, "-D__vax__");
95*411dcbecSplunky 		break;
96*411dcbecSplunky 	}
97*411dcbecSplunky }
98*411dcbecSplunky 
99*411dcbecSplunky static void
cpp_add_stddef(struct list * l)100*411dcbecSplunky cpp_add_stddef(struct list *l)
101*411dcbecSplunky {
102*411dcbecSplunky 
103*411dcbecSplunky 	/* STDC */
104*411dcbecSplunky 	list_add(l, "-D__STDC__=1");
105*411dcbecSplunky 	list_add(l, "-D__STDC_HOSTED__=%d", opt.hosted ? 1 : 0);
106*411dcbecSplunky 	list_add(l, "-D__STDC_VERSION_=199901L");
107*411dcbecSplunky 	list_add(l, "-D__STDC_ISO_10646__=200009L");
108*411dcbecSplunky 
109*411dcbecSplunky 	/* PCC specific */
110*411dcbecSplunky 	list_add(l, "-D__PCC__=%d", PCC_MAJOR);
111*411dcbecSplunky 	list_add(l, "-D__PCC_MINOR__=%d", PCC_MINOR);
112*411dcbecSplunky 	list_add(l, "-D__PCC_MINORMINOR__=%d", PCC_MINORMINOR);
113*411dcbecSplunky 	list_add(l, "-D__VERSION__=\"%s\"", VERSSTR);
114*411dcbecSplunky 
115*411dcbecSplunky 	/* GNU C compat */
116*411dcbecSplunky 	if (opt.gnu89 || opt.gnu99) {
117*411dcbecSplunky 		list_add(l, "-D__GNUC__=4");
118*411dcbecSplunky 		list_add(l, "-D__GNUC_MINOR__=3");
119*411dcbecSplunky 		list_add(l, "-D__GNUC_PATCHLEVEL__=1");
120*411dcbecSplunky 		list_add(l, "-D__GNUC_%s_INLINE__", opt.gnu89 ? "GNU" : "STDC");
121*411dcbecSplunky 	}
122*411dcbecSplunky 
123*411dcbecSplunky 	/* language specific */
124*411dcbecSplunky 	if (strcmp(infile->next, "I")
125*411dcbecSplunky 		list_add(l, "-D__cplusplus");
126*411dcbecSplunky 	if (strcmp(infile->next, "f")
127*411dcbecSplunky 		list_add(l, "-D__FORTRAN__");
128*411dcbecSplunky 	if (strcmp(infile->next, "s")
129*411dcbecSplunky 		list_add(l, "-D__ASSEMBLER__");
130*411dcbecSplunky 
131*411dcbecSplunky 	/* runtime options */
132*411dcbecSplunky 	if (opt.optim > 0)
133*411dcbecSplunky 		list_add(l, "-D__OPTIMIZE__");
134*411dcbecSplunky 	if (opt.ssp > 0)
135*411dcbecSplunky 		list_add(l, "-D__SSP__");
136*411dcbecSplunky 	if (opt.pthread)
137*411dcbecSplunky 		list_add(l, "-D_PTHREADS");
138*411dcbecSplunky 	if (opt.uchar)
139*411dcbecSplunky 		list_add(l, "-D__CHAR_UNSIGNED__");
140*411dcbecSplunky 
141*411dcbecSplunky 	/* target specific definitions */
142*411dcbecSplunky 	list_add_array(l, target_defs);
143*411dcbecSplunky }
144*411dcbecSplunky 
145*411dcbecSplunky static int
146*411dcbecSplunky cpp_exec(const char *infile, const char *outfile)
147*411dcbecSplunky {
148*411dcbecSplunky 	list_t *l;
149*411dcbecSplunky 	const char *file;
150*411dcbecSplunky 	int rv;
151*411dcbecSplunky 
152*411dcbecSplunky 	if (prog_cpp == NULL)
153*411dcbecSplunky 		error("No preprocessor is defined");
154*411dcbecSplunky 
155*411dcbecSplunky 	l = list_alloc();
156*411dcbecSplunky 
157*411dcbecSplunky 	list_add_file(l, prog_cpp, &progdirs, X_OK);
158*411dcbecSplunky 
159*411dcbecSplunky 	for (int i = 0; i < opt.C; i++)
160*411dcbecSplunky 		list_add(l, "-C");
161*411dcbecSplunky 	if (opt.M)
162*411dcbecSplunky 		list_add(l, "-M");
163*411dcbecSplunky 	if (opt.P)
164*411dcbecSplunky 		list_add(l, "-P");
165*411dcbecSplunky 	if (opt.traditional)
166*411dcbecSplunky 		list_add(l, "-t");
167*411dcbecSplunky 	if (opt.verbose)
168*411dcbecSplunky 		list_add(l, "-v");
169*411dcbecSplunky 
170*411dcbecSplunky 	Wflag_add(l, W_CPP);
171*411dcbecSplunky 
172*411dcbecSplunky 	if (opt.stddefs)
173*411dcbecSplunky 		cpp_add_stddef(l);
174*411dcbecSplunky 
175*411dcbecSplunky 	list_add_list(l, opt.DIU);
176*411dcbecSplunky 
177*411dcbecSplunky 	list_add_list(l, opt.Wp);
178*411dcbecSplunky 
179*411dcbecSplunky 	if (infile != NULL)
180*411dcbecSplunky 		list_add(l, infile);
181*411dcbecSplunky 	else if (outfile != NULL)
182*411dcbecSplunky 		list_add(l, "-");
183*411dcbecSplunky 
184*411dcbecSplunky 	if (outfile != NULL)
185*411dcbecSplunky 		list_add(l, outfile);
186*411dcbecSplunky 
187*411dcbecSplunky 	rv = list_exec(l);
188*411dcbecSplunky 	list_free(l);
189*411dcbecSplunky 	return rv;
190*411dcbecSplunky }
191