diff options
author | Patrick Georgi <pgeorgi@google.com> | 2019-11-22 16:55:58 +0100 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2021-07-13 20:28:14 +0000 |
commit | 53ea1d44f0435ca419de04e275e08b1bd296922c (patch) | |
tree | c1a3a39c36e9b53d0129f0e24a9a032bfea066ca /util/kconfig/patches | |
parent | 8585eabc5d5b516f46b2980a40b25f49eef5e056 (diff) |
util/kconfig: Uprev to Linux 5.13's kconfig
This was originally several commits that had to be squashed into one
because the intermediate states weren't able to build coreboot:
- one to remove everything that wasn't our own code, leaving only
regex.[ch], toada.c, description.md and Makefile.inc.
- one to copy in Linux 5.13's scripts/kconfig and adapt Makefile.inc
to make the original Makefile work again.
- adapt abuild to use olddefconfig, simplifying matters.
- apply patches in util/kconfig/patches.
- Some more adaptations to the libpayload build system.
The patches are now in util/kconfig/patches/, reverse applying them
should lead to a util/kconfig/ tree that contains exactly the Linux
version + our own 5 files.
Change-Id: Ia0e8fe4e9022b278f34ab113a433ef4d45e5c355
Signed-off-by: Patrick Georgi <pgeorgi@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/37152
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Raul Rangel <rrangel@chromium.org>
Diffstat (limited to 'util/kconfig/patches')
13 files changed, 815 insertions, 0 deletions
diff --git a/util/kconfig/patches/0001-Kconfig-Add-KCONFIG_STRICT-mode.patch b/util/kconfig/patches/0001-Kconfig-Add-KCONFIG_STRICT-mode.patch new file mode 100644 index 0000000000..6c437344dc --- /dev/null +++ b/util/kconfig/patches/0001-Kconfig-Add-KCONFIG_STRICT-mode.patch @@ -0,0 +1,43 @@ +From c822f47921feb53b97f48f3aa8d1e843f5099c63 Mon Sep 17 00:00:00 2001 +From: Stefan Reinauer <stefan.reinauer@coreboot.org> +Date: Fri, 17 Jul 2015 17:26:48 -0700 +Subject: [PATCH] Kconfig: Add KCONFIG_STRICT mode + +This is basically a -Werror mode for Kconfig. When exporting +KCONFIG_STRICT in the Makefile, warnings in Kconfig will produce +errors instead. + +This will make it easier to spot unclean Kconfig files, settings +and dependencies. + +Signed-off-by: Stefan Reinauer <stefan.reinauer@coreboot.org> +--- + util/kconfig/confdata.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +Index: kconfig/confdata.c +=================================================================== +--- kconfig.orig/confdata.c ++++ kconfig/confdata.c +@@ -439,6 +439,7 @@ load: + if (def == S_DEF_USER) { + sym = sym_find(line + 2 + strlen(CONFIG_)); + if (!sym) { ++ conf_warning("trying to assign non-existent symbol %s", line + strlen(CONFIG_)); + conf_set_changed(true); + continue; + } +@@ -521,6 +522,13 @@ load: + } + free(line); + fclose(in); ++ ++ name = getenv("KCONFIG_STRICT"); ++ if (name && *name && conf_warnings) { ++ fprintf(stderr, "\nERROR: %d warnings encountered, and warnings are errors.\n\n", conf_warnings); ++ return 1; ++ } ++ + return 0; + } + diff --git a/util/kconfig/patches/0002-Kconfig-Change-symbol-override-from-warning-to-notic.patch b/util/kconfig/patches/0002-Kconfig-Change-symbol-override-from-warning-to-notic.patch new file mode 100644 index 0000000000..4ce52da64a --- /dev/null +++ b/util/kconfig/patches/0002-Kconfig-Change-symbol-override-from-warning-to-notic.patch @@ -0,0 +1,69 @@ +From 20df4491aa88eb4a7f97090fbc4ff53f81926861 Mon Sep 17 00:00:00 2001 +From: Martin Roth <martinroth@google.com> +Date: Wed, 21 Sep 2016 14:27:26 -0600 +Subject: [PATCH] Kconfig: Change symbol override from warning to notice + +Overriding symbols within a .config is pretty common when doing +automated builds with various different options. The warning +text makes it sound like this is an issue, so change it to say +'notice' instead. We could get rid of it completely, but it's +not a bad thing to know that we have two copies of the same symbol +in the .config. + +BUG=chrome-os-partner:54059 +TEST=copy a disabled kconfig option to the end and set it to y. +See notice text instead of warning. + +Signed-off-by: Martin Roth <martinroth@google.com> +--- + util/kconfig/confdata.c | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +Index: kconfig/confdata.c +=================================================================== +--- kconfig.orig/confdata.c ++++ kconfig/confdata.c +@@ -184,6 +184,16 @@ static void conf_warning(const char *fmt + conf_warnings++; + } + ++static void conf_notice(const char *fmt, ...) ++{ ++ va_list ap; ++ va_start(ap, fmt); ++ fprintf(stderr, "%s:%d:notice: ", conf_filename, conf_lineno); ++ vfprintf(stderr, fmt, ap); ++ fprintf(stderr, "\n"); ++ va_end(ap); ++} ++ + static void conf_default_message_callback(const char *s) + { + printf("#\n# "); +@@ -449,7 +459,7 @@ load: + sym->type = S_BOOLEAN; + } + if (sym->flags & def_flags) { +- conf_warning("override: reassigning to symbol %s", sym->name); ++ conf_notice("override: reassigning to symbol %s", sym->name); + } + switch (sym->type) { + case S_BOOLEAN: +@@ -488,7 +498,7 @@ load: + } + + if (sym->flags & def_flags) { +- conf_warning("override: reassigning to symbol %s", sym->name); ++ conf_notice("override: reassigning to symbol %s", sym->name); + } + if (conf_set_sym_val(sym, def, def_flags, p)) + continue; +@@ -513,7 +523,7 @@ load: + break; + case yes: + if (cs->def[def].tri != no) +- conf_warning("override: %s changes choice state", sym->name); ++ conf_notice("override: %s changes choice state", sym->name); + cs->def[def].val = sym; + break; + } diff --git a/util/kconfig/patches/0003-util-kconfig-conf.c-Fix-newline-in-error-printf.patch b/util/kconfig/patches/0003-util-kconfig-conf.c-Fix-newline-in-error-printf.patch new file mode 100644 index 0000000000..ea27fbddf3 --- /dev/null +++ b/util/kconfig/patches/0003-util-kconfig-conf.c-Fix-newline-in-error-printf.patch @@ -0,0 +1,25 @@ +From 887ae0ac3dc53fc73488a4dbc1fbf36fa620ce8b Mon Sep 17 00:00:00 2001 +From: Martin Roth <martinroth@google.com> +Date: Tue, 6 Dec 2016 14:28:44 -0700 +Subject: [PATCH] util/kconfig/conf.c: Fix newline in error printf + +For some reason the \n in the defconfig save error was not escaped. + +Signed-off-by: Martin Roth <martinroth@google.com> +--- + util/kconfig/conf.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: kconfig/conf.c +=================================================================== +--- kconfig.orig/conf.c ++++ kconfig/conf.c +@@ -900,7 +900,7 @@ int main(int ac, char **av) + + if (input_mode == savedefconfig) { + if (conf_write_defconfig(defconfig_file)) { +- fprintf(stderr, "n*** Error while saving defconfig to: %s\n\n", ++ fprintf(stderr, "\n*** Error while saving defconfig to: %s\n\n", + defconfig_file); + return 1; + } diff --git a/util/kconfig/patches/0004-src-util-Use-NULL-instead-of-0-for-pointer.patch b/util/kconfig/patches/0004-src-util-Use-NULL-instead-of-0-for-pointer.patch new file mode 100644 index 0000000000..f451b58282 --- /dev/null +++ b/util/kconfig/patches/0004-src-util-Use-NULL-instead-of-0-for-pointer.patch @@ -0,0 +1,46 @@ +From e8287a030fc8fcec7404aa6731aef21a48035786 Mon Sep 17 00:00:00 2001 +From: Elyes HAOUAS <ehaouas@noos.fr> +Date: Tue, 5 Jun 2018 08:41:29 +0200 +Subject: [PATCH] {src,util}: Use NULL instead of 0 for pointer + +Signed-off-by: Elyes HAOUAS <ehaouas@noos.fr> +--- + util/kconfig/lxdialog/util.c | 2 +- + util/kconfig/qconf.h | 8 ++++---- + 2 files changed, 5 insertions(+), 5 deletions(-) + +Index: kconfig/lxdialog/util.c +=================================================================== +--- kconfig.orig/lxdialog/util.c ++++ kconfig/lxdialog/util.c +@@ -370,7 +370,7 @@ void print_autowrap(WINDOW * win, const + { + int newl, cur_x, cur_y; + int prompt_len, room, wlen; +- char tempstr[MAX_LEN + 1], *word, *sp, *sp2, *newline_separator = 0; ++ char tempstr[MAX_LEN + 1], *word, *sp, *sp2, *newline_separator = NULL; + + strcpy(tempstr, prompt); + +Index: kconfig/qconf.h +=================================================================== +--- kconfig.orig/qconf.h ++++ kconfig/qconf.h +@@ -42,7 +42,7 @@ class ConfigList : public QTreeWidget { + Q_OBJECT + typedef class QTreeWidget Parent; + public: +- ConfigList(QWidget *parent, const char *name = 0); ++ ConfigList(QWidget *parent, const char *name = NULL); + ~ConfigList(); + void reinit(void); + ConfigItem* findConfigItem(struct menu *); +@@ -188,7 +188,7 @@ class ConfigInfoView : public QTextBrows + typedef class QTextBrowser Parent; + QMenu *contextMenu; + public: +- ConfigInfoView(QWidget* parent, const char *name = 0); ++ ConfigInfoView(QWidget* parent, const char *name = NULL); + bool showDebug(void) const { return _showDebug; } + + public slots: diff --git a/util/kconfig/patches/0005-util-kconfig-Ignore-extra-symbols-in-configs-instead.patch b/util/kconfig/patches/0005-util-kconfig-Ignore-extra-symbols-in-configs-instead.patch new file mode 100644 index 0000000000..8753522c9c --- /dev/null +++ b/util/kconfig/patches/0005-util-kconfig-Ignore-extra-symbols-in-configs-instead.patch @@ -0,0 +1,37 @@ +From 2796443d5a2194400e56e6762e0f748ed0f0470c Mon Sep 17 00:00:00 2001 +From: Martin Roth <martinroth@google.com> +Date: Wed, 10 Feb 2016 16:06:00 -0700 +Subject: [PATCH] util/kconfig: Ignore extra symbols in configs instead of + failing + +When updating an old .config file that has a symbol that has been +removed from the current Kconfig tree, kconfig will generate a warning +and fail to save the updated file. This is incredibly annoying, and +not the goal when trying to eliminate Kconfig warnings. + +Instead of generating a warning, just print a message that it's being +ignored. This will remove the offending symbol, while allowing the +updated config file to be saved. + +Split the change from 1 line to 3 lines to keep it at 80 characters. + +Signed-off-by: Martin Roth <martinroth@google.com> +--- + util/kconfig/confdata.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +Index: kconfig/confdata.c +=================================================================== +--- kconfig.orig/confdata.c ++++ kconfig/confdata.c +@@ -449,7 +449,9 @@ load: + if (def == S_DEF_USER) { + sym = sym_find(line + 2 + strlen(CONFIG_)); + if (!sym) { +- conf_warning("trying to assign non-existent symbol %s", line + strlen(CONFIG_)); ++ conf_message( ++ "ignoring nonexistent symbol %s", ++ line + 2 + strlen(CONFIG_)); + conf_set_changed(true); + continue; + } diff --git a/util/kconfig/patches/0006-util-kconfig-Set-parameter-of-mkdir-to-only-one-for-.patch b/util/kconfig/patches/0006-util-kconfig-Set-parameter-of-mkdir-to-only-one-for-.patch new file mode 100644 index 0000000000..d6598ac5ce --- /dev/null +++ b/util/kconfig/patches/0006-util-kconfig-Set-parameter-of-mkdir-to-only-one-for-.patch @@ -0,0 +1,28 @@ +From d470f1069744c3e6ef2e928217c1a4a23a87efa2 Mon Sep 17 00:00:00 2001 +From: zbao <fishbaozi@gmail.com> +Date: Sat, 26 Sep 2015 06:20:53 -0400 +Subject: [PATCH] util/kconfig: Set parameter of mkdir to only one for mingw. + +The second parameter is to set file permissions for the directory, which +is not needed in mingw. + +Signed-off-by: Zheng Bao <fishbaozi@gmail.com> +--- + util/kconfig/confdata.c | 4 ++++ + 1 file changed, 4 insertions(+) + +Index: kconfig/confdata.c +=================================================================== +--- kconfig.orig/confdata.c ++++ kconfig/confdata.c +@@ -164,6 +164,10 @@ struct conf_printer { + void (*print_comment)(FILE *, const char *, void *); + }; + ++#ifdef __MINGW32__ ++#define mkdir(_n,_p) mkdir((_n)) ++#endif ++ + static void conf_warning(const char *fmt, ...) + __attribute__ ((format (printf, 1, 2))); + diff --git a/util/kconfig/patches/0007-kconfig-Allow-KCONFIG_STRICT-outside-of-confdata.c.patch b/util/kconfig/patches/0007-kconfig-Allow-KCONFIG_STRICT-outside-of-confdata.c.patch new file mode 100644 index 0000000000..1af5e0112b --- /dev/null +++ b/util/kconfig/patches/0007-kconfig-Allow-KCONFIG_STRICT-outside-of-confdata.c.patch @@ -0,0 +1,189 @@ +From af6c23be63d14860c8c1f0d9fcbc020f7c11d84d Mon Sep 17 00:00:00 2001 +From: Stefan Reinauer <reinauer@chromium.org> +Date: Thu, 20 Aug 2015 11:19:34 -0700 +Subject: [PATCH] kconfig: Allow KCONFIG_STRICT outside of confdata.c + +To catch dependency errors in symbol.c (such as the ones +fixed by I51b4ee326f082c6a656a813ee5772e9c34f5c343) we need +to check for global kconfig warnings before saving config +files. + +This patch will produce errors for wrong dependencies and +add catching of errors to conf, nconf and mconf. Sorry, +gconf users, you will have to wait. + +Signed-off-by: Stefan Reinauer <stefan.reinauer@coreboot.org> +--- + util/kconfig/conf.c | 10 ++++++++++ + util/kconfig/confdata.c | 6 +----- + util/kconfig/lkc.h | 3 +++ + util/kconfig/mconf.c | 10 ++++++++++ + util/kconfig/nconf.c | 13 +++++++++++++ + util/kconfig/qconf.cc | 2 ++ + util/kconfig/symbol.c | 1 + + 7 files changed, 40 insertions(+), 5 deletions(-) + +Index: kconfig/conf.c +=================================================================== +--- kconfig.orig/conf.c ++++ kconfig/conf.c +@@ -16,6 +16,8 @@ + + #include "lkc.h" + ++int kconfig_warnings = 0; ++ + static void conf(struct menu *menu); + static void check_conf(struct menu *menu); + +@@ -732,6 +734,7 @@ int main(int ac, char **av) + const char *progname = av[0]; + int opt; + const char *name, *defconfig_file = NULL /* gcc uninit */; ++ char *env; + int no_conf_write = 0; + + tty_stdio = isatty(0) && isatty(1); +@@ -838,6 +841,13 @@ int main(int ac, char **av) + break; + } + ++ env = getenv("KCONFIG_STRICT"); ++ if (env && *env && kconfig_warnings) { ++ fprintf(stderr, "\n*** ERROR: %d warnings encountered, and " ++ "warnings are errors.\n\n", kconfig_warnings); ++ exit(1); ++ } ++ + if (sync_kconfig) { + name = getenv("KCONFIG_NOSILENTUPDATE"); + if (name && *name) { +Index: kconfig/confdata.c +=================================================================== +--- kconfig.orig/confdata.c ++++ kconfig/confdata.c +@@ -539,11 +539,7 @@ load: + free(line); + fclose(in); + +- name = getenv("KCONFIG_STRICT"); +- if (name && *name && conf_warnings) { +- fprintf(stderr, "\nERROR: %d warnings encountered, and warnings are errors.\n\n", conf_warnings); +- return 1; +- } ++ kconfig_warnings += conf_warnings; + + return 0; + } +Index: kconfig/lkc.h +=================================================================== +--- kconfig.orig/lkc.h ++++ kconfig/lkc.h +@@ -39,6 +39,9 @@ void zconf_nextfile(const char *name); + int zconf_lineno(void); + const char *zconf_curname(void); + ++/* conf.c */ ++extern int kconfig_warnings; ++ + /* confdata.c */ + const char *conf_get_configname(void); + void set_all_choice_values(struct symbol *csym); +Index: kconfig/mconf.c +=================================================================== +--- kconfig.orig/mconf.c ++++ kconfig/mconf.c +@@ -24,6 +24,8 @@ + + #define JUMP_NB 9 + ++int kconfig_warnings = 0; ++ + static const char mconf_readme[] = + "Overview\n" + "--------\n" +@@ -948,6 +950,7 @@ static void conf_save(void) + static int handle_exit(void) + { + int res; ++ char *env; + + save_and_exit = 1; + reset_subtitle(); +@@ -962,6 +965,13 @@ static int handle_exit(void) + + end_dialog(saved_x, saved_y); + ++ env = getenv("KCONFIG_STRICT"); ++ if (env && *env && kconfig_warnings) { ++ fprintf(stderr, "\n*** ERROR: %d warnings encountered, and " ++ "warnings are errors.\n\n", kconfig_warnings); ++ res = 2; ++ } ++ + switch (res) { + case 0: + if (conf_write(filename)) { +Index: kconfig/nconf.c +=================================================================== +--- kconfig.orig/nconf.c ++++ kconfig/nconf.c +@@ -15,6 +15,8 @@ + #include "nconf.h" + #include <ctype.h> + ++int kconfig_warnings = 0; ++ + static const char nconf_global_help[] = + "Help windows\n" + "------------\n" +@@ -645,6 +647,8 @@ static void set_config_filename(const ch + static int do_exit(void) + { + int res; ++ char *env; ++ + if (!conf_get_changed()) { + global_exit = 1; + return 0; +@@ -660,6 +664,15 @@ static int do_exit(void) + return -1; + } + ++ env = getenv("KCONFIG_STRICT"); ++ if (env && *env && kconfig_warnings) { ++ btn_dialog(main_window, ++ "\nWarnings encountered, and warnings are errors.\n\n", ++ 1, ++ "<OK>"); ++ res = 2; ++ } ++ + /* if we got here, the user really wants to exit */ + switch (res) { + case 0: +Index: kconfig/qconf.cc +=================================================================== +--- kconfig.orig/qconf.cc ++++ kconfig/qconf.cc +@@ -26,6 +26,8 @@ + #include "images.h" + + ++int kconfig_warnings = 0; ++ + static QApplication *configApp; + static ConfigSettings *configSettings; + +Index: kconfig/symbol.c +=================================================================== +--- kconfig.orig/symbol.c ++++ kconfig/symbol.c +@@ -319,6 +319,7 @@ static void sym_warn_unmet_dep(struct sy + " Selected by [m]:\n"); + + fputs(str_get(&gs), stderr); ++ kconfig_warnings++; + } + + void sym_calc_value(struct symbol *sym) diff --git a/util/kconfig/patches/0008-kconfig-Add-wildcard-support-for-source.patch b/util/kconfig/patches/0008-kconfig-Add-wildcard-support-for-source.patch new file mode 100644 index 0000000000..abd6574879 --- /dev/null +++ b/util/kconfig/patches/0008-kconfig-Add-wildcard-support-for-source.patch @@ -0,0 +1,94 @@ +From 5e2355bf017b3347b29126a0eeb866558334f704 Mon Sep 17 00:00:00 2001 +From: Stefan Reinauer <stefan.reinauer@coreboot.org> +Date: Fri, 3 Apr 2015 20:01:38 +0200 +Subject: [PATCH] kconfig: Add wildcard support for "source" + +Kconfig's include directive "source" does not support +wildcards (e.g. source src/mainboard/*/Kconfig) which +makes automatic inclusion of all boards a tedious task +and prevents us from implementing "drop in" boards. + +In our Makefile.inc files we already include mainboard +directories per wildcard, so let's add the infrastructure +to do the same with Kconfig. + +v2: change from wordexp to glob for better portability. + +Signed-off-by: Stefan Reinauer <stefan.reinauer@coreboot.org> +Signed-off-by: Patrick Georgi <pgeorgi@google.com> +--- + util/kconfig/lexer.l | 27 +++++++++++++++++++++++++++ + util/kconfig/lkc.h | 1 + + util/kconfig/parser.y | 2 +- + 3 files changed, 29 insertions(+), 1 deletion(-) + +Index: kconfig/lexer.l +=================================================================== +--- kconfig.orig/lexer.l ++++ kconfig/lexer.l +@@ -8,6 +8,7 @@ + %{ + + #include <assert.h> ++#include <glob.h> + #include <limits.h> + #include <stdio.h> + #include <stdlib.h> +@@ -438,6 +439,32 @@ void zconf_nextfile(const char *name) + current_file = file; + } + ++void zconf_nextfiles(const char *wildcard) ++{ ++ glob_t g; ++ char **w; ++ int i; ++ ++ if (glob(wildcard, 0, NULL, &g) != 0) { ++ return; ++ } ++ if (g.gl_pathv == NULL) { ++ globfree(&g); ++ return; ++ } ++ ++ /* working through files backwards, since ++ * we're first pushing them on a stack ++ * before actually handling them. ++ */ ++ for (i = g.gl_pathc; i > 0; i--) { ++ w = &g.gl_pathv[i - 1]; ++ zconf_nextfile(*w); ++ } ++ ++ globfree(&g); ++} ++ + static void zconf_endfile(void) + { + struct buffer *parent; +Index: kconfig/lkc.h +=================================================================== +--- kconfig.orig/lkc.h ++++ kconfig/lkc.h +@@ -36,6 +36,7 @@ void zconf_starthelp(void); + FILE *zconf_fopen(const char *name); + void zconf_initscan(const char *name); + void zconf_nextfile(const char *name); ++void zconf_nextfiles(const char *name); + int zconf_lineno(void); + const char *zconf_curname(void); + +Index: kconfig/parser.y +=================================================================== +--- kconfig.orig/parser.y ++++ kconfig/parser.y +@@ -358,7 +358,7 @@ menu_option_list: + source_stmt: T_SOURCE T_WORD_QUOTE T_EOL + { + printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), $2); +- zconf_nextfile($2); ++ zconf_nextfiles($2); + free($2); + }; + diff --git a/util/kconfig/patches/0009-util-kconfig-Allow-emitting-false-booleans-into-kconfig-output.patch b/util/kconfig/patches/0009-util-kconfig-Allow-emitting-false-booleans-into-kconfig-output.patch new file mode 100644 index 0000000000..7e005e5f9d --- /dev/null +++ b/util/kconfig/patches/0009-util-kconfig-Allow-emitting-false-booleans-into-kconfig-output.patch @@ -0,0 +1,93 @@ +commit ab0cc6067d5a00182e89fbec82b942eb3d803204 +Author: Patrick Georgi <pgeorgi@google.com> +Date: Fri Nov 22 22:08:15 2019 +0100 + + util/kconfig: Allow emitting false booleans into kconfig output + + This is controlled by an environment variable so the same tool is + useful in different contexts. + + Change-Id: I9e62b05e45709f1539e455e2eed37308609be15e + Signed-off-by: Patrick Georgi <pgeorgi@google.com> + +Index: kconfig/confdata.c +=================================================================== +--- kconfig.orig/confdata.c ++++ kconfig/confdata.c +@@ -687,6 +687,9 @@ header_print_symbol(FILE *fp, struct sym + + switch (*value) { + case 'n': ++ if (getenv("KCONFIG_NEGATIVES") != NULL) ++ fprintf(fp, "#define %s%s%s 0\n", ++ CONFIG_, sym->name, suffix); + break; + case 'm': + suffix = "_MODULE"; +@@ -702,14 +705,28 @@ header_print_symbol(FILE *fp, struct sym + + if (value[0] != '0' || (value[1] != 'x' && value[1] != 'X')) + prefix = "0x"; ++ if (value[0] == '\0') { ++ /* ++ * prefix is reset to remain closer to the older ++ * coreboot patch. No need to keep this once kconfig ++ * is fully upreved ++ */ ++ prefix = ""; ++ value = "0"; ++ } + fprintf(fp, "#define %s%s %s%s\n", + CONFIG_, sym->name, prefix, value); + break; + } + case S_STRING: ++ if (value[0] == '\0') ++ break; ++ if (!(sym->flags & SYMBOL_WRITE)) ++ break; ++ /* fall through */ + case S_INT: + fprintf(fp, "#define %s%s %s\n", +- CONFIG_, sym->name, value); ++ CONFIG_, sym->name, value[0]?value:"0"); + break; + default: + break; +@@ -1080,6 +1097,7 @@ int conf_write_autoconf(int overwrite) + const char *autoconf_name = conf_get_autoconfig_name(); + FILE *out, *out_h; + int i; ++ int print_negatives = getenv("KCONFIG_NEGATIVES") != NULL; + + if (!overwrite && is_present(autoconf_name)) + return 0; +@@ -1104,11 +1122,13 @@ int conf_write_autoconf(int overwrite) + + for_all_symbols(i, sym) { + sym_calc_value(sym); +- if (!(sym->flags & SYMBOL_WRITE) || !sym->name) ++ if (!(sym->flags & SYMBOL_WRITE) && !print_negatives) ++ continue; ++ if (!sym->name) + continue; + + /* write symbols to auto.conf and autoconf.h */ +- conf_write_symbol(out, sym, &kconfig_printer_cb, (void *)1); ++ conf_write_symbol(out, sym, &kconfig_printer_cb, print_negatives?NULL:(void *)1); + conf_write_symbol(out_h, sym, &header_printer_cb, NULL); + } + fclose(out); +Index: kconfig/symbol.c +=================================================================== +--- kconfig.orig/symbol.c ++++ kconfig/symbol.c +@@ -757,7 +757,7 @@ const char *sym_get_string_default(struc + } + case S_INT: + case S_HEX: +- return str; ++ return "0"; + case S_STRING: + return str; + case S_UNKNOWN: diff --git a/util/kconfig/patches/0010-reenable-source-in-choice.patch b/util/kconfig/patches/0010-reenable-source-in-choice.patch new file mode 100644 index 0000000000..65a338c9cc --- /dev/null +++ b/util/kconfig/patches/0010-reenable-source-in-choice.patch @@ -0,0 +1,16 @@ +Kconfig 5.8 (since commit 09d5873e4d1f70202314b5fe40160f9b14b9d2d0) +blocks using the source statement within choice but that's a pattern we +use intensively. Re-enable it. + +Index: kconfig/parser.y +=================================================================== +--- kconfig.orig/parser.y ++++ kconfig/parser.y +@@ -134,6 +134,7 @@ stmt_list_in_choice: + | stmt_list_in_choice comment_stmt + | stmt_list_in_choice config_stmt + | stmt_list_in_choice if_stmt_in_choice ++ | stmt_list_in_choice source_stmt + | stmt_list_in_choice error T_EOL { zconf_error("invalid statement"); } + ; + diff --git a/util/kconfig/patches/0011-remove-include-config-hardcodes.patch b/util/kconfig/patches/0011-remove-include-config-hardcodes.patch new file mode 100644 index 0000000000..fa21dac4b4 --- /dev/null +++ b/util/kconfig/patches/0011-remove-include-config-hardcodes.patch @@ -0,0 +1,39 @@ +Index: kconfig/confdata.c +=================================================================== +--- kconfig.orig/confdata.c ++++ kconfig/confdata.c +@@ -241,6 +241,13 @@ static const char *conf_get_autoconfig_n + return name ? name : "include/config/auto.conf"; + } + ++static const char *conf_get_autobase_name(void) ++{ ++ char *name = getenv("KCONFIG_SPLITCONFIG"); ++ ++ return name ? name : "include/config/"; ++} ++ + static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p) + { + char *p2; +@@ -1024,7 +1031,7 @@ static int conf_touch_deps(void) + struct symbol *sym; + int res, i; + +- strcpy(depfile_path, "include/config/"); ++ strcpy(depfile_path, conf_get_autobase_name()); + depfile_prefix_len = strlen(depfile_path); + + name = conf_get_autoconfig_name(); +@@ -1102,7 +1109,10 @@ int conf_write_autoconf(int overwrite) + if (!overwrite && is_present(autoconf_name)) + return 0; + +- conf_write_dep("include/config/auto.conf.cmd"); ++ char autoconfcmd_path[PATH_MAX]; ++ snprintf(autoconfcmd_path, sizeof(autoconfcmd_path), "%s%s", ++ conf_get_autobase_name(), "auto.conf.cmd"); ++ conf_write_dep(autoconfcmd_path); + + if (conf_touch_deps()) + return 1; diff --git a/util/kconfig/patches/0012-safer-tmpfiles.patch b/util/kconfig/patches/0012-safer-tmpfiles.patch new file mode 100644 index 0000000000..d9b8361812 --- /dev/null +++ b/util/kconfig/patches/0012-safer-tmpfiles.patch @@ -0,0 +1,124 @@ +commit 7b2deddbb0ef350e189fe42c025b07c943aedc4c +Author: Raul E Rangel <rrangel@chromium.org> +Date: Thu Jul 25 15:49:52 2019 -0600 + + Kconfig: Write tmp files into same directory as target files + + This removes the need for COREBOOT_BUILD_DIR in Kconfig. Since the + original files will be replaced with the tmp file, the parent directory + already needs to be writable. + + Before this change, the tmp files would be created in the CWD (src) if + COREBOOT_BUILD_DIR was not specified. + + BUG=b:112267918 + TEST=emerge-grunt coreboot and verified no tmp files were created in the + src directory. + + Change-Id: Icdaf2ff3dd1ec98813b75ef55b96e38e1ca19ec7 + Signed-off-by: Raul E Rangel <rrangel@chromium.org> + Reviewed-on: https://review.coreboot.org/c/coreboot/+/34244 + Reviewed-by: Martin Roth <martinroth@google.com> + Tested-by: build bot (Jenkins) <no-reply@coreboot.org> + +Index: kconfig/confdata.c +=================================================================== +--- kconfig.orig/confdata.c ++++ kconfig/confdata.c +@@ -880,6 +880,16 @@ next_menu: + return 0; + } + ++ ++static int conf_mktemp(const char *path, char *tmpfile) ++{ ++ if (snprintf(tmpfile, PATH_MAX, "%s.tmp.XXXXXX", path) >= PATH_MAX) { ++ errno = EOVERFLOW; ++ return -1; ++ } ++ return mkstemp(tmpfile); ++} ++ + int conf_write(const char *name) + { + FILE *out; +@@ -1001,7 +1011,14 @@ static int conf_write_dep(const char *na + struct file *file; + FILE *out; + +- out = fopen("..config.tmp", "w"); ++ if (make_parent_dir(name)) ++ return 1; ++ char filename[PATH_MAX]; ++ int fd = conf_mktemp(name, filename); ++ if (fd == -1) ++ return 1; ++ ++ out = fdopen(fd, "w"); + if (!out) + return 1; + fprintf(out, "deps_config := \\\n"); +@@ -1019,9 +1036,7 @@ static int conf_write_dep(const char *na + fprintf(out, "\n$(deps_config): ;\n"); + fclose(out); + +- if (make_parent_dir(name)) +- return 1; +- rename("..config.tmp", name); ++ rename(filename, name); + return 0; + } + +@@ -1117,11 +1132,26 @@ int conf_write_autoconf(int overwrite) + if (conf_touch_deps()) + return 1; + +- out = fopen(".tmpconfig", "w"); ++ if (make_parent_dir(autoconf_name)) ++ return 1; ++ char filename[PATH_MAX]; ++ int fd = conf_mktemp(autoconf_name, filename); ++ if (fd == -1) ++ return 1; ++ out = fdopen(fd, "w"); + if (!out) + return 1; + +- out_h = fopen(".tmpconfig.h", "w"); ++ name = getenv("KCONFIG_AUTOHEADER"); ++ if (!name) ++ name = "include/generated/autoconf.h"; ++ if (make_parent_dir(name)) ++ return 1; ++ char filename_h[PATH_MAX]; ++ int fd_h = conf_mktemp(name, filename_h); ++ if (fd_h == -1) ++ return 1; ++ out_h = fdopen(fd_h, "w"); + if (!out_h) { + fclose(out); + return 1; +@@ -1144,21 +1174,14 @@ int conf_write_autoconf(int overwrite) + fclose(out); + fclose(out_h); + +- name = getenv("KCONFIG_AUTOHEADER"); +- if (!name) +- name = "include/generated/autoconf.h"; +- if (make_parent_dir(name)) +- return 1; +- if (rename(".tmpconfig.h", name)) ++ if (rename(filename_h, name)) + return 1; + +- if (make_parent_dir(autoconf_name)) +- return 1; + /* + * This must be the last step, kbuild has a dependency on auto.conf + * and this marks the successful completion of the previous steps. + */ +- if (rename(".tmpconfig", autoconf_name)) ++ if (rename(filename, autoconf_name)) + return 1; + + return 0; diff --git a/util/kconfig/patches/series b/util/kconfig/patches/series new file mode 100644 index 0000000000..8497f16728 --- /dev/null +++ b/util/kconfig/patches/series @@ -0,0 +1,12 @@ +0001-Kconfig-Add-KCONFIG_STRICT-mode.patch +0002-Kconfig-Change-symbol-override-from-warning-to-notic.patch +0003-util-kconfig-conf.c-Fix-newline-in-error-printf.patch +0004-src-util-Use-NULL-instead-of-0-for-pointer.patch +0005-util-kconfig-Ignore-extra-symbols-in-configs-instead.patch +0006-util-kconfig-Set-parameter-of-mkdir-to-only-one-for-.patch +0007-kconfig-Allow-KCONFIG_STRICT-outside-of-confdata.c.patch +0008-kconfig-Add-wildcard-support-for-source.patch +0009-util-kconfig-Allow-emitting-false-booleans-into-kconfig-output.patch +0010-reenable-source-in-choice.patch +0011-remove-include-config-hardcodes.patch +0012-safer-tmpfiles.patch |