Skip to content

Commit

Permalink
dtc: Implement -d option to write out a dependency file
Browse files Browse the repository at this point in the history
This will allow callers to rebuild .dtb files when any of the /include/d
.dtsi files are modified, not just the top-level .dts file.

Signed-off-by: Stephen Warren <[email protected]>
Signed-off-by: Michal Marek <[email protected]>
  • Loading branch information
nvswarren authored and michal42 committed Jan 14, 2012
1 parent 5bb0571 commit 136ec20
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 1 deletion.
21 changes: 20 additions & 1 deletion scripts/dtc/dtc.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ static void __attribute__ ((noreturn)) usage(void)
fprintf(stderr, "\t\t\tasm - assembler source\n");
fprintf(stderr, "\t-V <output version>\n");
fprintf(stderr, "\t\tBlob version to produce, defaults to %d (relevant for dtb\n\t\tand asm output only)\n", DEFAULT_FDT_VERSION);
fprintf(stderr, "\t-d <output dependency file>\n");
fprintf(stderr, "\t-R <number>\n");
fprintf(stderr, "\t\tMake space for <number> reserve map entries (relevant for \n\t\tdtb and asm output only)\n");
fprintf(stderr, "\t-S <bytes>\n");
Expand Down Expand Up @@ -99,6 +100,7 @@ int main(int argc, char *argv[])
const char *inform = "dts";
const char *outform = "dts";
const char *outname = "-";
const char *depname = NULL;
int force = 0, check = 0, sort = 0;
const char *arg;
int opt;
Expand All @@ -111,7 +113,8 @@ int main(int argc, char *argv[])
minsize = 0;
padsize = 0;

while ((opt = getopt(argc, argv, "hI:O:o:V:R:S:p:fcqb:vH:s")) != EOF) {
while ((opt = getopt(argc, argv, "hI:O:o:V:d:R:S:p:fcqb:vH:s"))
!= EOF) {
switch (opt) {
case 'I':
inform = optarg;
Expand All @@ -125,6 +128,9 @@ int main(int argc, char *argv[])
case 'V':
outversion = strtol(optarg, NULL, 0);
break;
case 'd':
depname = optarg;
break;
case 'R':
reservenum = strtol(optarg, NULL, 0);
break;
Expand Down Expand Up @@ -188,6 +194,14 @@ int main(int argc, char *argv[])
fprintf(stderr, "DTC: %s->%s on file \"%s\"\n",
inform, outform, arg);

if (depname) {
depfile = fopen(depname, "w");
if (!depfile)
die("Couldn't open dependency file %s: %s\n", depname,
strerror(errno));
fprintf(depfile, "%s:", outname);
}

if (streq(inform, "dts"))
bi = dt_from_source(arg);
else if (streq(inform, "fs"))
Expand All @@ -197,6 +211,11 @@ int main(int argc, char *argv[])
else
die("Unknown input format \"%s\"\n", inform);

if (depfile) {
fputc('\n', depfile);
fclose(depfile);
}

if (cmdline_boot_cpuid != -1)
bi->boot_cpuid_phys = cmdline_boot_cpuid;

Expand Down
4 changes: 4 additions & 0 deletions scripts/dtc/srcpos.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ static char *dirname(const char *path)
return NULL;
}

FILE *depfile; /* = NULL */
struct srcfile_state *current_srcfile; /* = NULL */

/* Detect infinite include recursion. */
Expand Down Expand Up @@ -67,6 +68,9 @@ FILE *srcfile_relative_open(const char *fname, char **fullnamep)
strerror(errno));
}

if (depfile)
fprintf(depfile, " %s", fullname);

if (fullnamep)
*fullnamep = fullname;
else
Expand Down
1 change: 1 addition & 0 deletions scripts/dtc/srcpos.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ struct srcfile_state {
struct srcfile_state *prev;
};

extern FILE *depfile; /* = NULL */
extern struct srcfile_state *current_srcfile; /* = NULL */

FILE *srcfile_relative_open(const char *fname, char **fullnamep);
Expand Down

0 comments on commit 136ec20

Please sign in to comment.