]> rtime.felk.cvut.cz Git - linux-conf-perf.git/commitdiff
Simplify execution of allconfig
authorMichal Sojka <sojkam1@fel.cvut.cz>
Sat, 17 Oct 2015 11:07:38 +0000 (13:07 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Sat, 17 Oct 2015 11:07:38 +0000 (13:07 +0200)
The same will be done for other Kconfig-based tools

Makefile
scripts/allconfig/allconfig.c
scripts/shared/kconfig/files.mk
scripts/shared/kconfig/lcp_utils.c [new file with mode: 0644]
scripts/shared/kconfig/lcp_utils.h [new file with mode: 0644]

index 04f04c79f91724a436c6dfd31bc0f65a3e14c215..8b3902b07333cbd59159df0ac5ef4ba78da6e421 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -39,13 +39,8 @@ deflinux:
 
 HELP+="dot_config  - Generate dot_config file. This file is based on default Linux\n"
 HELP+="              configuration.\n"
-dot_config: scripts/allconfig/allconfig
-       cd $(CONF_LINUX_SOURCES) && \
-               SRCARCH=$(CONF_KERNEL_ARCH) \
-               ARCH=$(CONF_KERNEL_ARCH) \
-               KERNELVERSION=$(CONF_KERNEL_ARCH) \
-               $(CONF_ABSROOT)/scripts/allconfig/allconfig \
-               Kconfig .config $(CONF_ABSROOT)/$(CONF_DOT_CONFIG)
+$(CONF_DOT_CONFIG): .conf.mk scripts/allconfig/allconfig $(CONF_LINUX_BUILD_FOLDER)/.config
+       scripts/allconfig/allconfig --env .conf.mk $(CONF_LINUX_SOURCES)/Kconfig $(CONF_LINUX_BUILD_FOLDER)/.config $@
 
 HELP+="initialize  - Executes only initialization.\n"
 .PHONY: initialize init
index 0b346ceb366c562a829a3628e6b2121c2e1b0f8b..062ee3a151d3c39ac6e1faebf4a6369dd2286f4d 100644 (file)
@@ -8,6 +8,7 @@
 #include <build_files.h>
 #include <macros.h>
 #include "inv.h"
+#include <kconfig/lcp_utils.h>
 
 int verbose_level;
 bool full_config, inv_config;
@@ -32,7 +33,14 @@ int main(int argc, char **argv) {
             full_config = true;
         } else if (!strcmp(argv[i], "--inv")) {
             inv_config = true;
-        } else if (kconfig_file == NULL) {
+        } else if (!strcmp(argv[i], "--env")) {
+           if (++i < argc)
+               set_missing_env(argv[i]);
+           else {
+               print_help();
+               exit(1);
+           }
+       } else if (kconfig_file == NULL) {
             kconfig_file = argv[i];
         } else if (input_config_file == NULL) {
             input_config_file = argv[i];
@@ -55,7 +63,7 @@ int main(int argc, char **argv) {
     bindtextdomain(PACKAGE, LOCALEDIR);
     textdomain(PACKAGE);
 
-    conf_parse(kconfig_file);
+    conf_parse_path(kconfig_file);
     conf_read(input_config_file);
 
     if (inv_config) {
@@ -114,4 +122,5 @@ void print_help() {
     printf("                configuration options");
     printf
         ("  --inv         Generate configuration of missing configratuon options.\n");
+    printf("  --env <file>  Read needed environment variables from .conf.mk.\n");
 }
index e51146a600e6822d0a471315a912627988682236..6ed5b7c38e945666c9e50c2c8a332c9dea216db3 100644 (file)
@@ -3,11 +3,11 @@
 .PHONY: clean
 
 ifndef KCONFIG_PREFIX
-       $(error "Please specify variable KCONFIG_SRC in your makefile before importing kconfig files.mk")
+       $(error "Please specify variable KCONFIG_PREFIX in your Makefile before including kconfig's files.mk")
 endif
 
-KCONFIG_SRC = $(KCONFIG_PREFIX)/zconf.tab.c
-KCONFIG_OBJ = $(KCONFIG_PREFIX)/zconf.tab.o
+KCONFIG_SRC = $(addprefix $(KCONFIG_PREFIX)/,zconf.tab.c lcp_utils.c)
+KCONFIG_OBJ = $(KCONFIG_SRC:%.c=%.o)
 
 KCONFIG_CFLAGS = -O3
 
diff --git a/scripts/shared/kconfig/lcp_utils.c b/scripts/shared/kconfig/lcp_utils.c
new file mode 100644 (file)
index 0000000..190c946
--- /dev/null
@@ -0,0 +1,46 @@
+#define _GNU_SOURCE
+#include "lcp_utils.h"
+#include <libgen.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include "lkc.h"
+
+void conf_parse_path(const char *name)
+{
+       char *d = strdup(name);
+       char *f = strdup(name);
+       char *olddir = get_current_dir_name();
+
+       chdir(dirname(d));
+       conf_parse(basename(f));
+
+       free(olddir);
+       free(d);
+       free(f);
+}
+
+void set_missing_env(const char *conf_mk)
+{
+       FILE *f = fopen(conf_mk, "r");
+       char line[1000];
+
+       if (!f) {
+               perror(conf_mk);
+               exit(1);
+       }
+
+
+       while (fgets(line, sizeof(line), f)) {
+               char *p = line;
+               char *var = strsep(&p, " :=");
+
+               if (strcmp(var, "CONF_KERNEL_ARCH") == 0) {
+                       p += strspn(p, " :=");
+                       var = strsep(&p, "\n");
+                       setenv("ARCH", var, /*overwrite*/0);
+                       setenv("SRCARCH", var, /*overwrite*/0);
+               }
+       }
+       setenv("KERNELVERSION", "N/A", /*overwrite*/0);
+}
diff --git a/scripts/shared/kconfig/lcp_utils.h b/scripts/shared/kconfig/lcp_utils.h
new file mode 100644 (file)
index 0000000..0b9f71d
--- /dev/null
@@ -0,0 +1,7 @@
+#ifndef LCP_UTILS_H
+#define LCP_UTILS_H
+
+void conf_parse_path(const char *name);
+void set_missing_env(const char *conf_mk);
+
+#endif