outform.h
上传用户:yuppie_zhu
上传日期:2007-01-08
资源大小:535k
文件大小:5k
源码类别:

编译器/解释器

开发平台:

C/C++

  1. /* outform.h header file for binding output format drivers to the
  2.  *              remainder of the code in the Netwide Assembler
  3.  *
  4.  * The Netwide Assembler is copyright (C) 1996 Simon Tatham and
  5.  * Julian Hall. All rights reserved. The software is
  6.  * redistributable under the licence given in the file "Licence"
  7.  * distributed in the NASM archive.
  8.  */
  9. /*
  10.  * This header file allows configuration of which output formats
  11.  * get compiled into the NASM binary. You can configure by defining
  12.  * various preprocessor symbols beginning with "OF_", either on the
  13.  * compiler command line or at the top of this file.
  14.  *
  15.  * OF_ONLY                -- only include specified object formats
  16.  * OF_name                -- ensure that output format 'name' is included
  17.  * OF_NO_name             -- remove output format 'name'
  18.  * OF_DOS                 -- ensure that 'obj', 'bin' & 'win32' are included.
  19.  * OF_UNIX                -- ensure that 'aout', 'aoutb', 'coff', 'elf' are in.
  20.  * OF_OTHERS              -- ensure that 'bin', 'as86' & 'rdf' are in.
  21.  * OF_ALL                 -- ensure that all formats are included.
  22.  *                           note that this doesn't include 'dbg', which is
  23.  *                           only really useful if you're doing development
  24.  *                           work on NASM. Define OF_DBG if you want this.
  25.  *
  26.  * OF_DEFAULT=of_name     -- ensure that 'name' is the default format.
  27.  *
  28.  * eg: -DOF_UNIX -DOF_ELF -DOF_DEFAULT=of_elf would be a suitable config
  29.  * for an average linux system.
  30.  *
  31.  * Default config = -DOF_ALL -DOF_DEFAULT=of_bin
  32.  *
  33.  * You probably only want to set these options while compiling 'nasm.c'. */
  34. #ifndef NASM_OUTFORM_H
  35. #define NASM_OUTFORM_H
  36. #include "nasm.h"
  37. /* -------------- USER MODIFIABLE PART ---------------- */
  38. /*
  39.  * Insert #defines here in accordance with the configuration
  40.  * instructions above.
  41.  *
  42.  * E.g.
  43.  *
  44.  * #define OF_ONLY
  45.  * #define OF_OBJ
  46.  * #define OF_BIN
  47.  *
  48.  * for a 16-bit DOS assembler with no extraneous formats.
  49.  */
  50. /* ------------ END USER MODIFIABLE PART -------------- */
  51. /* ====configurable info begins here==== */
  52. /* formats configurable:
  53.  * bin,obj,elf,aout,aoutb,coff,win32,as86,rdf,rdf2 */
  54. /* process options... */
  55. #ifndef OF_ONLY
  56. #ifndef OF_ALL
  57. #define OF_ALL      /* default is to have all formats */
  58. #endif
  59. #endif
  60. #ifdef OF_ALL      /* set all formats on... */
  61. #ifndef OF_BIN
  62. #define OF_BIN
  63. #endif
  64. #ifndef OF_OBJ
  65. #define OF_OBJ
  66. #endif
  67. #ifndef OF_ELF
  68. #define OF_ELF
  69. #endif
  70. #ifndef OF_COFF
  71. #define OF_COFF
  72. #endif
  73. #ifndef OF_AOUT
  74. #define OF_AOUT
  75. #endif
  76. #ifndef OF_AOUTB
  77. #define OF_AOUTB
  78. #endif
  79. #ifndef OF_WIN32
  80. #define OF_WIN32
  81. #endif
  82. #ifndef OF_AS86
  83. #define OF_AS86
  84. #endif
  85. #ifndef OF_RDF
  86. #define OF_RDF
  87. #endif
  88. #ifndef OF_RDF2
  89. #define OF_RDF2
  90. #endif
  91. #ifndef OF_IEEE
  92. #define OF_IEEE
  93. #endif
  94. #endif /* OF_ALL */
  95. /* turn on groups of formats specified.... */
  96. #ifdef OF_DOS
  97. #ifndef OF_OBJ
  98. #define OF_OBJ
  99. #endif
  100. #ifndef OF_BIN
  101. #define OF_BIN
  102. #endif
  103. #ifndef OF_WIN32
  104. #define OF_WIN32
  105. #endif
  106. #endif
  107. #ifdef OF_UNIX
  108. #ifndef OF_AOUT
  109. #define OF_AOUT
  110. #endif
  111. #ifndef OF_AOUTB
  112. #define OF_AOUTB
  113. #endif
  114. #ifndef OF_COFF
  115. #define OF_COFF
  116. #endif
  117. #ifndef OF_ELF
  118. #define OF_ELF
  119. #endif
  120. #endif
  121. #ifdef OF_OTHERS
  122. #ifndef OF_BIN
  123. #define OF_BIN
  124. #endif
  125. #ifndef OF_AS86
  126. #define OF_AS86
  127. #endif
  128. #ifndef OF_RDF
  129. #define OF_RDF
  130. #endif
  131. #ifndef OF_RDF2
  132. #define OF_RDF2
  133. #endif
  134. #ifndef OF_IEEE
  135. #define OF_IEEE
  136. #endif
  137. #endif
  138. /* finally... override any format specifically specifed to be off */
  139. #ifdef OF_NO_BIN
  140. #undef OF_BIN
  141. #endif
  142. #ifdef OF_NO_OBJ
  143. #undef OF_OBJ
  144. #endif
  145. #ifdef OF_NO_ELF
  146. #undef OF_ELF
  147. #endif
  148. #ifdef OF_NO_AOUT
  149. #undef OF_AOUT
  150. #endif
  151. #ifdef OF_NO_AOUTB
  152. #undef OF_AOUTB
  153. #endif
  154. #ifdef OF_NO_COFF
  155. #undef OF_COFF
  156. #endif
  157. #ifdef OF_NO_WIN32
  158. #undef OF_WIN32
  159. #endif
  160. #ifdef OF_NO_AS86
  161. #undef OF_AS86
  162. #endif
  163. #ifdef OF_NO_RDF
  164. #undef OF_RDF
  165. #endif
  166. #ifdef OF_NO_RDF2
  167. #undef OF_RDF
  168. #endif
  169. #ifdef OF_NO_IEEE
  170. #undef OF_IEEE
  171. #endif
  172. #ifndef OF_DEFAULT
  173. #define OF_DEFAULT of_bin
  174. #endif
  175. #ifdef BUILD_DRIVERS_ARRAY        /* only if included from outform.c */
  176. /* pull in the externs for the different formats, then make the *drivers
  177.  * array based on the above defines */
  178. extern struct ofmt of_bin;
  179. extern struct ofmt of_aout;
  180. extern struct ofmt of_aoutb;
  181. extern struct ofmt of_coff;
  182. extern struct ofmt of_elf;
  183. extern struct ofmt of_as86;
  184. extern struct ofmt of_obj;
  185. extern struct ofmt of_win32;
  186. extern struct ofmt of_rdf;
  187. extern struct ofmt of_rdf2;
  188. extern struct ofmt of_ieee;
  189. extern struct ofmt of_dbg;
  190. struct ofmt *drivers[]={
  191. #ifdef OF_BIN
  192.     &of_bin,
  193. #endif
  194. #ifdef OF_AOUT
  195.     &of_aout,
  196. #endif
  197. #ifdef OF_AOUTB
  198.     &of_aoutb,
  199. #endif
  200. #ifdef OF_COFF
  201.     &of_coff,
  202. #endif
  203. #ifdef OF_ELF
  204.     &of_elf,
  205. #endif
  206. #ifdef OF_AS86
  207.     &of_as86,
  208. #endif
  209. #ifdef OF_OBJ
  210.     &of_obj,
  211. #endif
  212. #ifdef OF_WIN32
  213.     &of_win32,
  214. #endif
  215. #ifdef OF_RDF
  216.     &of_rdf,
  217. #endif
  218. #ifdef OF_RDF2
  219.     &of_rdf2,
  220. #endif
  221. #ifdef OF_IEEE
  222.     &of_ieee,
  223. #endif
  224. #ifdef OF_DBG
  225.     &of_dbg,
  226. #endif
  227.    NULL
  228. };
  229. #endif  /* BUILD_DRIVERS_ARRAY */
  230. struct ofmt *ofmt_find(char *);
  231. struct dfmt *dfmt_find(struct ofmt *, char *);
  232. void ofmt_list(struct ofmt *, FILE *);
  233. void dfmt_list(struct ofmt *ofmt, FILE *fp);
  234. struct ofmt *ofmt_register (efunc error);
  235. #endif  /* NASM_OUTFORM_H */