util/sconfig: Re-factor emitting of headers to static.c
This change removes call to add_header from parsing functions and moves it to a local function within main.c. It also adds a new function emit_headers that is responsible for creating the linked list for chip headers and emitting those to static.c BUG=b:80081934 TEST=Verified that static.c for all files compiled using abuild is the same with and without this change. Change-Id: I24d526e81323115d3cc927242a4b9e49414afbe0 Signed-off-by: Furquan Shaikh <furquan@google.com> Reviewed-on: https://review.coreboot.org/26726 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
parent
79e8412665
commit
a0cc5a697c
|
@ -22,8 +22,6 @@ extern int linenum;
|
||||||
|
|
||||||
struct device *head, *lastdev;
|
struct device *head, *lastdev;
|
||||||
|
|
||||||
struct header headers;
|
|
||||||
|
|
||||||
static struct chip *chip_head;
|
static struct chip *chip_head;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -244,30 +242,6 @@ struct chip *new_chip(char *path)
|
||||||
return new_chip;
|
return new_chip;
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_header(struct chip *chip)
|
|
||||||
{
|
|
||||||
int include_exists = 0;
|
|
||||||
struct header *h = &headers;
|
|
||||||
while (h->next) {
|
|
||||||
int result = strcmp(chip->name, h->next->name);
|
|
||||||
if (result == 0) {
|
|
||||||
include_exists = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (result < 0)
|
|
||||||
break;
|
|
||||||
h = h->next;
|
|
||||||
}
|
|
||||||
if (!include_exists) {
|
|
||||||
struct header *tmp = h->next;
|
|
||||||
h->next = malloc(sizeof(struct header));
|
|
||||||
memset(h->next, 0, sizeof(struct header));
|
|
||||||
h->next->chiph_exists = chip->chiph_exists;
|
|
||||||
h->next->name = chip->name;
|
|
||||||
h->next->next = tmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct device *new_device(struct device *parent, struct device *busdev,
|
struct device *new_device(struct device *parent, struct device *busdev,
|
||||||
struct chip *chip, const int bus, const char *devnum,
|
struct chip *chip, const int bus, const char *devnum,
|
||||||
int enabled)
|
int enabled)
|
||||||
|
@ -622,10 +596,69 @@ static void walk_device_tree(FILE *fil, struct device *ptr,
|
||||||
} while (ptr);
|
} while (ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void add_header(struct chip *chip, struct header *h)
|
||||||
|
{
|
||||||
|
int include_exists = 0;
|
||||||
|
|
||||||
|
while (h->next) {
|
||||||
|
int result = strcmp(chip->name, h->next->name);
|
||||||
|
if (result == 0) {
|
||||||
|
include_exists = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (result < 0)
|
||||||
|
break;
|
||||||
|
h = h->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!include_exists) {
|
||||||
|
struct header *tmp = h->next;
|
||||||
|
h->next = malloc(sizeof(struct header));
|
||||||
|
memset(h->next, 0, sizeof(struct header));
|
||||||
|
h->next->chiph_exists = chip->chiph_exists;
|
||||||
|
h->next->name = chip->name;
|
||||||
|
h->next->next = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void emit_headers(FILE *fil)
|
||||||
|
{
|
||||||
|
struct header *h;
|
||||||
|
struct chip *chip;
|
||||||
|
struct header headers = {};
|
||||||
|
|
||||||
|
for (chip = chip_head; chip; chip = chip->next)
|
||||||
|
add_header(chip, &headers);
|
||||||
|
|
||||||
|
fprintf(fil, "#include <device/device.h>\n");
|
||||||
|
fprintf(fil, "#include <device/pci.h>\n");
|
||||||
|
h = &headers;
|
||||||
|
while (h->next) {
|
||||||
|
h = h->next;
|
||||||
|
if (h->chiph_exists)
|
||||||
|
fprintf(fil, "#include \"%s/chip.h\"\n", h->name);
|
||||||
|
}
|
||||||
|
fprintf(fil, "\n#if !DEVTREE_EARLY\n");
|
||||||
|
fprintf(fil,
|
||||||
|
"__attribute__((weak)) struct chip_operations mainboard_ops = {};\n");
|
||||||
|
h = &headers;
|
||||||
|
while (h->next) {
|
||||||
|
h = h->next;
|
||||||
|
char *name_underscore = translate_name(h->name, UNSLASH);
|
||||||
|
fprintf(fil,
|
||||||
|
"__attribute__((weak)) struct chip_operations %s_ops = {};\n",
|
||||||
|
name_underscore);
|
||||||
|
free(name_underscore);
|
||||||
|
}
|
||||||
|
fprintf(fil, "#endif\n");
|
||||||
|
}
|
||||||
|
|
||||||
static void emit_chips(FILE *fil)
|
static void emit_chips(FILE *fil)
|
||||||
{
|
{
|
||||||
struct chip *chip;
|
struct chip *chip;
|
||||||
|
|
||||||
|
emit_headers(fil);
|
||||||
|
|
||||||
for (chip = chip_head; chip; chip = chip->next) {
|
for (chip = chip_head; chip; chip = chip->next) {
|
||||||
if (!chip->chiph_exists)
|
if (!chip->chiph_exists)
|
||||||
continue;
|
continue;
|
||||||
|
@ -693,8 +726,6 @@ int main(int argc, char **argv)
|
||||||
char *devtree = argv[DEVICEFILE_ARG];
|
char *devtree = argv[DEVICEFILE_ARG];
|
||||||
char *outputc = argv[OUTPUTFILE_ARG];
|
char *outputc = argv[OUTPUTFILE_ARG];
|
||||||
|
|
||||||
headers.next = 0;
|
|
||||||
|
|
||||||
FILE *filec = fopen(devtree, "r");
|
FILE *filec = fopen(devtree, "r");
|
||||||
if (!filec) {
|
if (!filec) {
|
||||||
perror(NULL);
|
perror(NULL);
|
||||||
|
@ -717,29 +748,6 @@ int main(int argc, char **argv)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct header *h;
|
|
||||||
fprintf(autogen, "#include <device/device.h>\n");
|
|
||||||
fprintf(autogen, "#include <device/pci.h>\n");
|
|
||||||
h = &headers;
|
|
||||||
while (h->next) {
|
|
||||||
h = h->next;
|
|
||||||
if (h->chiph_exists)
|
|
||||||
fprintf(autogen, "#include \"%s/chip.h\"\n", h->name);
|
|
||||||
}
|
|
||||||
fprintf(autogen, "\n#if !DEVTREE_EARLY\n");
|
|
||||||
fprintf(autogen,
|
|
||||||
"__attribute__((weak)) struct chip_operations mainboard_ops = {};\n");
|
|
||||||
h = &headers;
|
|
||||||
while (h->next) {
|
|
||||||
h = h->next;
|
|
||||||
char *name_underscore = translate_name(h->name, UNSLASH);
|
|
||||||
fprintf(autogen,
|
|
||||||
"__attribute__((weak)) struct chip_operations %s_ops = {};\n",
|
|
||||||
name_underscore);
|
|
||||||
free(name_underscore);
|
|
||||||
}
|
|
||||||
fprintf(autogen, "#endif\n");
|
|
||||||
|
|
||||||
emit_chips(autogen);
|
emit_chips(autogen);
|
||||||
|
|
||||||
walk_device_tree(autogen, &root, inherit_subsystem_ids, NULL);
|
walk_device_tree(autogen, &root, inherit_subsystem_ids, NULL);
|
||||||
|
|
|
@ -110,7 +110,6 @@ void fold_in(struct device *parent);
|
||||||
|
|
||||||
void postprocess_devtree(void);
|
void postprocess_devtree(void);
|
||||||
struct chip *new_chip(char *path);
|
struct chip *new_chip(char *path);
|
||||||
void add_header(struct chip *chip);
|
|
||||||
struct device *new_device(struct device *parent, struct device *busdev,
|
struct device *new_device(struct device *parent, struct device *busdev,
|
||||||
struct chip *chip, const int bus, const char *devnum,
|
struct chip *chip, const int bus, const char *devnum,
|
||||||
int enabled);
|
int enabled);
|
||||||
|
|
|
@ -487,8 +487,8 @@ static const yytype_uint8 yytranslate[] =
|
||||||
static const yytype_uint8 yyrline[] =
|
static const yytype_uint8 yyrline[] =
|
||||||
{
|
{
|
||||||
0, 36, 36, 36, 38, 38, 38, 38, 40, 40,
|
0, 36, 36, 36, 38, 38, 38, 38, 40, 40,
|
||||||
40, 40, 40, 40, 42, 42, 52, 52, 64, 67,
|
40, 40, 40, 40, 42, 42, 51, 51, 63, 66,
|
||||||
70, 73, 76
|
69, 72, 75
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1311,7 +1311,6 @@ yyreduce:
|
||||||
|
|
||||||
{
|
{
|
||||||
cur_chip = chip_dequeue_tail();
|
cur_chip = chip_dequeue_tail();
|
||||||
add_header((yyvsp[-2].chip));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -46,7 +46,6 @@ chip: CHIP STRING /* == path */ {
|
||||||
}
|
}
|
||||||
chipchildren END {
|
chipchildren END {
|
||||||
cur_chip = chip_dequeue_tail();
|
cur_chip = chip_dequeue_tail();
|
||||||
add_header($<chip>3);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
device: DEVICE BUS NUMBER /* == devnum */ BOOL {
|
device: DEVICE BUS NUMBER /* == devnum */ BOOL {
|
||||||
|
|
Loading…
Reference in New Issue