1 /*---------------------------------------------------------------------------* 2 Project: NitroSDK - tools - makelcf 3 File: makelcf.h 4 5 Copyright 2003-2008 Nintendo. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Log: makelcf.h,v $ 14 Revision 1.28 2007/07/09 12:17:54 yasu 15 Support for TARGET_NAME. 16 17 Revision 1.27 2007/04/10 14:13:20 yasu 18 Support for multiple uses of SEARCH_SYMBOL 19 20 Revision 1.26 2007/02/20 00:28:10 kitase_hirotake 21 indent source 22 23 Revision 1.25 2007/01/19 04:35:14 yosizaki 24 Updated copyright. 25 26 Revision 1.24 2007/01/15 04:58:20 yosizaki 27 Increased DEFAULT_IRQSTACKSIZE to 0x800. 28 29 Revision 1.23 2006/05/10 02:06:00 yasu 30 Added support for CodeWarrior 2.x 31 32 Revision 1.22 2006/04/06 09:05:42 kitase_hirotake 33 Support for .itcm.bss .dtcm.bss .wram.bss 34 35 Revision 1.21 2006/03/29 13:13:22 yasu 36 IF-ELSE-ENDIF support 37 38 Revision 1.20 2006/01/18 02:11:19 kitase_hirotake 39 do-indent 40 41 Revision 1.19 2005/09/01 04:30:52 yasu 42 Support for Overlay Group 43 44 Revision 1.18 2005/08/26 11:23:11 yasu 45 Overlay support for ITCM/DTCM 46 47 Revision 1.17 2005/06/20 12:21:48 yasu 48 Changed Surffix to Suffix 49 50 Revision 1.16 2005/02/28 05:26:03 yosizaki 51 do-indent. 52 53 Revision 1.15 2004/07/10 04:06:17 yasu 54 Added support for command 'Library' 55 Support for modifier ':x' in template 56 Fixed line continue '\' issue 57 58 Revision 1.14 2004/07/08 02:58:53 yasu 59 Support section name for multi-objects as 'Objects' parameters 60 61 Revision 1.13 2004/07/02 07:34:53 yasu 62 Added support for OBJECT( ) 63 64 Revision 1.12 2004/06/24 07:18:54 yasu 65 Support for keyword "Autoload" 66 67 Revision 1.11 2004/06/14 11:28:45 yasu 68 Support for section filter "FOREACH.STATIC.OBJECTS=.sectionName" 69 70 Revision 1.10 2004/03/26 05:07:11 yasu 71 Support for variables like as -DNAME=VALUE 72 73 Revision 1.9 2004/02/20 03:38:03 yasu 74 Changed default IRQ stack size from 0xa0 to 0x400 75 76 Revision 1.8 2004/02/13 07:13:03 yasu 77 Support for SDK_IRQ_STACKSIZE 78 79 Revision 1.7 2004/02/05 07:09:03 yasu 80 Changed SDK prefix iris to nitro 81 82 Revision 1.6 2004/01/15 10:49:47 yasu 83 Implementation of a static StackSize 84 85 Revision 1.5 2004/01/15 06:52:55 yasu 86 Changed default suffix 87 88 Revision 1.4 2004/01/14 12:38:08 yasu 89 Changed OverlayName to OverlayDefs 90 91 Revision 1.3 2004/01/14 01:54:01 yasu 92 Changed default filenames of overlay table/namefile 93 94 Revision 1.2 2004/01/07 13:10:17 yasu 95 Fixed all warnings at compile -Wall 96 97 Revision 1.1 2004/01/05 02:32:59 yasu 98 Initial version 99 100 $NoKeywords: $ 101 *---------------------------------------------------------------------------*/ 102 #ifndef MAKELCF_H_ 103 #define MAKELCF_H_ 104 105 #include "misc.h" 106 107 /*============================================================================ 108 * CONTAINER 109 */ 110 typedef struct tAfterList 111 { 112 struct tAfter *head; 113 struct tAfter *tail; 114 } 115 tAfterList; 116 117 typedef struct tAfter 118 { 119 struct tAfter *next; 120 const char *name; 121 } 122 tAfter; 123 124 typedef struct tObjectList 125 { 126 struct tObject *head; 127 struct tObject *tail; 128 } 129 tObjectList; 130 131 typedef enum 132 { 133 OBJTYPE_NONE, 134 OBJTYPE_FILE, // Regular file 135 OBJTYPE_STAR, // "*" 136 OBJTYPE_GROUP, // GROUP(xxxx) 137 OBJTYPE_OBJECT // OBJECT(yyy,zzz) 138 } 139 tObjectType; 140 141 #define isNeedSection(obj) ((obj)->objectType != OBJTYPE_OBJECT) 142 143 typedef struct tObject 144 { 145 struct tObject *next; 146 const char *objectName; 147 const char *sectionName; 148 tObjectType objectType; 149 } 150 tObject; 151 152 typedef struct tOverlayList 153 { 154 struct tOverlay *head; 155 struct tOverlay *tail; 156 u32 num; 157 } 158 tOverlayList; 159 160 typedef enum 161 { 162 MEMTYPE_NONE = 0, 163 MEMTYPE_MAIN, 164 MEMTYPE_MAINEX, 165 MEMTYPE_ITCM, 166 MEMTYPE_DTCM, 167 MEMTYPE_ITCM_BSS, 168 MEMTYPE_DTCM_BSS, 169 MEMTYPE_SHARED, 170 MEMTYPE_WRAM, 171 MEMTYPE_WRAM_BSS, 172 MEMTYPE_VRAM, 173 MEMTYPE_DUMMY, 174 } 175 tMemType; 176 177 typedef struct tOverlay 178 { 179 struct tOverlay *next; 180 u32 id; 181 const char *name; 182 const char *group; 183 u32 address; 184 struct tAfterList afters; 185 struct tObjectList objects; 186 struct tObjectList libraries; 187 struct tObjectList searchSymbols; 188 tMemType memtype; 189 190 } 191 tOverlay; 192 193 typedef struct tStatic 194 { 195 const char *name; 196 u32 address; 197 struct tObjectList objects; 198 struct tObjectList libraries; 199 struct tObjectList searchSymbols; 200 u32 stacksize; 201 u32 stacksize_irq; 202 tMemType memtype; 203 const char *targetName; 204 } 205 tStatic; 206 207 typedef struct 208 { 209 const char *overlaydefs; 210 const char *overlaytable; 211 const char *suffix; 212 213 } 214 tProperty; 215 216 typedef struct 217 { 218 int count; 219 BOOL isFirst; 220 BOOL isLast; 221 } 222 tForeachStatus; 223 224 typedef struct 225 { 226 tForeachStatus static_object; 227 tForeachStatus static_library; 228 tForeachStatus static_searchsymbol; 229 tForeachStatus autoload; 230 tForeachStatus autoload_object; 231 tForeachStatus autoload_library; 232 tForeachStatus autoload_searchsymbol; 233 tForeachStatus overlay; 234 tForeachStatus overlay_object; 235 tForeachStatus overlay_library; 236 tForeachStatus overlay_searchsymbol; 237 } 238 tForeach; 239 240 BOOL AddOverlay(const char *overlayName); 241 BOOL AddAutoload(const char *overlayName); 242 BOOL OverlaySetId(u32 id); 243 BOOL OverlaySetGroup(const char *overlayGroup); 244 BOOL OverlaySetAddress(u32 address); 245 BOOL OverlayAddAfter(const char *overlayName); 246 BOOL OverlayAddObject(const char *objectName, tObjectType objectType); 247 BOOL OverlaySetObjectSection(const char *sectionName); 248 BOOL OverlayAddLibrary(const char *objectName, tObjectType objectType); 249 BOOL OverlaySetLibrarySection(const char *sectionName); 250 BOOL OverlayAddSearchSymbol(const char *searchName); 251 252 BOOL StaticSetTargetName(const char *targetName); 253 BOOL StaticSetName(const char *fileName); 254 BOOL StaticSetAddress(u32 address); 255 BOOL StaticAddObject(const char *objectName, tObjectType objectType); 256 BOOL StaticSetObjectSection(const char *sectionName); 257 BOOL StaticAddLibrary(const char *objectName, tObjectType objectType); 258 BOOL StaticSetLibrarySection(const char *sectionName); 259 BOOL StaticAddSearchSymbol(const char *searchName); 260 BOOL StaticSetStackSize(u32 stacksize); 261 BOOL StaticSetStackSizeIrq(u32 stacksize); 262 BOOL PropertySetOverlayDefs(const char *filename); 263 BOOL PropertySetOverlayTable(const char *filename); 264 BOOL PropertySetSuffix(const char *suffix); 265 266 BOOL CheckSpec(void); 267 void DumpSpec(void); 268 BOOL isSame(const char *s1, const char *s2); 269 270 int ParseSpecFile(const char *filename); 271 272 extern tStatic Static; 273 extern tProperty Property; 274 extern tForeach Foreach; 275 extern tOverlayList OverlayList; 276 extern tOverlayList AutoloadList; 277 278 #define DEFAULT_OVERLAYDEFS "%_defs" 279 #define DEFAULT_OVERLAYTABLE "%_table" 280 #define DEFAULT_SUFFIX ".sbin" 281 /* NITRO-SDK4.0RC: increased 0x400->0x800 */ 282 #define DEFAULT_IRQSTACKSIZE 0x800 283 284 int spec_yyparse(void); 285 int spec_yylex(void); 286 void spec_yyerror(const char *str); 287 288 289 /*============================================================================ 290 * TOKEN BUFFER 291 */ 292 typedef struct tTokenBuffer 293 { 294 int id; 295 const char *string; 296 int loop_end; 297 } 298 tTokenBuffer; 299 300 typedef struct tLoopStack 301 { 302 int id; 303 int start; 304 } 305 tLoopStack; 306 307 #define TOKEN_LEN 65536 308 #define LOOP_STACK_MAX 32 309 310 int ParseTlcfFile(const char *filename); 311 int CreateLcfFile(const char *filename); 312 313 extern tTokenBuffer tokenBuffer[TOKEN_LEN]; 314 extern int tokenBufferEnd; 315 316 int tlcf_yyparse(void); 317 int tlcf_yylex(void); 318 void tlcf_yyerror(const char *str); 319 void lcf_error(const char *fmt, ...); 320 321 extern BOOL DebugMode; 322 void debug_printf(const char *str, ...); 323 324 typedef struct 325 { 326 char *string; 327 tObjectType type; 328 } 329 tObjectName; 330 331 // For IF-ELSE-ENDIF 332 #define COND_STACK_MAX 32 333 334 typedef enum 335 { 336 COND_BLOCK_NOCOND, // Nonconditional block 337 COND_BLOCK_IF, // if(){} block 338 COND_BLOCK_ELSE // else{} block 339 } 340 tCondBlock; 341 342 typedef struct 343 { 344 BOOL valid; // Condition is TRUE or FALSE 345 tCondBlock block; // Regular/if{}/else{} 346 } 347 tCondStack; 348 349 #endif //MAKELCF_H_ 350