The dependency is already expressed by the Makefiles, storing it in the .cmd file breaks build if a .c file is replaced by .S or vice versa, because the .cmd file contains foo/bar.o: foo/bar.c ... foo/bar.c ... : so the foo/bar.c -> foo/bar.o rule triggers even if there is no foo/bar.c anymore.
Showing the changes to scripts/basic (1 of 1 file). Show all
Unified · Split
| @@ -315,6 +315,7 @@ static void parse_dep_file(void *map, size_t len) · 314 unmodified lines | ||
| 315 | 315 | char *end = m + len; |
| 316 | 316 | char *p; |
| 317 | 317 | char s[PATH_MAX]; |
| 318 | + int first; | |
| 318 | 319 | |
| 319 | 320 | p = strchr(m, ':'); |
| 320 | 321 | if (!p) { |
| @@ -327,6 +328,7 @@ static void parse_dep_file(void *map, size_t len) · 6 unmodified lines | ||
| 327 | 328 | |
| 328 | 329 | clear_config(); |
| 329 | 330 | |
| 331 | + first = 1; | |
| 330 | 332 | while (m < end) { |
| 331 | 333 | while (m < end && (*m == ' ' || *m == '\\' || *m == '\n')) |
| 332 | 334 | m++; |
| @@ -340,9 +342,17 @@ static void parse_dep_file(void *map, size_t len) · 7 unmodified lines | ||
| 340 | 342 | if (strrcmp(s, "include/generated/autoconf.h") && |
| 341 | 343 | strrcmp(s, "arch/um/include/uml-config.h") && |
| 342 | 344 | strrcmp(s, ".ver")) { |
| 343 | − printf(" %s \\\n", s); | |
| 345 | + /* | |
| 346 | + * Do not output the first dependency (the | |
| 347 | + * source file), so that kbuild is not confused | |
| 348 | + * if a .c file is rewritten into .S or vice | |
| 349 | + * versa. | |
| 350 | + */ | |
| 351 | + if (!first) | |
| 352 | + printf(" %s \\\n", s); | |
| 344 | 353 | do_config_file(s); |
| 345 | 354 | } |
| 355 | + first = 0; | |
| 346 | 356 | m = p + 1; |
| 347 | 357 | } |
| 348 | 358 | printf("\n%s: $(deps_%s)\n\n", target, target); |