diff --git a/src/asm/fstack.c b/src/asm/fstack.c index 177be84d..c15c0eb1 100644 --- a/src/asm/fstack.c +++ b/src/asm/fstack.c @@ -36,6 +36,9 @@ ULONG nCurrentREPTBlockCount; ULONG ulMacroReturnValue; +extern char *tzObjectname; +extern FILE *dependfile; + /* * defines for nCurrentStatus */ @@ -198,6 +201,9 @@ fstk_FindFile(char *fname) FILE *f; if ((f = fopen(fname, "rb")) != NULL || errno != ENOENT) { + if (dependfile) { + fprintf(dependfile, "%s: %s\n", tzObjectname, fname); + } return f; } @@ -211,6 +217,9 @@ fstk_FindFile(char *fname) } if ((f = fopen(path, "rb")) != NULL || errno != ENOENT) { + if (dependfile) { + fprintf(dependfile, "%s: %s\n", tzObjectname, path); + } return f; } } diff --git a/src/asm/main.c b/src/asm/main.c index ef7155a3..e21c1544 100644 --- a/src/asm/main.c +++ b/src/asm/main.c @@ -26,6 +26,9 @@ ULONG nTotalLines, nPass, nPC, nIFDepth, nErrors; extern int yydebug; +FILE *dependfile; +extern char *tzObjectname; + /* * Option stack */ @@ -274,7 +277,7 @@ usage(void) { printf( "Usage: rgbasm [-hvE] [-b chars] [-Dname[=value]] [-g chars] [-i path]\n" -" [-o outfile] [-p pad_value] file.asm\n"); +" [-M dependfile] [-o outfile] [-p pad_value] file.asm\n"); exit(1); } @@ -288,6 +291,8 @@ main(int argc, char *argv[]) char *tzMainfile; + dependfile = NULL; + cldefines_size = 32; cldefines = reallocarray(cldefines, cldefines_size, 2 * sizeof(void *)); @@ -317,7 +322,7 @@ main(int argc, char *argv[]) newopt = CurrentOptions; - while ((ch = getopt(argc, argv, "b:D:g:hi:o:p:vEw")) != -1) { + while ((ch = getopt(argc, argv, "b:D:g:hi:M:o:p:vEw")) != -1) { switch (ch) { case 'b': if (strlen(optarg) == 2) { @@ -348,6 +353,11 @@ main(int argc, char *argv[]) case 'i': fstk_AddIncludePath(optarg); break; + case 'M': + if ((dependfile = fopen(optarg, "w")) == NULL) { + err(1, "Could not open dependfile %s", optarg); + } + break; case 'o': out_SetFileName(optarg); break; @@ -392,6 +402,13 @@ main(int argc, char *argv[]) printf("Assembling %s\n", tzMainfile); } + if (dependfile) { + if (!tzObjectname) + errx(1, "Dependency files can only be created if an output object file is specified.\n"); + + fprintf(dependfile, "%s: %s\n", tzObjectname, tzMainfile); + } + nStartClock = clock(); nLineNo = 1; diff --git a/src/asm/rgbasm.1 b/src/asm/rgbasm.1 index 97fd1513..f5e6ab08 100644 --- a/src/asm/rgbasm.1 +++ b/src/asm/rgbasm.1 @@ -61,6 +61,11 @@ The option disables this behavior. .It Fl i Ar path Add an include path. +.It Fl M Ar dependfile +Print +.Xr make 1 +dependencies to +.Ar dependfile . .It Fl o Ar outfile Write an object file to the given filename. .It Fl p Ar pad_value