Move prototypes for null_debug to outform.h and outlib.h
[nasm.git] / output / outform.h
blobd7fff114a6f75d91f7dc671763c0c9dbecfae255
1 /* output/outform.h header file for binding output format drivers to the
2 * remainder of the code in the Netwide Assembler
4 * The Netwide Assembler is copyright (C) 1996 Simon Tatham and
5 * Julian Hall. All rights reserved. The software is
6 * redistributable under the license given in the file "LICENSE"
7 * distributed in the NASM archive.
8 */
11 * This header file allows configuration of which output formats
12 * get compiled into the NASM binary. You can configure by defining
13 * various preprocessor symbols beginning with "OF_", either on the
14 * compiler command line or at the top of this file.
16 * OF_ONLY -- only include specified object formats
17 * OF_name -- ensure that output format 'name' is included
18 * OF_NO_name -- remove output format 'name'
19 * OF_DOS -- ensure that 'obj', 'bin' & 'win32' are included.
20 * OF_UNIX -- ensure that 'aout', 'aoutb', 'coff', 'elf32' 'elf64' are in.
21 * OF_OTHERS -- ensure that 'bin', 'as86' & 'rdf' are in.
22 * OF_ALL -- ensure that all formats are included.
23 * note that this doesn't include 'dbg', which is
24 * only really useful if you're doing development
25 * work on NASM. Define OF_DBG if you want this.
27 * OF_DEFAULT=of_name -- ensure that 'name' is the default format.
29 * eg: -DOF_UNIX -DOF_ELF32 -DOF_DEFAULT=of_elf32 would be a suitable config
30 * for an average linux system.
32 * Default config = -DOF_ALL -DOF_DEFAULT=of_bin
34 * You probably only want to set these options while compiling 'nasm.c'. */
36 #ifndef NASM_OUTFORM_H
37 #define NASM_OUTFORM_H
39 #include "nasm.h"
41 /* -------------- USER MODIFIABLE PART ---------------- */
44 * Insert #defines here in accordance with the configuration
45 * instructions above.
47 * E.g.
49 * #define OF_ONLY
50 * #define OF_OBJ
51 * #define OF_BIN
53 * for a 16-bit DOS assembler with no extraneous formats.
56 /* ------------ END USER MODIFIABLE PART -------------- */
58 /* ====configurable info begins here==== */
59 /* formats configurable:
60 * bin,obj,elf32,elf64,aout,aoutb,coff,win32,as86,rdf2,macho */
62 /* process options... */
64 #ifndef OF_ONLY
65 #ifndef OF_ALL
66 #define OF_ALL /* default is to have all formats */
67 #endif
68 #endif
70 #ifdef OF_ALL /* set all formats on... */
71 #ifndef OF_BIN
72 #define OF_BIN
73 #endif
74 #ifndef OF_OBJ
75 #define OF_OBJ
76 #endif
77 #ifndef OF_ELF32
78 #define OF_ELF32
79 #endif
80 #ifndef OF_ELF64
81 #define OF_ELF64
82 #endif
83 #ifndef OF_COFF
84 #define OF_COFF
85 #endif
86 #ifndef OF_AOUT
87 #define OF_AOUT
88 #endif
89 #ifndef OF_AOUTB
90 #define OF_AOUTB
91 #endif
92 #ifndef OF_WIN32
93 #define OF_WIN32
94 #endif
95 #ifndef OF_WIN64
96 #define OF_WIN64
97 #endif
98 #ifndef OF_AS86
99 #define OF_AS86
100 #endif
101 #ifndef OF_RDF2
102 #define OF_RDF2
103 #endif
104 #ifndef OF_IEEE
105 #define OF_IEEE
106 #endif
107 #ifndef OF_MACHO
108 #define OF_MACHO
109 #endif
110 #ifndef OF_DBG
111 #define OF_DBG
112 #endif
113 #endif /* OF_ALL */
115 /* turn on groups of formats specified.... */
116 #ifdef OF_DOS
117 #ifndef OF_OBJ
118 #define OF_OBJ
119 #endif
120 #ifndef OF_BIN
121 #define OF_BIN
122 #endif
123 #ifndef OF_COFF
124 #define OF_COFF /* COFF is used by DJGPP */
125 #endif
126 #ifndef OF_WIN32
127 #define OF_WIN32
128 #endif
129 #ifndef OF_WIN64
130 #define OF_WIN64
131 #endif
132 #endif
134 #ifdef OF_UNIX
135 #ifndef OF_AOUT
136 #define OF_AOUT
137 #endif
138 #ifndef OF_AOUTB
139 #define OF_AOUTB
140 #endif
141 #ifndef OF_COFF
142 #define OF_COFF
143 #endif
144 #ifndef OF_ELF32
145 #define OF_ELF32
146 #endif
147 #ifndef OF_ELF64
148 #define OF_ELF64
149 #endif
150 #endif
152 #ifdef OF_OTHERS
153 #ifndef OF_BIN
154 #define OF_BIN
155 #endif
156 #ifndef OF_AS86
157 #define OF_AS86
158 #endif
159 #ifndef OF_RDF2
160 #define OF_RDF2
161 #endif
162 #ifndef OF_IEEE
163 #define OF_IEEE
164 #endif
165 #ifndef OF_MACHO
166 #define OF_MACHO
167 #endif
168 #endif
170 /* finally... override any format specifically specified to be off */
171 #ifdef OF_NO_BIN
172 #undef OF_BIN
173 #endif
174 #ifdef OF_NO_OBJ
175 #undef OF_OBJ
176 #endif
177 #ifdef OF_NO_ELF32
178 #undef OF_ELF32
179 #endif
180 #ifdef OF_NO_ELF64
181 #undef OF_ELF64
182 #endif
183 #ifdef OF_NO_AOUT
184 #undef OF_AOUT
185 #endif
186 #ifdef OF_NO_AOUTB
187 #undef OF_AOUTB
188 #endif
189 #ifdef OF_NO_COFF
190 #undef OF_COFF
191 #endif
192 #ifdef OF_NO_WIN32
193 #undef OF_WIN32
194 #endif
195 #ifdef OF_NO_WIN64
196 #undef OF_WIN64
197 #endif
198 #ifdef OF_NO_AS86
199 #undef OF_AS86
200 #endif
201 #ifdef OF_NO_RDF2
202 #undef OF_RDF
203 #endif
204 #ifdef OF_NO_IEEE
205 #undef OF_IEEE
206 #endif
207 #ifdef OF_NO_MACHO
208 #undef OF_MACHO
209 #endif
210 #ifdef OF_NO_DBG
211 #undef OF_DBG
212 #endif
214 #ifndef OF_DEFAULT
215 #define OF_DEFAULT of_bin
216 #endif
218 #ifdef BUILD_DRIVERS_ARRAY /* only if included from outform.c */
220 /* pull in the externs for the different formats, then make the *drivers
221 * array based on the above defines */
223 extern struct ofmt of_bin;
224 extern struct ofmt of_aout;
225 extern struct ofmt of_aoutb;
226 extern struct ofmt of_coff;
227 extern struct ofmt of_elf32;
228 extern struct ofmt of_elf;
229 extern struct ofmt of_elf64;
230 extern struct ofmt of_as86;
231 extern struct ofmt of_obj;
232 extern struct ofmt of_win32;
233 extern struct ofmt of_win64;
234 extern struct ofmt of_rdf2;
235 extern struct ofmt of_ieee;
236 extern struct ofmt of_macho;
237 extern struct ofmt of_dbg;
239 struct ofmt *drivers[] = {
240 #ifdef OF_BIN
241 &of_bin,
242 #endif
243 #ifdef OF_AOUT
244 &of_aout,
245 #endif
246 #ifdef OF_AOUTB
247 &of_aoutb,
248 #endif
249 #ifdef OF_COFF
250 &of_coff,
251 #endif
252 #ifdef OF_ELF32
253 &of_elf32,
254 &of_elf,
255 #endif
256 #ifdef OF_ELF64
257 &of_elf64,
258 #endif
259 #ifdef OF_AS86
260 &of_as86,
261 #endif
262 #ifdef OF_OBJ
263 &of_obj,
264 #endif
265 #ifdef OF_WIN32
266 &of_win32,
267 #endif
268 #ifdef OF_WIN64
269 &of_win64,
270 #endif
271 #ifdef OF_RDF2
272 &of_rdf2,
273 #endif
274 #ifdef OF_IEEE
275 &of_ieee,
276 #endif
277 #ifdef OF_MACHO
278 &of_macho,
279 #endif
280 #ifdef OF_DBG
281 &of_dbg,
282 #endif
284 NULL
287 #endif /* BUILD_DRIVERS_ARRAY */
289 struct ofmt *ofmt_find(char *);
290 struct dfmt *dfmt_find(struct ofmt *, char *);
291 void ofmt_list(struct ofmt *, FILE *);
292 void dfmt_list(struct ofmt *ofmt, FILE * fp);
293 struct ofmt *ofmt_register(efunc error);
294 extern struct dfmt null_debug_form;
296 #endif /* NASM_OUTFORM_H */