mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-21 02:49:14 +07:00
104daea149
To get access to environment variables, Kconfig needs to define a symbol using "option env=" syntax. It is tedious to add a symbol entry for each environment variable given that we need to define much more such as 'CC', 'AS', 'srctree' etc. to evaluate the compiler capability in Kconfig. Adding '$' for symbol references is grammatically inconsistent. Looking at the code, the symbols prefixed with 'S' are expanded by: - conf_expand_value() This is used to expand 'arch/$ARCH/defconfig' and 'defconfig_list' - sym_expand_string_value() This is used to expand strings in 'source' and 'mainmenu' All of them are fixed values independent of user configuration. So, they can be changed into the direct expansion instead of symbols. This change makes the code much cleaner. The bounce symbols 'SRCARCH', 'ARCH', 'SUBARCH', 'KERNELVERSION' are gone. sym_init() hard-coding 'UNAME_RELEASE' is also gone. 'UNAME_RELEASE' should be replaced with an environment variable. ARCH_DEFCONFIG is a normal symbol, so it should be simply referenced without '$' prefix. The new syntax is addicted by Make. The variable reference needs parentheses, like $(FOO), but you can omit them for single-letter variables, like $F. Yet, in Makefiles, people tend to use the parenthetical form for consistency / clarification. At this moment, only the environment variable is supported, but I will extend the concept of 'variable' later on. The variables are expanded in the lexer so we can simplify the token handling on the parser side. For example, the following code works. [Example code] config MY_TOOLCHAIN_LIST string default "My tools: CC=$(CC), AS=$(AS), CPP=$(CPP)" [Result] $ make -s alldefconfig && tail -n 1 .config CONFIG_MY_TOOLCHAIN_LIST="My tools: CC=gcc, AS=as, CPP=gcc -E" Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: Kees Cook <keescook@chromium.org>
60 lines
2.3 KiB
C
60 lines
2.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#include <stdarg.h>
|
|
|
|
/* confdata.c */
|
|
void conf_parse(const char *name);
|
|
int conf_read(const char *name);
|
|
int conf_read_simple(const char *name, int);
|
|
int conf_write_defconfig(const char *name);
|
|
int conf_write(const char *name);
|
|
int conf_write_autoconf(void);
|
|
bool conf_get_changed(void);
|
|
void conf_set_changed_callback(void (*fn)(void));
|
|
void conf_set_message_callback(void (*fn)(const char *fmt, va_list ap));
|
|
|
|
/* menu.c */
|
|
extern struct menu rootmenu;
|
|
|
|
bool menu_is_empty(struct menu *menu);
|
|
bool menu_is_visible(struct menu *menu);
|
|
bool menu_has_prompt(struct menu *menu);
|
|
const char * menu_get_prompt(struct menu *menu);
|
|
struct menu * menu_get_root_menu(struct menu *menu);
|
|
struct menu * menu_get_parent_menu(struct menu *menu);
|
|
bool menu_has_help(struct menu *menu);
|
|
const char * menu_get_help(struct menu *menu);
|
|
struct gstr get_relations_str(struct symbol **sym_arr, struct list_head *head);
|
|
void menu_get_ext_help(struct menu *menu, struct gstr *help);
|
|
|
|
/* symbol.c */
|
|
extern struct symbol * symbol_hash[SYMBOL_HASHSIZE];
|
|
|
|
struct symbol * sym_lookup(const char *name, int flags);
|
|
struct symbol * sym_find(const char *name);
|
|
char *sym_expand_string_value(const char *in);
|
|
const char * sym_escape_string_value(const char *in);
|
|
struct symbol ** sym_re_search(const char *pattern);
|
|
const char * sym_type_name(enum symbol_type type);
|
|
void sym_calc_value(struct symbol *sym);
|
|
enum symbol_type sym_get_type(struct symbol *sym);
|
|
bool sym_tristate_within_range(struct symbol *sym,tristate tri);
|
|
bool sym_set_tristate_value(struct symbol *sym,tristate tri);
|
|
tristate sym_toggle_tristate_value(struct symbol *sym);
|
|
bool sym_string_valid(struct symbol *sym, const char *newval);
|
|
bool sym_string_within_range(struct symbol *sym, const char *str);
|
|
bool sym_set_string_value(struct symbol *sym, const char *newval);
|
|
bool sym_is_changable(struct symbol *sym);
|
|
struct property * sym_get_choice_prop(struct symbol *sym);
|
|
const char * sym_get_string_value(struct symbol *sym);
|
|
|
|
const char * prop_get_type_name(enum prop_type type);
|
|
|
|
/* preprocess.c */
|
|
void env_write_dep(FILE *f, const char *auto_conf_name);
|
|
char *expand_string(const char *in);
|
|
char *expand_dollar(const char **str);
|
|
char *expand_one_token(const char **str);
|
|
|
|
/* expr.c */
|
|
void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int prevtoken);
|