[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH v2 3/5] build: Integrate fixdep in Unikraft build system
Now the tool will be called for every compiled file, modifying the dependency file. It does 2 things: 1) removes _config.h so no full rebuilds anymore if configuration is changed 2) scans the source file for CONFIG_, and adds dependency to corresponding depinclude file Signed-off-by: Yuri Volchkov <yuri.volchkov@xxxxxxxxx> --- Makefile | 9 +++++++-- support/build/Makefile.rules | 22 +++++++++++++++------- support/kconfig/Makefile | 2 ++ support/kconfig/fixdep.c | 21 +++++++++++++-------- 4 files changed, 37 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index 974b183..f6c8dee 100644 --- a/Makefile +++ b/Makefile @@ -116,6 +116,7 @@ UK_CONFIG := $(CONFIG_DIR)/.config UK_CONFIG_OUT := $(BUILD_DIR)/config UK_GENERATED_INCLUDES := $(BUILD_DIR)/include KCONFIG_DIR := $(BUILD_DIR)/kconfig +UK_FIXDEP := $(KCONFIG_DIR)/fixdep KCONFIG_AUTOCONFIG := $(KCONFIG_DIR)/auto.conf KCONFIG_TRISTATE := $(KCONFIG_DIR)/tristate.config KCONFIG_AUTOHEADER := $(UK_GENERATED_INCLUDES)/uk/_config.h @@ -478,7 +479,8 @@ $(UK_CONFIG_OUT): $(UK_CONFIG) $(UK_CONFIG) \ $(UK_CONFIG_OUT)) -prepare: $(KCONFIG_AUTOHEADER) $(UK_CONFIG_OUT) $(UK_PREPARE) $(UK_PREPARE-y) | fetch +prepare: $(KCONFIG_AUTOHEADER) $(UK_CONFIG_OUT) $(UK_PREPARE) $(UK_PREPARE-y) +prepare: $(UK_FIXDEP) | fetch objs: $(UK_OBJS) $(UK_OBJS-y) @@ -562,7 +564,10 @@ $(KCONFIG_ELIB_IN).new: # enforce execution .PHONY: $(KCONFIG_APP_IN).new $(KCONFIG_ELIB_IN).new -$(KCONFIG_DIR)/%onf: +KCONFIG_TOOLS = conf mconf gconf nconf fixdep +KCONFIG_TOOLS := $(addprefix $(KCONFIG_DIR)/,$(KCONFIG_TOOLS)) + +$(KCONFIG_TOOLS): mkdir -p $(@D)/lxdialog $(MAKE) CC="$(HOSTCC_NOCCACHE)" HOSTCC="$(HOSTCC_NOCCACHE)" \ obj=$(@D) -C $(CONFIG) -f Makefile.br $(@F) diff --git a/support/build/Makefile.rules b/support/build/Makefile.rules index feb1455..1f73fc6 100644 --- a/support/build/Makefile.rules +++ b/support/build/Makefile.rules @@ -287,16 +287,24 @@ endef # Adds library-specific (AS/C/CXX)FLAGS to the build # # buildrule_* $libname,$source,$target,$extraflags(optional) +tmp_depfile = $(dir $1).$(notdir $1).d +depflags = -Wp$(comma)-MD$(comma)$(call tmp_depfile,$(3)) +define fixdep_and_cmd = + $(call build_cmd,$1,$2,$3,$4) + $Q $(UK_FIXDEP) $(call tmp_depfile,$3) $3 '$(call strip,$4)' \ + $(BUILD_DIR) > $(call obj2dep,$3) && \ + rm -f $(call tmp_depfile,$3) +endef define buildrule_S = $(3): $(2) | prepare - $(call build_cmd,AS,$(1),$(3),\ + $(call fixdep_and_cmd,AS,$(1),$(3),\ $(AS) $(ASINCLUDES) $(ASINCLUDES-y) \ $($(call vprefix_lib,$(1),ASINCLUDES)) $($(call vprefix_lib,$(1),ASINCLUDES-y)) \ $(ASFLAGS) $(ASFLAGS-y) \ $($(call vprefix_lib,$(1),ASFLAGS)) $($(call vprefix_lib,$(1),ASFLAGS-y)) \ $(4) -D__LIBNAME__=$(1) -D__BASENAME__=$(notdir $(2)) \ - -c $(2) -o $(3) -MD + -c $(2) -o $(3) $(depflags) ) UK_SRCS-y += $(2) @@ -308,14 +316,14 @@ endef define buildrule_c = $(3): $(2) | prepare - $(call build_cmd,CC,$(1),$(3),\ + $(call fixdep_and_cmd,CC,$(1),$(3),\ $(CC) $(CINCLUDES) $(CINCLUDES-y) \ $($(call vprefix_lib,$(1),CINCLUDES)) $($(call vprefix_lib,$(1),CINCLUDES-y)) \ $(CFLAGS) $(CFLAGS-y) \ $($(call vprefix_lib,$(1),CFLAGS)) $($(call vprefix_lib,$(1),CFLAGS-y)) \ $(4) -D__LIBNAME__=$(1) -D__BASENAME__=$(notdir $(2)) \ - -c $(2) -o $(3) -MD - ) + -c $(2) -o $(3) $(depflags) +) UK_SRCS-y += $(2) UK_DEPS-y += $(call obj2dep,$(3)) @@ -326,13 +334,13 @@ endef define buildrule_cc = $(3): $(2) | prepare - $(call build_cmd,CXX,$(1),$(3),\ + $(call fixdep_and_cmd,CXX,$(1),$(3),\ $(CXX) $(CXXINCLUDES) $(CXXINCLUDES-y) \ $($(call vprefix_lib,$(1),CXXINCLUDES)) $($(call vprefix_lib,$(1),CXXINCLUDES-y)) \ $(CXXFLAGS) $(CXXFLAGS-y) \ $($(call vprefix_lib,$(1),CXXFLAGS)) $($(call vprefix_lib,$(1),CXXFLAGS-y)) \ $(4) -D__LIBNAME__=$(1) -D__BASENAME__=$(notdir $(2)) \ - -c $(2) -o $(3) -MD + -c $(2) -o $(3) $(depflags) ) UK_SRCS-y += $(2) diff --git a/support/kconfig/Makefile b/support/kconfig/Makefile index 7eb4071..6d5b611 100644 --- a/support/kconfig/Makefile +++ b/support/kconfig/Makefile @@ -156,8 +156,10 @@ kxgettext-objs := kxgettext.o zconf.tab.o qconf-cxxobjs := qconf.o qconf-objs := zconf.tab.o gconf-objs := gconf.o zconf.tab.o +fixdep-obj := fixdep.o hostprogs-y := conf +hostprogs-y += fixdep ifeq ($(MAKECMDGOALS),nconf) hostprogs-y += nconf diff --git a/support/kconfig/fixdep.c b/support/kconfig/fixdep.c index beeb52b..f80a0c4 100644 --- a/support/kconfig/fixdep.c +++ b/support/kconfig/fixdep.c @@ -107,9 +107,15 @@ #include <stdio.h> #include <ctype.h> +/* The global variable is a bit against the style of fixdep. But this + * reduces number of changed lines significantly. Which hopefully will + * make it easier to merge with newer version from linux source tree. + */ +static const char *builddir; + static void usage(void) { - fprintf(stderr, "Usage: fixdep [-e] <depfile> <target> <cmdline>\n"); + fprintf(stderr, "Usage: fixdep [-e] <depfile> <target> <cmdline> <builddir>\n"); fprintf(stderr, " -e insert extra dependencies given on stdin\n"); exit(1); } @@ -121,7 +127,7 @@ static void print_dep(const char *m, int slen, const char *dir) { int c, i; - printf(" $(wildcard %s/", dir); + printf(" $(wildcard %s/%s/", builddir, dir); for (i = 0; i < slen; i++) { c = m[i]; if (c == '_') @@ -212,7 +218,7 @@ static void use_config(const char *m, int slen) return; define_config(m, slen, hash); - print_dep(m, slen, "include/config"); + print_dep(m, slen, "kconfig/depinclude"); } /* test if s ends in sub */ @@ -285,9 +291,7 @@ static void *read_file(const char *filename) /* Ignore certain dependencies */ static int is_ignored_file(const char *s, int len) { - return str_ends_with(s, len, "include/generated/autoconf.h") || - str_ends_with(s, len, "include/generated/autoksyms.h") || - str_ends_with(s, len, ".ver"); + return str_ends_with(s, len, "build/include/uk/_config.h"); } /* @@ -384,15 +388,16 @@ int main(int argc, char *argv[]) int insert_extra_deps = 0; void *buf; - if (argc == 5 && !strcmp(argv[1], "-e")) { + if (argc == 6 && !strcmp(argv[1], "-e")) { insert_extra_deps = 1; argv++; - } else if (argc != 4) + } else if (argc != 5) usage(); depfile = argv[1]; target = argv[2]; cmdline = argv[3]; + builddir = argv[4]; printf("cmd_%s := %s\n\n", target, cmdline); -- 2.17.0 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |