sconfig: Switch to getopt
Instead of positional arguments switch sconfig to use getopt and pass the arguments as options in the build system. This will make it easier to add additional options. Change-Id: I431633781e80362e086c000b7108191b5b01aa9d Signed-off-by: Duncan Laurie <dlaurie@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/44035 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
This commit is contained in:
parent
0647f614cd
commit
51c8373593
10
Makefile.inc
10
Makefile.inc
|
@ -595,19 +595,23 @@ $(obj)/config.h: $(objutil)/kconfig/conf
|
||||||
# Creation of these is architecture and mainboard independent
|
# Creation of these is architecture and mainboard independent
|
||||||
DEVICETREE_FILE := $(src)/mainboard/$(MAINBOARDDIR)/$(CONFIG_DEVICETREE)
|
DEVICETREE_FILE := $(src)/mainboard/$(MAINBOARDDIR)/$(CONFIG_DEVICETREE)
|
||||||
|
|
||||||
|
SCONFIG_OPTIONS := --mainboard_devtree=$(DEVICETREE_FILE)
|
||||||
|
|
||||||
ifneq ($(CONFIG_OVERRIDE_DEVICETREE),)
|
ifneq ($(CONFIG_OVERRIDE_DEVICETREE),)
|
||||||
|
|
||||||
OVERRIDE_DEVICETREE_FILE := $(src)/mainboard/$(MAINBOARDDIR)/$(CONFIG_OVERRIDE_DEVICETREE)
|
OVERRIDE_DEVICETREE_FILE := $(src)/mainboard/$(MAINBOARDDIR)/$(CONFIG_OVERRIDE_DEVICETREE)
|
||||||
|
SCONFIG_OPTIONS += --override_devtree=$(OVERRIDE_DEVICETREE_FILE)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
DEVICETREE_STATIC_C := $(obj)/mainboard/$(MAINBOARDDIR)/static.c
|
DEVICETREE_STATIC_C := $(obj)/mainboard/$(MAINBOARDDIR)/static.c
|
||||||
|
SCONFIG_OPTIONS += --output_c=$(DEVICETREE_STATIC_C)
|
||||||
|
|
||||||
DEVICETREE_STATIC_H := $(obj)/static.h
|
DEVICETREE_STATIC_H := $(obj)/static.h
|
||||||
|
SCONFIG_OPTIONS += --output_h=$(DEVICETREE_STATIC_H)
|
||||||
|
|
||||||
$(DEVICETREE_STATIC_C): $(DEVICETREE_FILE) $(OVERRIDE_DEVICETREE_FILE) $(objutil)/sconfig/sconfig
|
$(DEVICETREE_STATIC_C): $(DEVICETREE_FILE) $(OVERRIDE_DEVICETREE_FILE) $(objutil)/sconfig/sconfig
|
||||||
@printf " SCONFIG $(subst $(src)/,,$(<))\n"
|
@printf " SCONFIG $(subst $(src)/,,$(<))\n"
|
||||||
mkdir -p $(dir $(DEVICETREE_STATIC_C))
|
mkdir -p $(dir $(DEVICETREE_STATIC_C))
|
||||||
$(objutil)/sconfig/sconfig $(DEVICETREE_FILE) $(DEVICETREE_STATIC_C) $(DEVICETREE_STATIC_H) $(OVERRIDE_DEVICETREE_FILE)
|
$(objutil)/sconfig/sconfig $(SCONFIG_OPTIONS)
|
||||||
|
|
||||||
ramstage-y+=$(DEVICETREE_STATIC_C)
|
ramstage-y+=$(DEVICETREE_STATIC_C)
|
||||||
romstage-y+=$(DEVICETREE_STATIC_C)
|
romstage-y+=$(DEVICETREE_STATIC_C)
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include <getopt.h>
|
||||||
/* stat.h needs to be included before commonlib/helpers.h to avoid errors.*/
|
/* stat.h needs to be included before commonlib/helpers.h to avoid errors.*/
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <commonlib/helpers.h>
|
#include <commonlib/helpers.h>
|
||||||
|
@ -1309,21 +1310,14 @@ static void inherit_subsystem_ids(FILE *file, FILE *head, struct device *dev,
|
||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
printf("usage: sconfig devicetree_file output_file header_file [override_devicetree_file]\n");
|
printf("usage: sconfig <options>\n");
|
||||||
|
printf(" -c | --output_c : Path to output static.c file (required)\n");
|
||||||
|
printf(" -r | --output_h : Path to header static.h file (required)\n");
|
||||||
|
printf(" -m | --mainboard_devtree : Path to mainboard devicetree file (required)\n");
|
||||||
|
printf(" -o | --override_devtree : Path to override devicetree file (optional)\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
enum {
|
|
||||||
DEVICEFILE_ARG = 1,
|
|
||||||
OUTPUTFILE_ARG,
|
|
||||||
HEADERFILE_ARG,
|
|
||||||
OVERRIDE_DEVICEFILE_ARG,
|
|
||||||
};
|
|
||||||
|
|
||||||
#define MANDATORY_ARG_COUNT 4
|
|
||||||
#define OPTIONAL_ARG_COUNT 1
|
|
||||||
#define TOTAL_ARG_COUNT (MANDATORY_ARG_COUNT + OPTIONAL_ARG_COUNT)
|
|
||||||
|
|
||||||
static void parse_devicetree(const char *file, struct bus *parent)
|
static void parse_devicetree(const char *file, struct bus *parent)
|
||||||
{
|
{
|
||||||
FILE *filec = fopen(file, "r");
|
FILE *filec = fopen(file, "r");
|
||||||
|
@ -1674,18 +1668,47 @@ static void override_devicetree(struct bus *base_parent,
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
if ((argc < MANDATORY_ARG_COUNT) || (argc > TOTAL_ARG_COUNT))
|
static const struct option long_options[] = {
|
||||||
usage();
|
{ "mainboard_devtree", 1, NULL, 'm' },
|
||||||
|
{ "override_devtree", 1, NULL, 'o' },
|
||||||
|
{ "output_c", 1, NULL, 'c' },
|
||||||
|
{ "output_h", 1, NULL, 'r' },
|
||||||
|
{ "help", 1, NULL, 'h' },
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
const char *override_devtree = NULL;
|
||||||
|
const char *base_devtree = NULL;
|
||||||
|
const char *outputc = NULL;
|
||||||
|
const char *outputh = NULL;
|
||||||
|
int opt, option_index;
|
||||||
|
|
||||||
const char *base_devtree = argv[DEVICEFILE_ARG];
|
while ((opt = getopt_long(argc, argv, "m:o:c:r:h", long_options,
|
||||||
const char *outputc = argv[OUTPUTFILE_ARG];
|
&option_index)) != EOF) {
|
||||||
const char *outputh = argv[HEADERFILE_ARG];
|
switch (opt) {
|
||||||
const char *override_devtree;
|
case 'm':
|
||||||
|
base_devtree = strdup(optarg);
|
||||||
|
break;
|
||||||
|
case 'o':
|
||||||
|
override_devtree = strdup(optarg);
|
||||||
|
break;
|
||||||
|
case 'c':
|
||||||
|
outputc = strdup(optarg);
|
||||||
|
break;
|
||||||
|
case 'r':
|
||||||
|
outputh = strdup(optarg);
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!base_devtree || !outputc || !outputh)
|
||||||
|
usage();
|
||||||
|
|
||||||
parse_devicetree(base_devtree, &base_root_bus);
|
parse_devicetree(base_devtree, &base_root_bus);
|
||||||
|
|
||||||
if (argc == TOTAL_ARG_COUNT) {
|
if (override_devtree) {
|
||||||
override_devtree = argv[OVERRIDE_DEVICEFILE_ARG];
|
|
||||||
parse_devicetree(override_devtree, &override_root_bus);
|
parse_devicetree(override_devtree, &override_root_bus);
|
||||||
|
|
||||||
if (!dev_has_children(&override_root_dev)) {
|
if (!dev_has_children(&override_root_dev)) {
|
||||||
|
|
Loading…
Reference in New Issue