From 07a2ae9e40befab82d38a9e99c77169c490ead7b Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Mon, 8 Jan 2018 09:20:23 +0100 Subject: [PATCH] optimize makefiles --- makefile-binary | 48 +----------------------------------------------- makefile-library | 48 +----------------------------------------------- makefile-rec | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 94 deletions(-) create mode 100644 makefile-rec diff --git a/makefile-binary b/makefile-binary index 9a85442684..faece3163f 100644 --- a/makefile-binary +++ b/makefile-binary @@ -52,53 +52,7 @@ FORCE: else\ mkdir -p $(dir $@);\ fi - echo "\ - SHELL:=/bin/bash$${NEW_LINE}\ - SRCDIR:=$${NEW_LINE}\ - $${NEW_LINE}\ - define NEW_LINE$${NEW_LINE}\ - $${NEW_LINE}\ - $${NEW_LINE}\ - endef$${NEW_LINE}\ - $${NEW_LINE}\ - export NEW_LINE$${NEW_LINE}\ - $${NEW_LINE}\ - CXXFLAGS:= -pipe -std=c++14 \$$(CXX_OTHER_FLAGS) -c -fPIC$${NEW_LINE}\ - $${NEW_LINE}\ - SOURCES:= \$$(shell find \$$(SOURCES_BASE_DIR)/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")$${NEW_LINE}\ - DEPENDENCIES:= \$$(patsubst \$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))$${NEW_LINE}\ - OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))$${NEW_LINE}\ - SOURCES_DIRS:= \$$(shell find \$$(SOURCES_BASE_DIR)/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)$${NEW_LINE}\ - OBJECTS_DIRS:= \$$(patsubst \$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))$${NEW_LINE}\ - OBJECTS_DIRS_MAKEFILES:= \$$(patsubst %, %makefile, \$$(OBJECTS_DIRS))$${NEW_LINE}\ - $${NEW_LINE}\ - .PHONY: all$${NEW_LINE}\ - .PRECIOUS: \$$(DEPENDECIES) \$$(OBJECTS_DIRS_MAKEFILES)$${NEW_LINE}\ - $${NEW_LINE}\ - all: \$$(OBJECTS_DIRS) \$$(OBJECTS)$${NEW_LINE}\ - $${NEW_LINE}\ - %.d: makefile$${NEW_LINE}\ - @echo \"\\$${NEW_LINE}\ - \$$(shell sha1sum <<< \"\$$@\" | sed \"s/ -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst \$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,\$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst \$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,\$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\$$\$${NEW_LINE}\\$${NEW_LINE}\ - \$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/ -//g\")) makefile\$$\$${NEW_LINE}\\$${NEW_LINE}\ - \\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\$$\$${NEW_LINE}\\$${NEW_LINE}\ - \" > \$$@$${NEW_LINE}\ - $${NEW_LINE}\ - %/makefile: makefile$${NEW_LINE}\ - mkdir -p \$$(dir \$$@)$${NEW_LINE}\ - cp makefile \$$@$${NEW_LINE}\ - $${NEW_LINE}\ - %/: FORCE | %/makefile$${NEW_LINE}\ - @accesstime=\`stat -c %Y \$$@\` && \\$${NEW_LINE}\ - \$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) SOURCES_BASE_DIR=\$$(SOURCES_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\$${NEW_LINE}\ - accesstime2=\`stat -c %Y \$$@\` && \\$${NEW_LINE}\ - if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\$${NEW_LINE}\ - touch .; \\$${NEW_LINE}\ - fi$${NEW_LINE}\ - $${NEW_LINE}\ - FORCE:$${NEW_LINE}\ - $${NEW_LINE}\ - -include \$$(DEPENDENCIES)" > $@ + cp ../makefile-rec $@ # ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- # final lib/bin construction diff --git a/makefile-library b/makefile-library index 0ac6e9c920..2628aae668 100644 --- a/makefile-library +++ b/makefile-library @@ -69,53 +69,7 @@ FORCE: else\ mkdir -p $(dir $@);\ fi - echo "\ - SHELL:=/bin/bash$${NEW_LINE}\ - SRCDIR:=$${NEW_LINE}\ - $${NEW_LINE}\ - define NEW_LINE$${NEW_LINE}\ - $${NEW_LINE}\ - $${NEW_LINE}\ - endef$${NEW_LINE}\ - $${NEW_LINE}\ - export NEW_LINE$${NEW_LINE}\ - $${NEW_LINE}\ - CXXFLAGS:= -pipe -std=c++14 \$$(CXX_OTHER_FLAGS) -c -fPIC$${NEW_LINE}\ - $${NEW_LINE}\ - SOURCES:= \$$(shell find \$$(SOURCES_BASE_DIR)/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")$${NEW_LINE}\ - DEPENDENCIES:= \$$(patsubst \$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))$${NEW_LINE}\ - OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))$${NEW_LINE}\ - SOURCES_DIRS:= \$$(shell find \$$(SOURCES_BASE_DIR)/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)$${NEW_LINE}\ - OBJECTS_DIRS:= \$$(patsubst \$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))$${NEW_LINE}\ - OBJECTS_DIRS_MAKEFILES:= \$$(patsubst %, %makefile, \$$(OBJECTS_DIRS))$${NEW_LINE}\ - $${NEW_LINE}\ - .PHONY: all$${NEW_LINE}\ - .PRECIOUS: \$$(DEPENDECIES) \$$(OBJECTS_DIRS_MAKEFILES)$${NEW_LINE}\ - $${NEW_LINE}\ - all: \$$(OBJECTS_DIRS) \$$(OBJECTS)$${NEW_LINE}\ - $${NEW_LINE}\ - %.d: makefile$${NEW_LINE}\ - @echo \"\\$${NEW_LINE}\ - \$$(shell sha1sum <<< \"\$$@\" | sed \"s/ -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst \$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,\$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst \$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,\$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\$$\$${NEW_LINE}\\$${NEW_LINE}\ - \$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/ -//g\")) makefile\$$\$${NEW_LINE}\\$${NEW_LINE}\ - \\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\$$\$${NEW_LINE}\\$${NEW_LINE}\ - \" > \$$@$${NEW_LINE}\ - $${NEW_LINE}\ - %/makefile: makefile$${NEW_LINE}\ - mkdir -p \$$(dir \$$@)$${NEW_LINE}\ - cp makefile \$$@$${NEW_LINE}\ - $${NEW_LINE}\ - %/: FORCE | %/makefile$${NEW_LINE}\ - @accesstime=\`stat -c %Y \$$@\` && \\$${NEW_LINE}\ - \$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) SOURCES_BASE_DIR=\$$(SOURCES_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\$${NEW_LINE}\ - accesstime2=\`stat -c %Y \$$@\` && \\$${NEW_LINE}\ - if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\$${NEW_LINE}\ - touch .; \\$${NEW_LINE}\ - fi$${NEW_LINE}\ - $${NEW_LINE}\ - FORCE:$${NEW_LINE}\ - $${NEW_LINE}\ - -include \$$(DEPENDENCIES)" > $@ + cp ../makefile-rec $@ # ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- # final lib/bin construction diff --git a/makefile-rec b/makefile-rec new file mode 100644 index 0000000000..bf5b0a25ca --- /dev/null +++ b/makefile-rec @@ -0,0 +1,46 @@ +SHELL:=/bin/bash +SRCDIR:= + +define NEW_LINE + + +endef + +export NEW_LINE + +CXXFLAGS:= -pipe -std=c++14 $(CXX_OTHER_FLAGS) -c -fPIC + +SOURCES:= $(shell find $(SOURCES_BASE_DIR)/$(SRCDIR) -maxdepth 1 -type f -name "*.cpp") +DEPENDENCIES:= $(patsubst $(SOURCES_BASE_DIR)/$(SRCDIR)%.cpp, $(OBJECTS_BASE_DIR)/$(SRCDIR)%.d, $(SOURCES)) +OBJECTS:= $(patsubst %.d, %.o, $(DEPENDENCIES)) +SOURCES_DIRS:= $(shell find $(SOURCES_BASE_DIR)/$(SRCDIR) -maxdepth 1 -mindepth 1 -type d) +OBJECTS_DIRS:= $(patsubst $(SOURCES_BASE_DIR)/$(SRCDIR)%, %/, $(SOURCES_DIRS)) +OBJECTS_DIRS_MAKEFILES:= $(patsubst %, %makefile, $(OBJECTS_DIRS)) + +.PHONY: all +.PRECIOUS: $(DEPENDECIES) $(OBJECTS_DIRS_MAKEFILES) + +all: $(OBJECTS_DIRS) $(OBJECTS) + +%.d: makefile + @echo "\ + $(shell sha1sum <<< "$@" | sed "s/ -//g") = \$$(shell (\$$(CXX) -MM \$$(CXXFLAGS) $(patsubst $(OBJECTS_BASE_DIR)/$(SRCDIR)%.d,$(SOURCES_BASE_DIR)/$(SRCDIR)%.cpp, $@) 2>/dev/null || echo \"$(patsubst $(OBJECTS_BASE_DIR)/$(SRCDIR)%.d,$(SOURCES_BASE_DIR)/$(SRCDIR)%.cpp, $@) FORCE\") | sed \"s/.*://g;s/\\\\\\\\//g\")$${NEW_LINE}\ + $(patsubst %.d,%.o, $@): \$$($(shell sha1sum <<< "$@" | sed "s/ -//g")) makefile$${NEW_LINE}\ + \$$(CXX) \$$(CXXFLAGS) \$$< -o $(patsubst %.d,%.o, $@)$${NEW_LINE}\ + " > $@ + +%/makefile: makefile + mkdir -p $(dir $@) + cp makefile $@ + +%/: FORCE | %/makefile + @accesstime=`stat -c %Y $@` && \ + $(MAKE) -C $@ SRCDIR=$(SRCDIR)$(notdir $(patsubst %/, %, $@))/ OBJECTS_BASE_DIR=$(OBJECTS_BASE_DIR) SOURCES_BASE_DIR=$(SOURCES_BASE_DIR) CXX_OTHER_FLAGS="$(CXX_OTHER_FLAGS)" && \ + accesstime2=`stat -c %Y $@` && \ + if [ $$accesstime -ne $$accesstime2 ]; then \ + touch .; \ + fi + +FORCE: + +-include $(DEPENDENCIES) -- GitLab