summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTharo <tharo10600@gmail.com>2026-05-06 08:24:50 +0100
committerGitHub <noreply@github.com>2026-05-06 09:24:50 +0200
commit5625f1826e0f5fac87bc66acefe5cdf3fd038237 (patch)
treea8c22398dcc1ddcb7cc76f28cc10abc45c4c00c9
parente48b2d954d472bace2424c6329275ea024764201 (diff)
Remove makeromfs (#2752)
This is a tool introduced a long time ago that ended up not being used at any point in the build system and has no prospects of future use. There's no reason for keeping it around.
-rw-r--r--tools/.gitignore1
-rw-r--r--tools/Makefile3
-rw-r--r--tools/makeromfs.c342
3 files changed, 1 insertions, 345 deletions
diff --git a/tools/.gitignore b/tools/.gitignore
index 534586817..02f5d1fff 100644
--- a/tools/.gitignore
+++ b/tools/.gitignore
@@ -2,7 +2,6 @@
*.exe
bin2c
elf2rom
-makeromfs
mkdmadata
mkldscript
preprocess_pragmas
diff --git a/tools/Makefile b/tools/Makefile
index 7f6eef55a..e5c4a4579 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -1,5 +1,5 @@
CFLAGS := -Wall -Wextra -pedantic -std=gnu99 -g -O2
-PROGRAMS := bin2c elf2rom makeromfs mkdmadata mkldscript preprocess_pragmas reloc_prereq vtxdis
+PROGRAMS := bin2c elf2rom mkdmadata mkldscript preprocess_pragmas reloc_prereq vtxdis
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
@@ -56,7 +56,6 @@ distclean: clean
elf2rom_SOURCES := elf2rom.c elf32.c n64chksum.c util.c
bin2c_SOURCES := bin2c.c
-makeromfs_SOURCES := makeromfs.c n64chksum.c util.c
mkdmadata_SOURCES := mkdmadata.c spec.c util.c
mkldscript_SOURCES := mkldscript.c spec.c util.c
preprocess_pragmas_SOURCES := preprocess_pragmas.c
diff --git a/tools/makeromfs.c b/tools/makeromfs.c
deleted file mode 100644
index a61c8e019..000000000
--- a/tools/makeromfs.c
+++ /dev/null
@@ -1,342 +0,0 @@
-#include <assert.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "n64chksum.h"
-#include "util.h"
-
-#define ROM_SIZE 0x02000000
-
-enum InputObjType
-{
- OBJ_NULL,
- OBJ_FILE,
- OBJ_TABLE,
-};
-
-struct InputFile
-{
- enum InputObjType type;
- const char *name;
- uint8_t *data;
- size_t size;
- unsigned int valign;
-
- uint32_t virtStart;
- uint32_t virtEnd;
- uint32_t physStart;
- uint32_t physEnd;
-};
-
-static struct InputFile *g_inputFiles = NULL;
-static int g_inputFilesCount = 0;
-
-static unsigned int round_up(unsigned int num, unsigned int multiple)
-{
- num += multiple - 1;
- return num / multiple * multiple;
-}
-
-static bool is_yaz0_header(const uint8_t *data)
-{
- return data[0] == 'Y'
- && data[1] == 'a'
- && data[2] == 'z'
- && data[3] == '0';
-}
-
-static void compute_offsets(void)
-{
- size_t physOffset = 0;
- size_t virtOffset = 0;
- int i;
-
- for (i = 0; i < g_inputFilesCount; i++)
- {
- bool compressed = false;
-
- if (g_inputFiles[i].type == OBJ_FILE)
- {
- if (is_yaz0_header(g_inputFiles[i].data))
- compressed = true;
- }
- else if (g_inputFiles[i].type == OBJ_TABLE)
- {
- g_inputFiles[i].size = g_inputFilesCount * 16;
- }
-
- virtOffset = round_up(virtOffset, g_inputFiles[i].valign);
-
- if (g_inputFiles[i].type == OBJ_NULL)
- {
- g_inputFiles[i].virtStart = 0;
- g_inputFiles[i].virtEnd = 0;
- g_inputFiles[i].physStart = 0;
- g_inputFiles[i].physEnd = 0;
- }
- else if (compressed)
- {
- size_t compSize = round_up(g_inputFiles[i].size, 16);
- size_t uncompSize = util_read_uint32_be(g_inputFiles[i].data + 4);
-
- g_inputFiles[i].virtStart = virtOffset;
- g_inputFiles[i].virtEnd = virtOffset + uncompSize;
- g_inputFiles[i].physStart = physOffset;
- g_inputFiles[i].physEnd = physOffset + compSize;
-
- physOffset += compSize;
- virtOffset += uncompSize;
- }
- else
- {
- size_t size = g_inputFiles[i].size;
-
- g_inputFiles[i].virtStart = virtOffset;
- g_inputFiles[i].virtEnd = virtOffset + size;
- g_inputFiles[i].physStart = physOffset;
- g_inputFiles[i].physEnd = 0;
-
- physOffset += size;
- virtOffset += size;
- }
- }
-}
-
-static void build_rom(const char *filename)
-{
- uint8_t *romData = calloc(ROM_SIZE, 1);
- size_t pos = 0;
- int i;
- int j;
- uint32_t chksum[2];
- FILE *outFile;
-
- for (i = 0; i < g_inputFilesCount; i++)
- {
- size_t size = g_inputFiles[i].size;
-
- if (pos + round_up(size, 16) > ROM_SIZE)
- util_fatal_error("size exceeds max ROM size of 32 KiB");
-
- assert(pos % 16 == 0);
-
- switch (g_inputFiles[i].type)
- {
- case OBJ_FILE:
- // write file data
- memcpy(romData + pos, g_inputFiles[i].data, size);
- pos += round_up(size, 16);
-
- free(g_inputFiles[i].data);
- break;
- case OBJ_TABLE:
- for (j = 0; j < g_inputFilesCount; j++)
- {
- util_write_uint32_be(romData + pos + 0, g_inputFiles[j].virtStart);
- util_write_uint32_be(romData + pos + 4, g_inputFiles[j].virtEnd);
- util_write_uint32_be(romData + pos + 8, g_inputFiles[j].physStart);
- util_write_uint32_be(romData + pos + 12, g_inputFiles[j].physEnd);
-
- pos += 16;
- }
- break;
- case OBJ_NULL:
- break;
- }
- }
-
- // Pad the rest of the ROM
- while (pos < ROM_SIZE)
- {
- // This is such a weird thing to pad with. Whatever, Nintendo.
- romData[pos] = pos & 0xFF;
- pos++;
- }
-
- // calculate checksum
- n64chksum_calculate(romData, 6105, chksum);
- util_write_uint32_be(romData + 0x10, chksum[0]);
- util_write_uint32_be(romData + 0x14, chksum[1]);
-
- // write file
- outFile = fopen(filename, "wb");
- if (outFile == NULL)
- util_fatal_error("failed to open file '%s' for writing", filename);
- fwrite(romData, ROM_SIZE, 1, outFile);
- fclose(outFile);
-
- free(romData);
-}
-
-static struct InputFile *new_file(void)
-{
- int index = g_inputFilesCount;
-
- g_inputFilesCount++;
- g_inputFiles = realloc(g_inputFiles, g_inputFilesCount * sizeof(*g_inputFiles));
-
- g_inputFiles[index].valign = 1;
-
- return &g_inputFiles[index];
-}
-
-// null terminates the current token and returns a pointer to the next token
-static char *token_split(char *str)
-{
- while (!isspace(*str))
- {
- if (*str == 0)
- return str; // end of string
- str++;
- }
- *str = 0; // terminate token
- str++;
-
- // skip remaining whitespace
- while (isspace(*str))
- str++;
- return str;
-}
-
-// null terminates the current line and returns a pointer to the next line
-static char *line_split(char *str)
-{
- while (*str != '\n')
- {
- if (*str == 0)
- return str; // end of string
- str++;
- }
- *str = 0; // terminate line
- return str + 1;
-}
-
-static void parse_line(char *line, int lineNum)
-{
- char *token = line;
- int i = 0;
-
- char *filename = NULL;
- enum InputObjType type = -1;
- int valign = 1;
- struct InputFile *file;
-
- // iterate through each token
- while (token[0] != 0)
- {
- char *nextToken = token_split(token);
-
- if (token[0] == '#') // comment - ignore rest of line
- return;
-
- switch (i)
- {
- case 0:
- if (strcmp(token, "file") == 0)
- type = OBJ_FILE;
- else if (strcmp(token, "filetable") == 0)
- type = OBJ_TABLE;
- else if (strcmp(token, "null") == 0)
- type = OBJ_NULL;
- else
- util_fatal_error("unknown object type '%s' on line %i", token, lineNum);
- break;
- case 1:
- filename = token;
- break;
- case 2:
- {
- int n;
-
- if (sscanf(token, "align(%i)", &n) == 1)
- valign = n;
- else
- goto junk;
- }
- break;
- default:
- junk:
- util_fatal_error("junk '%s' on line %i", token, lineNum);
- break;
- }
-
- token = nextToken;
- i++;
- }
-
- if (i == 0) // empty line
- return;
-
- file = new_file();
- file->valign = valign;
-
- switch (type)
- {
- case OBJ_FILE:
- if (filename == NULL)
- util_fatal_error("no filename specified on line %i", lineNum);
- file->type = OBJ_FILE;
- file->data = util_read_whole_file(filename, &file->size);
- break;
- case OBJ_TABLE:
- file->type = OBJ_TABLE;
- break;
- case OBJ_NULL:
- file->type = OBJ_NULL;
- file->size = 0;
- break;
- }
-}
-
-static void parse_list(char *list)
-{
- char *line = list;
- int lineNum = 1;
-
- // iterate through each line
- while (line[0] != 0)
- {
- char *nextLine = line_split(line);
-
- parse_line(line, lineNum);
-
- line = nextLine;
- lineNum++;
- }
-}
-
-static void usage(const char *execName)
-{
- printf("usage: %s FILE_LIST OUTPUT_FILE\n"
- "where FILE_LIST is a list of files to include\n"
- "and OUTPUT_FILE is the name of the output ROM\n"
- "note that 'dmadata' refers to the file list itself and not an external file\n",
- execName);
-}
-
-int main(int argc, char **argv)
-{
- char *list;
-
- if (argc != 3)
- {
- puts("invalid args");
- usage(argv[0]);
- return 1;
- }
-
- list = util_read_whole_file(argv[1], NULL);
-
- parse_list(list);
- compute_offsets();
- build_rom(argv[2]);
-
- free(list);
-
- return 0;
-}