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 char compressSpec; 185 struct tAfterList afters; 186 struct tObjectList objects; 187 struct tObjectList libraries; 188 struct tObjectList searchSymbols; 189 struct tObjectList forces; 190 tMemType memtype; 191 } 192 tOverlay; 193 194 typedef struct tStatic 195 { 196 const char *name; 197 u32 address; 198 struct tObjectList objects; 199 struct tObjectList libraries; 200 struct tObjectList searchSymbols; 201 struct tObjectList forces; 202 u32 stacksize; 203 u32 stacksize_irq; 204 tMemType memtype; 205 const char *targetName; 206 } 207 tStatic; 208 209 typedef struct 210 { 211 const char *overlaydefs; 212 const char *overlaytable; 213 const char *suffix; 214 215 } 216 tProperty; 217 218 typedef struct 219 { 220 int count; 221 BOOL isFirst; 222 BOOL isLast; 223 } 224 tForeachStatus; 225 226 typedef struct 227 { 228 tForeachStatus static_object; 229 tForeachStatus static_library; 230 tForeachStatus static_searchsymbol; 231 tForeachStatus static_force; 232 tForeachStatus autoload; 233 tForeachStatus autoload_object; 234 tForeachStatus autoload_library; 235 tForeachStatus autoload_searchsymbol; 236 tForeachStatus autoload_force; 237 tForeachStatus overlay; 238 tForeachStatus overlay_object; 239 tForeachStatus overlay_library; 240 tForeachStatus overlay_searchsymbol; 241 tForeachStatus overlay_force; 242 } 243 tForeach; 244 245 BOOL AddOverlay(const char *overlayName); 246 BOOL AddAutoload(const char *overlayName); 247 BOOL OverlaySetId(u32 id); 248 BOOL OverlaySetGroup(const char *overlayGroup); 249 BOOL OverlaySetAddress(u32 address); 250 BOOL OverlayAddAfter(const char *overlayName); 251 BOOL OverlayAddObject(const char *objectName, tObjectType objectType); 252 BOOL OverlaySetObjectSection(const char *sectionName); 253 BOOL OverlayAddLibrary(const char *objectName, tObjectType objectType); 254 BOOL OverlaySetLibrarySection(const char *sectionName); 255 BOOL OverlayAddSearchSymbol(const char *searchName); 256 BOOL OverlayAddForce(const char *forceName); 257 BOOL OverlaySetCompress(const char *compressSpec); 258 259 BOOL StaticSetTargetName(const char *targetName); 260 BOOL StaticSetName(const char *fileName); 261 BOOL StaticSetAddress(u32 address); 262 BOOL StaticAddObject(const char *objectName, tObjectType objectType); 263 BOOL StaticSetObjectSection(const char *sectionName); 264 BOOL StaticAddLibrary(const char *objectName, tObjectType objectType); 265 BOOL StaticSetLibrarySection(const char *sectionName); 266 BOOL StaticAddSearchSymbol(const char *searchName); 267 BOOL StaticAddForce(const char *forceName); 268 BOOL StaticSetStackSize(u32 stacksize); 269 BOOL StaticSetStackSizeIrq(u32 stacksize); 270 BOOL PropertySetOverlayDefs(const char *filename); 271 BOOL PropertySetOverlayTable(const char *filename); 272 BOOL PropertySetSuffix(const char *suffix); 273 274 BOOL CheckSpec(void); 275 void DumpSpec(void); 276 BOOL isSame(const char *s1, const char *s2); 277 278 int ParseSpecFile(const char *filename); 279 280 extern tStatic Static; 281 extern tProperty Property; 282 extern tForeach Foreach; 283 extern tOverlayList OverlayList; 284 extern tOverlayList AutoloadList; 285 286 #define DEFAULT_OVERLAYDEFS "%_defs" 287 #define DEFAULT_OVERLAYTABLE "%_table" 288 #define DEFAULT_SUFFIX ".sbin" 289 /* NITRO-SDK4.0RC: increased 0x400->0x800 */ 290 #define DEFAULT_IRQSTACKSIZE 0x800 291 292 int spec_yyparse(void); 293 int spec_yylex(void); 294 void spec_yyerror(const char *str); 295 296 297 /*============================================================================ 298 * TOKEN BUFFER 299 */ 300 typedef struct tTokenBuffer 301 { 302 int id; 303 const char *string; 304 int loop_end; 305 } 306 tTokenBuffer; 307 308 typedef struct tLoopStack 309 { 310 int id; 311 int start; 312 } 313 tLoopStack; 314 315 #define TOKEN_LEN 65536 316 #define LOOP_STACK_MAX 32 317 318 int ParseTlcfFile(const char *filename); 319 int CreateLcfFile(const char *filename); 320 321 extern tTokenBuffer tokenBuffer[TOKEN_LEN]; 322 extern int tokenBufferEnd; 323 324 int tlcf_yyparse(void); 325 int tlcf_yylex(void); 326 void tlcf_yyerror(const char *str); 327 void lcf_error(const char *fmt, ...); 328 329 extern BOOL DebugMode; 330 void debug_printf(const char *str, ...); 331 332 typedef struct 333 { 334 char *string; 335 tObjectType type; 336 } 337 tObjectName; 338 339 // For IF-ELSE-ENDIF 340 #define COND_STACK_MAX 32 341 342 typedef enum 343 { 344 COND_BLOCK_NOCOND, // Nonconditional block 345 COND_BLOCK_IF, // if(){} block 346 COND_BLOCK_ELSE // else{} block 347 } 348 tCondBlock; 349 350 typedef struct 351 { 352 BOOL valid; // Condition is TRUE or FALSE 353 tCondBlock block; // Regular/if{}/else{} 354 } 355 tCondStack; 356 357 #endif //MAKELCF_H_ 358