solenv/bin/concat-deps.c | 115 ++++++++++++++++++++++++++++++++++++++ solenv/gbuild/AllLangResTarget.mk | 3 solenv/gbuild/LinkTarget.mk | 51 +++++++--------- solenv/gbuild/SdiTarget.mk | 14 +++- solenv/gbuild/UnoApiTarget.mk | 15 ++++ 5 files changed, 163 insertions(+), 35 deletions(-)
New commits: commit 66a0713dc9c676182fcd7aa1e21f8dc25c05be5e Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sun Jun 16 05:01:45 2013 +0200 handle missing dep files in concat-deps * this and Ib4762f5a260035f00b5e68cf45b687fdf02e9c02 reduces a default build on my machine from 2min25sec to 2min12sec * without unitchecks, its down to 1min50sec now * it reduces the build time on a i7-4770 Windows tinderbox from 99min to 89min * by now it also takes care of avoiding most string copying, although this can certainly be considered overeager given that the file creation on Windows took ~250ms per file before and still will take a lot longer than any string operation with this change Change-Id: I515432bdefe2b055c78b6ba97868adbde65d9165 diff --git a/solenv/bin/concat-deps.c b/solenv/bin/concat-deps.c index 3613946..c60beeb 100644 --- a/solenv/bin/concat-deps.c +++ b/solenv/bin/concat-deps.c @@ -118,6 +118,7 @@ int internal_boost = 0; static char* base_dir; static char* work_dir; +int work_dir_len; #ifdef __GNUC__ #define clz __builtin_clz @@ -864,6 +865,44 @@ static inline char * eat_space_at_end(char * end) return real_end; } +static char* phony_content_buffer; +static inline char* generate_phony_line(char* phony_target, char* extension) +{ +char* src; +char* dest; +char* last_dot; + //fprintf(stderr, "generate_phony_line called with phony_target %s and extension %s\n", phony_target, extension); + for(dest = phony_content_buffer+work_dir_len, src = phony_target; *src != 0; ++src, ++dest) + { + *dest = *src; + if(*dest == '.') + { + last_dot = dest; + } + } + //fprintf(stderr, "generate_phony_line after phony_target copy: %s\n", phony_content_buffer); + for(dest = last_dot+1, src = extension; *src != 0; ++src, ++dest) + { + *dest = *src; + } + //fprintf(stderr, "generate_phony_line after extension add: %s\n", phony_content_buffer); + strcpy(dest, ": $(gb_Helper_PHONY)\n"); + //fprintf(stderr, "generate_phony_line after phony add: %s\n", phony_content_buffer); + return phony_content_buffer; +} + +static inline int generate_phony_file(char* fn, char* content) +{ +FILE* depfile; + depfile = fopen(fn, "w"); + if(depfile) + { + fputs(content, depfile); + fclose(depfile); + } + return !depfile; +} + static int _process(struct hash* dep_hash, char* fn) { int rc; @@ -872,6 +911,8 @@ char* end; char* cursor; char* cursor_out; char* base; +char* created_line; +char* src_relative; int continuation = 0; char last_ns = 0; off_t size; @@ -985,6 +1026,75 @@ off_t size; } } } + else + { + if(strncmp(fn, work_dir, work_dir_len) == 0) + { + if(strncmp(fn+work_dir_len, "/Dep/", 5) == 0) + { + src_relative = fn+work_dir_len+5; + // cases ordered by frequency + if(strncmp(src_relative, "CxxObject/", 10) == 0) + { + created_line = generate_phony_line(src_relative+10, "o"); + rc = generate_phony_file(fn, created_line); + } + else if(strncmp(fn+work_dir_len+5, "UnoApiPartTarget/", 17) == 0) + { + created_line = generate_phony_line(src_relative+17, "urd"); + rc = generate_phony_file(fn, created_line); + } + else if(strncmp(fn+work_dir_len+5, "SrsPartTarget/", 14) == 0) + { + created_line = generate_phony_line(src_relative+14, ""); + rc = generate_phony_file(fn, created_line); + } + else if(strncmp(src_relative, "GenCxxObject/", 13) == 0) + { + created_line = generate_phony_line(src_relative+13, "o"); + rc = generate_phony_file(fn, created_line); + } + else if(strncmp(src_relative, "CObject/", 8) == 0) + { + created_line = generate_phony_line(src_relative+8, "o"); + rc = generate_phony_file(fn, created_line); + } + else if(strncmp(src_relative, "GenCObject/", 11) == 0) + { + created_line = generate_phony_line(src_relative+11, "o"); + rc = generate_phony_file(fn, created_line); + } + else if(strncmp(src_relative, "SdiObject/", 10) == 0) + { + created_line = generate_phony_line(src_relative+10, "o"); + rc = generate_phony_file(fn, created_line); + } + else if(strncmp(src_relative, "AsmObject/", 10) == 0) + { + created_line = generate_phony_line(src_relative+10, "o"); + rc = generate_phony_file(fn, created_line); + } + else if(strncmp(src_relative, "ObjCxxObject/", 13) == 0) + { + created_line = generate_phony_line(src_relative+13, "o"); + rc = generate_phony_file(fn, created_line); + } + else if(strncmp(src_relative, "ObjCObject/", 11) == 0) + { + created_line = generate_phony_line(src_relative+11, "o"); + rc = generate_phony_file(fn, created_line); + } + else + { + fprintf(stderr, "no magic for %s(%s) in %s\n", fn, src_relative, work_dir); + } + } + if(!rc) + { + puts(created_line); + } + } + } return rc; } @@ -994,6 +1104,7 @@ static void _usage(void) } #define kDEFAULT_HASH_SIZE 4096 +#define PHONY_TARGET_BUFFER 4096 static int get_var(char **var, const char *name) { @@ -1023,6 +1134,10 @@ const char *env_str; } if(get_var(&base_dir, "SRCDIR") || get_var(&work_dir, "WORKDIR")) return 1; + work_dir_len = strlen(work_dir); + phony_content_buffer = malloc(PHONY_TARGET_BUFFER); + strcpy(phony_content_buffer, work_dir); + phony_content_buffer[work_dir_len] = '/'; env_str = getenv("SYSTEM_BOOST"); internal_boost = !env_str || strcmp(env_str,"TRUE"); diff --git a/solenv/gbuild/AllLangResTarget.mk b/solenv/gbuild/AllLangResTarget.mk index 9b7afbf..0791f01 100644 --- a/solenv/gbuild/AllLangResTarget.mk +++ b/solenv/gbuild/AllLangResTarget.mk @@ -102,8 +102,7 @@ $(call gb_SrsPartTarget_get_target,%) : $(SRCDIR)/% $(gb_Helper_MISCDUMMY) \ ifeq ($(gb_FULLDEPS),$(true)) $(call gb_SrsPartTarget_get_dep_target,%) : $(SRCDIR)/% $(gb_Helper_MISCDUMMY) $(call gb_Helper_abbreviate_dirs,\ - mkdir -p $(dir $@) && \ - echo "$(call gb_SrsPartTarget_get_target,$*) : $(gb_Helper_PHONY)" > $@) + mkdir -p $(dir $@)) endif diff --git a/solenv/gbuild/LinkTarget.mk b/solenv/gbuild/LinkTarget.mk index 63f0f11..626db27 100644 --- a/solenv/gbuild/LinkTarget.mk +++ b/solenv/gbuild/LinkTarget.mk @@ -98,18 +98,6 @@ endef # dep file as a side effect. # In the dep file rule just touch it so it's newer than the object. -# The gb_Object__command_dep generates an "always rebuild" dep file; -# It is used on first build and in case the user deletes the object dep file. -ifeq ($(gb_FULLDEPS),$(true)) -define gb_Object__command_dep - echo "$(2) : $(gb_Helper_PHONY)" > $(1) - -endef -else -gb_Object__command_dep = \ - $(call gb_Output_error,gb_Object__command_dep is only for gb_FULLDEPS) -endif - ifneq ($(FORCE_COMPILE_ALL),) # This one only exists to force .c/.cxx "rebuilds" when running a compiler tool. .PHONY: force_compile_all_target @@ -133,8 +121,7 @@ endif ifeq ($(gb_FULLDEPS),$(true)) $(call gb_CObject_get_dep_target,%) : - $(if $(wildcard $@),touch $@,\ - $(call gb_Object__command_dep,$@,$(call gb_CObject_get_target,$*))) + $(if $(wildcard $@),touch $@) endif @@ -191,8 +178,7 @@ $(dir $(call gb_CxxObject_get_dep_target,%))%/.dir : $(call gb_CxxObject_get_dep_target,%) : $(if $(wildcard $@),touch $@,\ - $(eval $(gb_CxxObject__set_pchflags))\ - $(call gb_Object__command_dep,$@,$(call gb_CxxObject_get_target,$*))) + $(eval $(gb_CxxObject__set_pchflags))) endif @@ -209,8 +195,7 @@ $(call gb_GenCObject_get_target,%) : ifeq ($(gb_FULLDEPS),$(true)) $(call gb_GenCObject_get_dep_target,%) : - $(if $(wildcard $@),touch $@,\ - $(call gb_Object__command_dep,$@,$(call gb_GenCObject_get_target,$*))) + $(if $(wildcard $@),touch $@) endif @@ -229,8 +214,7 @@ $(call gb_GenCxxObject_get_target,%) : ifeq ($(gb_FULLDEPS),$(true)) $(call gb_GenCxxObject_get_dep_target,%) : $(if $(wildcard $@),touch $@,\ - $(eval $(gb_CxxObject__set_pchflags))\ - $(call gb_Object__command_dep,$@,$(call gb_GenCxxObject_get_target,$*))) + $(eval $(gb_CxxObject__set_pchflags))) endif @@ -312,8 +296,7 @@ $(call gb_ObjCxxObject_get_target,%) : $(call gb_ObjCxxObject_get_source,$(SRCDI ifeq ($(gb_FULLDEPS),$(true)) $(call gb_ObjCxxObject_get_dep_target,%) : - $(if $(wildcard $@),touch $@,\ - $(call gb_Object__command_dep,$@,$(call gb_ObjCxxObject_get_target,$*))) + $(if $(wildcard $@),touch $) endif endif @@ -336,8 +319,7 @@ $(call gb_ObjCObject_get_target,%) : $(call gb_ObjCObject_get_source,$(SRCDIR),% ifeq ($(gb_FULLDEPS),$(true)) $(call gb_ObjCObject_get_dep_target,%) : - $(if $(wildcard $@),touch $@,\ - $(call gb_Object__command_dep,$@,$(call gb_ObjCObject_get_target,$*))) + $(if $(wildcard $@),touch $@) endif endif @@ -353,9 +335,14 @@ $(call gb_AsmObject_get_target,%) : $(call gb_AsmObject_get_source,$(SRCDIR),%) $(call gb_AsmObject__command,$@,$*,$<,$(call gb_AsmObject_get_dep_target,$*)) ifeq ($(gb_FULLDEPS),$(true)) +$(dir $(call gb_AsmObject_get_dep_target,%)).dir : + $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@)) + +$(dir $(call gb_AsmObject_get_dep_target,%))%/.dir : + $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@)) + $(call gb_AsmObject_get_dep_target,%) : - $(if $(wildcard $@),touch $@,\ - $(call gb_Object__command_dep,$@,$(call gb_AsmObject_get_target,$*))) + $(if $(wildcard $@),touch $@) endif @@ -1000,6 +987,7 @@ $(call gb_AsmObject_get_target,$(2)) : \ ifeq ($(gb_FULLDEPS),$(true)) $(call gb_LinkTarget_get_dep_target,$(1)) : ASMOBJECTS += $(2) $(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_AsmObject_get_dep_target,$(2)) +$(call gb_AsmObject_get_dep_target,$(2)) :| $(dir $(call gb_AsmObject_get_dep_target,$(2))).dir endif endef diff --git a/solenv/gbuild/SdiTarget.mk b/solenv/gbuild/SdiTarget.mk index 881614d..549671e 100644 --- a/solenv/gbuild/SdiTarget.mk +++ b/solenv/gbuild/SdiTarget.mk @@ -54,8 +54,7 @@ $(dir $(call gb_SdiObject_get_dep_target,%))%/.dir : $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@)) $(call gb_SdiTarget_get_dep_target,%) : - $(if $(wildcard $@),touch $@,\ - $(call gb_Object__command_dep,$@,$(call gb_SdiTarget_get_target,$*))) + $(if $(wildcard $@),touch $@) endif .PHONY : $(call gb_SdiTarget_get_clean_target,%) diff --git a/solenv/gbuild/UnoApiTarget.mk b/solenv/gbuild/UnoApiTarget.mk index 45096b3..59a2fc2 100644 --- a/solenv/gbuild/UnoApiTarget.mk +++ b/solenv/gbuild/UnoApiTarget.mk @@ -72,8 +72,7 @@ $(dir $(call gb_UnoApiPartTarget_get_dep_target,%))%/.dir : $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@)) $(call gb_UnoApiPartTarget_get_dep_target,%) : - $(if $(wildcard $@),touch $@,\ - $(call gb_Object__command_dep,$@,$(call gb_UnoApiPartTarget_get_target,$*.urd))) + $(if $(wildcard $@),touch $@) endif commit 88085a5b79eb7e11c0609b832c316b63146f4976 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sun Jun 16 01:20:51 2013 +0200 Reduce the amount of calls of mkdir -p. Change-Id: Ib4762f5a260035f00b5e68cf45b687fdf02e9c02 diff --git a/solenv/gbuild/LinkTarget.mk b/solenv/gbuild/LinkTarget.mk index ef79709..63f0f11 100644 --- a/solenv/gbuild/LinkTarget.mk +++ b/solenv/gbuild/LinkTarget.mk @@ -102,7 +102,6 @@ endef # It is used on first build and in case the user deletes the object dep file. ifeq ($(gb_FULLDEPS),$(true)) define gb_Object__command_dep -mkdir -p $(dir $(1)) && \ echo "$(2) : $(gb_Helper_PHONY)" > $(1) endef @@ -184,6 +183,12 @@ $(call gb_CxxObject_get_target,%) : $(call gb_CxxObject_get_source,$(SRCDIR),%) endif ifeq ($(gb_FULLDEPS),$(true)) +$(dir $(call gb_CxxObject_get_dep_target,%)).dir : + $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@)) + +$(dir $(call gb_CxxObject_get_dep_target,%))%/.dir : + $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@)) + $(call gb_CxxObject_get_dep_target,%) : $(if $(wildcard $@),touch $@,\ $(eval $(gb_CxxObject__set_pchflags))\ @@ -919,6 +924,7 @@ $(call gb_CObject_get_target,$(2)) : \ ifeq ($(gb_FULLDEPS),$(true)) $(call gb_LinkTarget_get_dep_target,$(1)) : COBJECTS += $(2) $(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_CObject_get_dep_target,$(2)) +$(call gb_CObject_get_dep_target,$(2)) :| $(dir $(call gb_CObject_get_dep_target,$(2))).dir endif endef @@ -940,6 +946,7 @@ endif ifeq ($(gb_FULLDEPS),$(true)) $(call gb_LinkTarget_get_dep_target,$(1)) : CXXOBJECTS += $(2) $(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_CxxObject_get_dep_target,$(2)) +$(call gb_CxxObject_get_dep_target,$(2)) :| $(dir $(call gb_CxxObject_get_dep_target,$(2))).dir endif endef @@ -1015,6 +1022,7 @@ $(call gb_GenCObject_get_target,$(2)) : \ ifeq ($(gb_FULLDEPS),$(true)) $(call gb_LinkTarget_get_dep_target,$(1)) : GENCOBJECTS += $(2) $(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_GenCObject_get_dep_target,$(2)) +$(call gb_GenCObject_get_dep_target,$(2)) :| $(dir $(call gb_GenCObject_get_dep_target,$(2))).dir endif endef @@ -1041,6 +1049,7 @@ endif ifeq ($(gb_FULLDEPS),$(true)) $(call gb_LinkTarget_get_dep_target,$(1)) : GENCXXOBJECTS += $(2) $(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_GenCxxObject_get_dep_target,$(2)) +$(call gb_GenCxxObject_get_dep_target,$(2)) :| $(dir $(call gb_GenCxxObject_get_dep_target,$(2))).dir endif endef diff --git a/solenv/gbuild/SdiTarget.mk b/solenv/gbuild/SdiTarget.mk index 2fbe2e7..881614d 100644 --- a/solenv/gbuild/SdiTarget.mk +++ b/solenv/gbuild/SdiTarget.mk @@ -28,7 +28,7 @@ gb_SdiTarget_SVIDLCOMMAND := $(call gb_Executable_get_command,svidl) $(call gb_SdiTarget_get_target,%) : $(SRCDIR)/%.sdi $(gb_SdiTarget_SVIDLDEPS) $(call gb_Output_announce,$*,$(true),SDI,1) $(call gb_Helper_abbreviate_dirs,\ - mkdir -p $(dir $@) $(dir $(call gb_SdiTarget_get_dep_target,$*))) + mkdir -p $(dir $@)) $(call gb_Helper_abbreviate_dirs,\ cd $(dir $<) && \ $(gb_SdiTarget_SVIDLCOMMAND) -quiet \ @@ -39,7 +39,7 @@ $(call gb_SdiTarget_get_target,%) : $(SRCDIR)/%.sdi $(gb_SdiTarget_SVIDLDEPS) -fz$@.sid \ -fx$(EXPORTS) \ -fm$@ \ - -fM$(call gb_SdiTarget_get_dep_target,$*) \ + $(if $(gb_FULLDEPS),-fM$(call gb_SdiTarget_get_dep_target,$*)) \ $<) # rule necessary to rebuild cxx files that include the header @@ -47,6 +47,12 @@ $(call gb_SdiTarget_get_target,%.hxx) : $(call gb_SdiTarget_get_target,%) @true ifeq ($(gb_FULLDEPS),$(true)) +$(dir $(call gb_SdiObject_get_dep_target,%)).dir : + $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@)) + +$(dir $(call gb_SdiObject_get_dep_target,%))%/.dir : + $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@)) + $(call gb_SdiTarget_get_dep_target,%) : $(if $(wildcard $@),touch $@,\ $(call gb_Object__command_dep,$@,$(call gb_SdiTarget_get_target,$*))) @@ -66,6 +72,7 @@ $(call gb_SdiTarget_get_target,$(1)) : INCLUDE := $$(subst -I. ,-I$$(dir $(SRCDI $(call gb_SdiTarget_get_target,$(1)) : EXPORTS := $(SRCDIR)/$(2).sdi ifeq ($(gb_FULLDEPS),$(true)) -include $(call gb_SdiTarget_get_dep_target,$(1)) +$(call gb_SdiTarget_get_dep_target,$(1)) :| $(dir $(call gb_SdiTarget_get_dep_target,$(1))).dir endif endef diff --git a/solenv/gbuild/UnoApiTarget.mk b/solenv/gbuild/UnoApiTarget.mk index 703d6b1..45096b3 100644 --- a/solenv/gbuild/UnoApiTarget.mk +++ b/solenv/gbuild/UnoApiTarget.mk @@ -65,6 +65,11 @@ $(call gb_UnoApiPartTarget_get_target,%.done) : $(gb_UnoApiPartTarget_IDLCDEPS) $(call gb_UnoApiPartTarget__command,$@,$*,$(filter-out $(gb_UnoApiPartTarget_IDLCDEPS),$(if $(filter $(gb_UnoApiPartTarget_IDLCDEPS),$?),$^,$?))) ifeq ($(gb_FULLDEPS),$(true)) +$(dir $(call gb_UnoApiPartTarget_get_dep_target,%)).dir : + $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@)) + +$(dir $(call gb_UnoApiPartTarget_get_dep_target,%))%/.dir : + $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@)) $(call gb_UnoApiPartTarget_get_dep_target,%) : $(if $(wildcard $@),touch $@,\ @@ -137,6 +142,11 @@ $(call gb_Helper_abbreviate_dirs,\ endef ifeq ($(gb_FULLDEPS),$(true)) +$(dir $(call gb_UnoApiTarget_get_dep_target,%)).dir : + $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@)) + +$(dir $(call gb_UnoApiTarget_get_dep_target,%))%/.dir : + $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@)) $(call gb_UnoApiTarget_get_dep_target,%) : $(call gb_Executable_get_runtime_dependencies,concat-deps) $(call gb_UnoApiTarget__command_dep,$@,$*,$(UNOAPI_IDLFILES)) @@ -153,6 +163,7 @@ $(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_DEPRDBS := ifeq ($(gb_FULLDEPS),$(true)) $(call gb_UnoApiTarget_get_dep_target,$(1)) : UNOAPI_IDLFILES := -include $(call gb_UnoApiTarget_get_dep_target,$(1)) +$(call gb_UnoApiTarget_get_dep_target,$(1)) :| $(dir $(call gb_UnoApiTarget_get_dep_target,$(1))).dir endif endef @@ -175,6 +186,7 @@ ifeq ($(gb_FULLDEPS),$(true)) $(call gb_UnoApiTarget_get_dep_target,$(1)) : UNOAPI_IDLFILES += $(2)/$(3).idl $(call gb_UnoApiTarget_get_dep_target,$(1)) : \ $(call gb_UnoApiPartTarget_get_dep_target,$(2)/$(3)) +$(call gb_UnoApiPartTarget_get_dep_target,$(2)/$(3)) :| $(dir $(call gb_UnoApiPartTarget_get_dep_target,$(2)/$(3))).dir endif endef _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits