mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 10:12:06 +00:00
Split up the linkerscript lexer and layout actions
This commit is contained in:
@@ -3,37 +3,20 @@
|
||||
#ifndef RGBDS_LINK_LAYOUT_HPP
|
||||
#define RGBDS_LINK_LAYOUT_HPP
|
||||
|
||||
#include <fstream>
|
||||
#include <stdint.h>
|
||||
#include <string>
|
||||
|
||||
#include "linkdefs.hpp"
|
||||
|
||||
struct LexerStackEntry {
|
||||
std::filebuf file;
|
||||
std::string path;
|
||||
uint32_t lineNo;
|
||||
|
||||
explicit LexerStackEntry(std::string &&path_) : file(), path(path_), lineNo(1) {}
|
||||
};
|
||||
|
||||
#define scriptError(context, fmt, ...) \
|
||||
::error( \
|
||||
"%s(%" PRIu32 "): " fmt, context.path.c_str(), context.lineNo __VA_OPT__(, ) __VA_ARGS__ \
|
||||
)
|
||||
|
||||
LexerStackEntry &lexer_Context();
|
||||
void lexer_IncludeFile(std::string &&path);
|
||||
void lexer_IncLineNo();
|
||||
bool lexer_Init(char const *linkerScriptName);
|
||||
|
||||
void layout_SetFloatingSectionType(SectionType type);
|
||||
void layout_SetSectionType(SectionType type);
|
||||
void layout_SetSectionType(SectionType type, uint32_t bank);
|
||||
|
||||
void layout_SetAddr(uint32_t addr);
|
||||
void layout_MakeAddrFloating();
|
||||
void layout_AlignTo(uint32_t alignment, uint32_t offset);
|
||||
void layout_Pad(uint32_t length);
|
||||
|
||||
void layout_PlaceSection(std::string const &name, bool isOptional);
|
||||
|
||||
#endif // RGBDS_LINK_LAYOUT_HPP
|
||||
|
||||
17
include/link/lexer.hpp
Normal file
17
include/link/lexer.hpp
Normal file
@@ -0,0 +1,17 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#ifndef RGBDS_LINK_LEXER_HPP
|
||||
#define RGBDS_LINK_LEXER_HPP
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <string>
|
||||
|
||||
[[gnu::format(printf, 1, 2)]]
|
||||
void lexer_Error(char const *fmt, ...);
|
||||
|
||||
void lexer_IncludeFile(std::string &&path);
|
||||
void lexer_IncLineNo();
|
||||
|
||||
bool lexer_Init(char const *linkerScriptName);
|
||||
|
||||
#endif // RGBDS_LINK_LEXER_HPP
|
||||
@@ -12,13 +12,13 @@
|
||||
#include "linkdefs.hpp"
|
||||
|
||||
struct Options {
|
||||
bool isDmgMode; // -d
|
||||
char const *mapFileName; // -m
|
||||
bool noSymInMap; // -M
|
||||
char const *symFileName; // -n
|
||||
char const *overlayFileName; // -O
|
||||
char const *outputFileName; // -o
|
||||
uint8_t padValue; // -p
|
||||
bool isDmgMode; // -d
|
||||
char const *mapFileName; // -m
|
||||
bool noSymInMap; // -M
|
||||
char const *symFileName; // -n
|
||||
char const *overlayFileName; // -O
|
||||
char const *outputFileName; // -o
|
||||
uint8_t padValue; // -p
|
||||
bool hasPadValue = false;
|
||||
// Setting these three to 0 disables the functionality
|
||||
uint16_t scrambleROMX; // -S
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#ifndef RGBDS_LINK_WARNING_HPP
|
||||
#define RGBDS_LINK_WARNING_HPP
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "diagnostics.hpp"
|
||||
@@ -48,7 +49,9 @@ void error(char const *fmt, ...);
|
||||
[[gnu::format(printf, 1, 2)]]
|
||||
void errorNoDump(char const *fmt, ...);
|
||||
[[gnu::format(printf, 2, 3)]]
|
||||
void argErr(char flag, char const *fmt, ...);
|
||||
void argError(char flag, char const *fmt, ...);
|
||||
|
||||
void scriptError(char const *name, uint32_t lineNo, char const *fmt, va_list args);
|
||||
|
||||
[[gnu::format(printf, 3, 4), noreturn]]
|
||||
void fatal(FileStackNode const *src, uint32_t lineNo, char const *fmt, ...);
|
||||
|
||||
Reference in New Issue
Block a user