perf tools: Force fixdep compilation at the start of the build
The fixdep tool needs to be built before everything else, because it fixes every object dependency file. We handle this currently by making all objects to depend on fixdep, which is error prone and is easily forgotten when new object is added. Instead of this, this patch force fixdep tool to be built as the first target in the separate make session. This way we don't need to handle extra fixdep dependencies and we are certain there's no fixdep race with any parallel make job. Committer notes: Testing it: Before: $ rm -rf /tmp/build/perf/ ; mkdir -p /tmp/build/perf ; make -k O=/tmp/build/perf -C tools/perf install-bin make: Entering directory '/home/acme/git/linux/tools/perf' BUILD: Doing 'make -j4' parallel build Auto-detecting system features: ... dwarf: [ on ] ... dwarf_getlocations: [ on ] ... glibc: [ on ] ... gtk2: [ on ] ... libaudit: [ on ] ... libbfd: [ on ] ... libelf: [ on ] ... libnuma: [ on ] ... numa_num_possible_cpus: [ on ] ... libperl: [ on ] ... libpython: [ on ] ... libslang: [ on ] ... libcrypto: [ on ] ... libunwind: [ on ] ... libdw-dwarf-unwind: [ on ] ... zlib: [ on ] ... lzma: [ on ] ... get_cpuid: [ on ] ... bpf: [ on ] GEN /tmp/build/perf/common-cmds.h HOSTCC /tmp/build/perf/fixdep.o HOSTLD /tmp/build/perf/fixdep-in.o LINK /tmp/build/perf/fixdep MKDIR /tmp/build/perf/pmu-events/ HOSTCC /tmp/build/perf/pmu-events/json.o MKDIR /tmp/build/perf/pmu-events/ HOSTCC /tmp/build/perf/pmu-events/jsmn.o HOSTCC /tmp/build/perf/pmu-events/jevents.o HOSTLD /tmp/build/perf/pmu-events/jevents-in.o PERF_VERSION = 4.9.rc8.g868cd5 CC /tmp/build/perf/perf-read-vdso32 <SNIP> After: $ rm -rf /tmp/build/perf/ ; mkdir -p /tmp/build/perf ; make -k O=/tmp/build/perf -C tools/perf install-bin make: Entering directory '/home/acme/git/linux/tools/perf' BUILD: Doing 'make -j4' parallel build HOSTCC /tmp/build/perf/fixdep.o HOSTLD /tmp/build/perf/fixdep-in.o LINK /tmp/build/perf/fixdep Auto-detecting system features: ... dwarf: [ on ] ... dwarf_getlocations: [ on ] ... glibc: [ on ] ... gtk2: [ on ] ... libaudit: [ on ] ... libbfd: [ on ] ... libelf: [ on ] ... libnuma: [ on ] ... numa_num_possible_cpus: [ on ] ... libperl: [ on ] ... libpython: [ on ] ... libslang: [ on ] ... libcrypto: [ on ] ... libunwind: [ on ] ... libdw-dwarf-unwind: [ on ] ... zlib: [ on ] ... lzma: [ on ] ... get_cpuid: [ on ] ... bpf: [ on ] GEN /tmp/build/perf/common-cmds.h MKDIR /tmp/build/perf/fd/ CC /tmp/build/perf/fd/array.o LD /tmp/build/perf/fd/libapi-in.o MKDIR /tmp/build/perf/fs/ CC /tmp/build/perf/event-parse.o CC /tmp/build/perf/fs/fs.o PERF_VERSION = 4.9.rc8.g57a92f CC /tmp/build/perf/event-plugin.o MKDIR /tmp/build/perf/fs/ CC /tmp/build/perf/fs/tracing_path.o <SNIP> Signed-off-by: Jiri Olsa <jolsa@kernel.org> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: David Ahern <dsahern@gmail.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/1481030331-31944-3-git-send-email-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
16e2ef4ed2
commit
abb26210a3
@ -181,6 +181,35 @@ ifeq ($(filter-out $(NON_CONFIG_TARGETS),$(MAKECMDGOALS)),)
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# The fixdep build - we force fixdep tool to be built as
|
||||||
|
# the first target in the separate make session not to be
|
||||||
|
# disturbed by any parallel make jobs. Once fixdep is done
|
||||||
|
# we issue the requested build with FIXDEP=1 variable.
|
||||||
|
#
|
||||||
|
# The fixdep build is disabled for $(NON_CONFIG_TARGETS)
|
||||||
|
# targets, because it's not necessary.
|
||||||
|
|
||||||
|
ifdef FIXDEP
|
||||||
|
force_fixdep := 0
|
||||||
|
else
|
||||||
|
force_fixdep := $(config)
|
||||||
|
endif
|
||||||
|
|
||||||
|
export srctree OUTPUT RM CC CXX LD AR CFLAGS CXXFLAGS V BISON FLEX AWK
|
||||||
|
export HOSTCC HOSTLD HOSTAR
|
||||||
|
|
||||||
|
include $(srctree)/tools/build/Makefile.include
|
||||||
|
|
||||||
|
ifeq ($(force_fixdep),1)
|
||||||
|
goals := $(filter-out all sub-make, $(MAKECMDGOALS))
|
||||||
|
|
||||||
|
$(goals) all: sub-make
|
||||||
|
|
||||||
|
sub-make: fixdep
|
||||||
|
$(Q)$(MAKE) FIXDEP=1 -f Makefile.perf $(goals)
|
||||||
|
|
||||||
|
else # force_fixdep
|
||||||
|
|
||||||
# Set FEATURE_TESTS to 'all' so all possible feature checkers are executed.
|
# Set FEATURE_TESTS to 'all' so all possible feature checkers are executed.
|
||||||
# Without this setting the output feature dump file misses some features, for
|
# Without this setting the output feature dump file misses some features, for
|
||||||
# example, liberty. Select all checkers so we won't get an incomplete feature
|
# example, liberty. Select all checkers so we won't get an incomplete feature
|
||||||
@ -365,10 +394,6 @@ strip: $(PROGRAMS) $(OUTPUT)perf
|
|||||||
|
|
||||||
PERF_IN := $(OUTPUT)perf-in.o
|
PERF_IN := $(OUTPUT)perf-in.o
|
||||||
|
|
||||||
export srctree OUTPUT RM CC CXX LD AR CFLAGS CXXFLAGS V BISON FLEX AWK
|
|
||||||
export HOSTCC HOSTLD HOSTAR
|
|
||||||
include $(srctree)/tools/build/Makefile.include
|
|
||||||
|
|
||||||
JEVENTS := $(OUTPUT)pmu-events/jevents
|
JEVENTS := $(OUTPUT)pmu-events/jevents
|
||||||
JEVENTS_IN := $(OUTPUT)pmu-events/jevents-in.o
|
JEVENTS_IN := $(OUTPUT)pmu-events/jevents-in.o
|
||||||
|
|
||||||
@ -487,7 +512,7 @@ $(OUTPUT)perf: $(PERFLIBS) $(PERF_IN) $(PMU_EVENTS_IN) $(LIBTRACEEVENT_DYNAMIC_L
|
|||||||
$(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $(LIBTRACEEVENT_DYNAMIC_LIST_LDFLAGS) \
|
$(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $(LIBTRACEEVENT_DYNAMIC_LIST_LDFLAGS) \
|
||||||
$(PERF_IN) $(PMU_EVENTS_IN) $(LIBS) -o $@
|
$(PERF_IN) $(PMU_EVENTS_IN) $(LIBS) -o $@
|
||||||
|
|
||||||
$(GTK_IN): fixdep FORCE
|
$(GTK_IN): FORCE
|
||||||
$(Q)$(MAKE) $(build)=gtk
|
$(Q)$(MAKE) $(build)=gtk
|
||||||
|
|
||||||
$(OUTPUT)libperf-gtk.so: $(GTK_IN) $(PERFLIBS)
|
$(OUTPUT)libperf-gtk.so: $(GTK_IN) $(PERFLIBS)
|
||||||
@ -536,7 +561,7 @@ endif
|
|||||||
__build-dir = $(subst $(OUTPUT),,$(dir $@))
|
__build-dir = $(subst $(OUTPUT),,$(dir $@))
|
||||||
build-dir = $(if $(__build-dir),$(__build-dir),.)
|
build-dir = $(if $(__build-dir),$(__build-dir),.)
|
||||||
|
|
||||||
prepare: $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h fixdep archheaders
|
prepare: $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h archheaders
|
||||||
|
|
||||||
$(OUTPUT)%.o: %.c prepare FORCE
|
$(OUTPUT)%.o: %.c prepare FORCE
|
||||||
$(Q)$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=$(build-dir) $@
|
$(Q)$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=$(build-dir) $@
|
||||||
@ -586,7 +611,7 @@ $(patsubst perf-%,%.o,$(PROGRAMS)): $(wildcard */*.h)
|
|||||||
|
|
||||||
LIBPERF_IN := $(OUTPUT)libperf-in.o
|
LIBPERF_IN := $(OUTPUT)libperf-in.o
|
||||||
|
|
||||||
$(LIBPERF_IN): prepare fixdep FORCE
|
$(LIBPERF_IN): prepare FORCE
|
||||||
$(Q)$(MAKE) $(build)=libperf
|
$(Q)$(MAKE) $(build)=libperf
|
||||||
|
|
||||||
$(LIB_FILE): $(LIBPERF_IN)
|
$(LIB_FILE): $(LIBPERF_IN)
|
||||||
@ -594,10 +619,10 @@ $(LIB_FILE): $(LIBPERF_IN)
|
|||||||
|
|
||||||
LIBTRACEEVENT_FLAGS += plugin_dir=$(plugindir_SQ)
|
LIBTRACEEVENT_FLAGS += plugin_dir=$(plugindir_SQ)
|
||||||
|
|
||||||
$(LIBTRACEEVENT): fixdep FORCE
|
$(LIBTRACEEVENT): FORCE
|
||||||
$(Q)$(MAKE) -C $(TRACE_EVENT_DIR) $(LIBTRACEEVENT_FLAGS) O=$(OUTPUT) $(OUTPUT)libtraceevent.a
|
$(Q)$(MAKE) -C $(TRACE_EVENT_DIR) $(LIBTRACEEVENT_FLAGS) O=$(OUTPUT) $(OUTPUT)libtraceevent.a
|
||||||
|
|
||||||
libtraceevent_plugins: fixdep FORCE
|
libtraceevent_plugins: FORCE
|
||||||
$(Q)$(MAKE) -C $(TRACE_EVENT_DIR) $(LIBTRACEEVENT_FLAGS) O=$(OUTPUT) plugins
|
$(Q)$(MAKE) -C $(TRACE_EVENT_DIR) $(LIBTRACEEVENT_FLAGS) O=$(OUTPUT) plugins
|
||||||
|
|
||||||
$(LIBTRACEEVENT_DYNAMIC_LIST): libtraceevent_plugins
|
$(LIBTRACEEVENT_DYNAMIC_LIST): libtraceevent_plugins
|
||||||
@ -610,21 +635,21 @@ $(LIBTRACEEVENT)-clean:
|
|||||||
install-traceevent-plugins: libtraceevent_plugins
|
install-traceevent-plugins: libtraceevent_plugins
|
||||||
$(Q)$(MAKE) -C $(TRACE_EVENT_DIR) $(LIBTRACEEVENT_FLAGS) O=$(OUTPUT) install_plugins
|
$(Q)$(MAKE) -C $(TRACE_EVENT_DIR) $(LIBTRACEEVENT_FLAGS) O=$(OUTPUT) install_plugins
|
||||||
|
|
||||||
$(LIBAPI): fixdep FORCE
|
$(LIBAPI): FORCE
|
||||||
$(Q)$(MAKE) -C $(LIB_DIR) O=$(OUTPUT) $(OUTPUT)libapi.a
|
$(Q)$(MAKE) -C $(LIB_DIR) O=$(OUTPUT) $(OUTPUT)libapi.a
|
||||||
|
|
||||||
$(LIBAPI)-clean:
|
$(LIBAPI)-clean:
|
||||||
$(call QUIET_CLEAN, libapi)
|
$(call QUIET_CLEAN, libapi)
|
||||||
$(Q)$(MAKE) -C $(LIB_DIR) O=$(OUTPUT) clean >/dev/null
|
$(Q)$(MAKE) -C $(LIB_DIR) O=$(OUTPUT) clean >/dev/null
|
||||||
|
|
||||||
$(LIBBPF): fixdep FORCE
|
$(LIBBPF): FORCE
|
||||||
$(Q)$(MAKE) -C $(BPF_DIR) O=$(OUTPUT) $(OUTPUT)libbpf.a FEATURES_DUMP=$(FEATURE_DUMP_EXPORT)
|
$(Q)$(MAKE) -C $(BPF_DIR) O=$(OUTPUT) $(OUTPUT)libbpf.a FEATURES_DUMP=$(FEATURE_DUMP_EXPORT)
|
||||||
|
|
||||||
$(LIBBPF)-clean:
|
$(LIBBPF)-clean:
|
||||||
$(call QUIET_CLEAN, libbpf)
|
$(call QUIET_CLEAN, libbpf)
|
||||||
$(Q)$(MAKE) -C $(BPF_DIR) O=$(OUTPUT) clean >/dev/null
|
$(Q)$(MAKE) -C $(BPF_DIR) O=$(OUTPUT) clean >/dev/null
|
||||||
|
|
||||||
$(LIBSUBCMD): fixdep FORCE
|
$(LIBSUBCMD): FORCE
|
||||||
$(Q)$(MAKE) -C $(SUBCMD_DIR) O=$(OUTPUT) $(OUTPUT)libsubcmd.a
|
$(Q)$(MAKE) -C $(SUBCMD_DIR) O=$(OUTPUT) $(OUTPUT)libsubcmd.a
|
||||||
|
|
||||||
$(LIBSUBCMD)-clean:
|
$(LIBSUBCMD)-clean:
|
||||||
@ -832,3 +857,4 @@ FORCE:
|
|||||||
.PHONY: $(GIT-HEAD-PHONY) TAGS tags cscope FORCE prepare
|
.PHONY: $(GIT-HEAD-PHONY) TAGS tags cscope FORCE prepare
|
||||||
.PHONY: libtraceevent_plugins archheaders
|
.PHONY: libtraceevent_plugins archheaders
|
||||||
|
|
||||||
|
endif # force_fixdep
|
||||||
|
Loading…
Reference in New Issue
Block a user