summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2016-03-22 13:24:23 +0100
committerTor Andersson <tor.andersson@artifex.com>2016-03-23 15:58:47 +0100
commitb2c3d9e7ca40e001d3ee18975427224b726dc4d1 (patch)
treed113ff85ce07dbd81ae45f8f18b303e8787d26cf /scripts
parent81109bf17aada37f678b6adbdb9fa8eca1cd3163 (diff)
downloadmupdf-b2c3d9e7ca40e001d3ee18975427224b726dc4d1.tar.xz
Compile embedded fonts in separate C files.
Also change unsigned char into const char for embedded data.
Diffstat (limited to 'scripts')
-rw-r--r--scripts/fontdump.c32
1 files changed, 12 insertions, 20 deletions
diff --git a/scripts/fontdump.c b/scripts/fontdump.c
index 568a6e64..fbeea47f 100644
--- a/scripts/fontdump.c
+++ b/scripts/fontdump.c
@@ -30,10 +30,9 @@ main(int argc, char **argv)
FILE *fo;
FILE *fi;
char fontname[256];
- char origname[256];
char *basename;
char *p;
- int i, len;
+ int i, size;
if (argc < 3)
{
@@ -48,7 +47,6 @@ main(int argc, char **argv)
return 1;
}
- fprintf(fo, "#ifdef DEBUG\n");
fprintf(fo, "#ifndef __STRICT_ANSI__\n");
fprintf(fo, "#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__)\n");
fprintf(fo, "#if !defined(__ICC)\n");
@@ -56,7 +54,6 @@ main(int argc, char **argv)
fprintf(fo, "#endif\n");
fprintf(fo, "#endif\n");
fprintf(fo, "#endif\n");
- fprintf(fo, "#endif\n");
for (i = 2; i < argc; i++)
{
@@ -76,34 +73,29 @@ main(int argc, char **argv)
else
basename = argv[i];
- strcpy(origname, basename);
- p = strrchr(origname, '.');
- if (p) *p = 0;
- strcpy(fontname, origname);
-
- p = fontname;
- while (*p)
+ strcpy(fontname, basename);
+ for (p = fontname; *p; ++p)
{
if (*p == '/' || *p == '.' || *p == '\\' || *p == '-')
*p = '_';
- p ++;
}
fseek(fi, 0, SEEK_END);
- len = ftell(fi);
+ size = ftell(fi);
fseek(fi, 0, SEEK_SET);
- if (getenv("verbose"))
- printf("\t{\"%s\",fz_font_%s,%d},\n", origname, fontname, len);
-
fprintf(fo, "\n#ifdef HAVE_INCBIN\n");
- fprintf(fo, "extern const unsigned char fz_font_%s[%d];\n", fontname, len);
- fprintf(fo, "asm(\".globl fz_font_%s\");\n", fontname);
- fprintf(fo, "asm(\".balign 8\");\n");
+ fprintf(fo, "const int fz_font_%s_size = %d;\n", fontname, size);
+ fprintf(fo, "asm(\".section .rodata\");\n");
+ fprintf(fo, "asm(\".global fz_font_%s\");\n", fontname);
+ fprintf(fo, "asm(\".type fz_font_%s, @object\");\n", fontname);
+ fprintf(fo, "asm(\".size fz_font_%s, %d\");\n", fontname, size);
+ fprintf(fo, "asm(\".align 64\");\n");
fprintf(fo, "asm(\"fz_font_%s:\");\n", fontname);
fprintf(fo, "asm(\".incbin \\\"%s\\\"\");\n", argv[i]);
fprintf(fo, "#else\n");
- fprintf(fo, "static const unsigned char fz_font_%s[%d] = {\n", fontname, len);
+ fprintf(fo, "const int fz_font_%s_size = %d;\n", fontname, size);
+ fprintf(fo, "const char fz_font_%s[] = {\n", fontname);
hexdump(fo, fi);
fprintf(fo, "};\n");
fprintf(fo, "#endif\n");