diff options
author | noelallen@google.com <noelallen@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-09 00:18:12 +0000 |
---|---|---|
committer | noelallen@google.com <noelallen@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-09 00:18:12 +0000 |
commit | 4609861bd20bafe318cf3de8abbf6f661299579d (patch) | |
tree | e39003019a5866df7a02812b902f55a2d24bdde7 /native_client_sdk | |
parent | f74a281fe4ea2dfb8ca0ef3e3127141b3c72d2dc (diff) | |
download | chromium_src-4609861bd20bafe318cf3de8abbf6f661299579d.zip chromium_src-4609861bd20bafe318cf3de8abbf6f661299579d.tar.gz chromium_src-4609861bd20bafe318cf3de8abbf6f661299579d.tar.bz2 |
Fix dependencies.
Change the way directory dependencies are handled. This allows us to create a directory:
$(TOOLCHAIN)/$(CONFIG)/foo
in the case the source file is named
foo/bar.c
The CL also improves how we handle dependencies of libraries. Now the LIB macro understands a STAMP target. The parent make can call and inject a STAMP target which
will only get touched if the library is rebuilt. This
fixes the "always link & run NMF" we've been seeing in
the SDK.
TBR=sbc@chromium.org
NOTRY=true
Review URL: https://codereview.chromium.org/12210066
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@181572 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'native_client_sdk')
-rw-r--r-- | native_client_sdk/src/tools/common.mk | 38 | ||||
-rw-r--r-- | native_client_sdk/src/tools/host_gcc.mk | 11 | ||||
-rw-r--r-- | native_client_sdk/src/tools/host_vc.mk | 9 | ||||
-rw-r--r-- | native_client_sdk/src/tools/nacl_gcc.mk | 38 | ||||
-rw-r--r-- | native_client_sdk/src/tools/nacl_llvm.mk | 11 |
5 files changed, 72 insertions, 35 deletions
diff --git a/native_client_sdk/src/tools/common.mk b/native_client_sdk/src/tools/common.mk index 1a340fb..82651a9 100644 --- a/native_client_sdk/src/tools/common.mk +++ b/native_client_sdk/src/tools/common.mk @@ -127,34 +127,44 @@ clean: # proivde a cross platform solution. The use of '|' checks for existance instead # of timestamp, since the directory can update when files change. # -$(TOOLCHAIN): - $(MKDIR) $(TOOLCHAIN) - -$(TOOLCHAIN)/$(CONFIG): | $(TOOLCHAIN) - $(MKDIR) $(TOOLCHAIN)/$(CONFIG) +%dir.stamp : + $(MKDIR) -p $(dir $@) + echo "Directory Stamp" > $@ OUTDIR:=$(TOOLCHAIN)/$(CONFIG) --include $(OUTDIR)/*.d - +STAMPDIR?=$(OUTDIR) # # Dependency Macro # -# $1 = Name of dependency +# $1 = Name of stamp +# $2 = Directory for the sub-make +# $3 = Extra Settings # define DEPEND_RULE -.PHONY: $(1) -$(1): ifeq (,$(IGNORE_DEPS)) - @echo "Checking library: $(1)" - +$(MAKE) -C $(NACL_SDK_ROOT)/src/$(1) -DEPS_LIST+=$(1) +.PHONY : rebuild_$(1) + +rebuild_$(1) :| $(STAMPDIR)/dir.stamp +ifeq (,$(2)) + +$(MAKE) -C $(NACL_SDK_ROOT)/src/$(1) STAMPDIR=$(abspath $(STAMPDIR)) $(abspath $(STAMPDIR)/$(1).stamp) $(3) else - @echo "Ignore DEPS: $(1)" + +$(MAKE) -C $(2) STAMPDIR=$(abspath $(STAMPDIR)) $(abspath $(STAMPDIR)/$(1).stamp) $(3) +endif + +all: rebuild_$(1) +$(STAMPDIR)/$(1).stamp : rebuild_$(1) + +else + +.PHONY : $(STAMPDIR)/$(1).stamp +$(STAMPDIR)/$(1).stamp : + @echo "Ignore $(1)" endif endef + ifeq ('win','$(TOOLCHAIN)') HOST_EXT=.dll else diff --git a/native_client_sdk/src/tools/host_gcc.mk b/native_client_sdk/src/tools/host_gcc.mk index e5e72e8..b2e6a82 100644 --- a/native_client_sdk/src/tools/host_gcc.mk +++ b/native_client_sdk/src/tools/host_gcc.mk @@ -32,12 +32,14 @@ LINUX_CCFLAGS=-fPIC -pthread $(LINUX_WARNINGS) -I$(NACL_SDK_ROOT)/include -I$(NA # $2 = Compile Flags # define C_COMPILER_RULE -$(OUTDIR)/$(basename $(1)).o : $(1) $(TOP_MAKE) | $(OUTDIR) +-include $(OUTDIR)/$(basename $(1)).d +$(OUTDIR)/$(basename $(1)).o : $(1) $(TOP_MAKE) | $(dir $(OUTDIR)/$(basename $(1)))dir.stamp $(HOST_CC) -o $$@ -c $$< -fPIC $(POSIX_FLAGS) $(2) $(LINUX_FLAGS) endef define CXX_COMPILER_RULE -$(OUTDIR)/$(basename $(1)).o : $(1) $(TOP_MAKE) | $(OUTDIR) +-include $(OUTDIR)/$(basename $(1)).d +$(OUTDIR)/$(basename $(1)).o : $(1) $(TOP_MAKE) |$(dir $(OUTDIR)/$(basename $(1)))dir.stamp $(HOST_CXX) -o $$@ -c $$< -fPIC $(POSIX_FLAGS) $(2) $(LINUX_FLAGS) endef @@ -75,6 +77,9 @@ endef # # define LIB_RULE +$(STAMPDIR)/$(1).stamp : $(NACL_SDK_ROOT)/lib/$(OSNAME)_host/$(CONFIG)/lib$(1).a + @echo "TOUCHED $$@" > $(STAMPDIR)/$(1).stamp + all:$(NACL_SDK_ROOT)/lib/$(OSNAME)_host/$(CONFIG)/lib$(1).a $(NACL_SDK_ROOT)/lib/$(OSNAME)_host/$(CONFIG)/lib$(1).a : $(foreach src,$(2),$(OUTDIR)/$(basename $(src)).o) $(MKDIR) -p $$(dir $$@) @@ -94,7 +99,7 @@ endef # define LINKER_RULE all: $(1) -$(1) : $(2) $(4) +$(1) : $(2) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) $(HOST_LINK) -shared -o $(1) $(2) $(foreach path,$(5),-L$(path)/$(OSNAME)_host)/$(CONFIG) $(foreach lib,$(3),-l$(lib)) $(6) endef diff --git a/native_client_sdk/src/tools/host_vc.mk b/native_client_sdk/src/tools/host_vc.mk index 5bdfe55..6dd97ca 100644 --- a/native_client_sdk/src/tools/host_vc.mk +++ b/native_client_sdk/src/tools/host_vc.mk @@ -37,12 +37,14 @@ WIN_FLAGS?=-D WIN32 -D _WIN32 -D PTW32_STATIC_LIB # $2 = Compile Flags # define C_COMPILER_RULE -$(OUTDIR)/$(basename $(1)).o : $(1) $(TOP_MAKE) | $(OUTDIR) +-include $(OUTDIR)/$(basename $(1)).d +$(OUTDIR)/$(basename $(1)).o : $(1) $(TOP_MAKE) | $(dir $(OUTDIR)/$(basename $(1)))dir.stamp $(HOST_CC) /Fo$$@ /c $$< $(WIN_OPT_FLAGS) $(2) $(WIN_FLAGS) endef define CXX_COMPILER_RULE -$(OUTDIR)/$(basename $(1)).o : $(1) $(TOP_MAKE) | $(OUTDIR) +-include $(OUTDIR)/$(basename $(1)).d +$(OUTDIR)/$(basename $(1)).o : $(1) $(TOP_MAKE) | $(dir $(OUTDIR)/$(basename $(1)))dir.stamp $(HOST_CXX) /Fo$$@ -c $$< $(WIN_OPT_FLAGS) $(2) $(WIN_FLAGS) endef @@ -68,6 +70,9 @@ endef # # define LIB_RULE +$(STAMPDIR)/$(1).stamp : $(NACL_SDK_ROOT)/lib/$(OSNAME)_x86_32_host/$(CONFIG)/$(1).lib + @echo "TOUCHED $$@" > $(STAMPDIR)/$(1).stamp + all:$(NACL_SDK_ROOT)/lib/$(OSNAME)_x86_32_host/$(CONFIG)/$(1).lib $(NACL_SDK_ROOT)/lib/$(OSNAME)_x86_32_host/$(CONFIG)/$(1).lib : $(foreach src,$(2),$(OUTDIR)/$(basename $(src)).o) $(MKDIR) -p $$(dir $$@) diff --git a/native_client_sdk/src/tools/nacl_gcc.mk b/native_client_sdk/src/tools/nacl_gcc.mk index 9a4fee1..e3ba889 100644 --- a/native_client_sdk/src/tools/nacl_gcc.mk +++ b/native_client_sdk/src/tools/nacl_gcc.mk @@ -42,24 +42,26 @@ ARM_LIB?=$(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin/arm-nacl-ar r # $2 = Compile Flags # define C_COMPILER_RULE -$(OUTDIR)/$(basename $(1))_x86_32.o : $(1) $(TOP_MAKE) | $(OUTDIR) +-include $(OUTDIR)/$(basename $(1))_*.d +$(OUTDIR)/$(basename $(1))_x86_32.o : $(1) $(TOP_MAKE) | $(dir $(OUTDIR)/$(basename $(1)))dir.stamp $(X86_CC) -o $$@ -c $$< -m32 $(POSIX_FLAGS) $(2) $(NACL_CFLAGS) -$(OUTDIR)/$(basename $(1))_x86_64.o : $(1) $(TOP_MAKE) | $(OUTDIR) +$(OUTDIR)/$(basename $(1))_x86_64.o : $(1) $(TOP_MAKE) | $(dir $(OUTDIR)/$(basename $(1)))dir.stamp $(X86_CC) -o $$@ -c $$< -m64 $(POSIX_FLAGS) $(2) $(NACL_CFLAGS) -$(OUTDIR)/$(basename $(1))_arm.o : $(1) $(TOP_MAKE) | $(OUTDIR) +$(OUTDIR)/$(basename $(1))_arm.o : $(1) $(TOP_MAKE) | $(dir $(OUTDIR)/$(basename $(1)))dir.stamp $(ARM_CC) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CFLAGS) endef define CXX_COMPILER_RULE -$(OUTDIR)/$(basename $(1))_x86_32.o : $(1) $(TOP_MAKE) | $(OUTDIR) +-include $(OUTDIR)/$(basename $(1))_*.d +$(OUTDIR)/$(basename $(1))_x86_32.o : $(1) $(TOP_MAKE) | $(dir $(OUTDIR)/$(basename $(1)))dir.stamp $(X86_CXX) -o $$@ -c $$< -m32 $(POSIX_FLAGS) $(2) $(NACL_CXXFLAGS) -$(OUTDIR)/$(basename $(1))_x86_64.o : $(1) $(TOP_MAKE) | $(OUTDIR) +$(OUTDIR)/$(basename $(1))_x86_64.o : $(1) $(TOP_MAKE) | $(dir $(OUTDIR)/$(basename $(1)))dir.stamp $(X86_CXX) -o $$@ -c $$< -m64 $(POSIX_FLAGS) $(2) $(NACL_CXXFLAGS) -$(OUTDIR)/$(basename $(1))_arm.o : $(1) $(TOP_MAKE) | $(OUTDIR) +$(OUTDIR)/$(basename $(1))_arm.o : $(1) $(TOP_MAKE) | $(dir $(OUTDIR)/$(basename $(1)))dir.stamp $(ARM_CXX) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CXXFLAGS) endef @@ -111,6 +113,15 @@ endef # $4 = VC Link Flags (unused) # define LIB_RULE +$(STAMPDIR)/$(1).stamp : $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).a +$(STAMPDIR)/$(1).stamp : $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).a +ifneq ('glibc','$(TOOLCHAIN)') +$(STAMPDIR)/$(1).stamp : $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).a +endif + +$(STAMPDIR)/$(1).stamp : + @echo "TOUCHED $$@" > $(STAMPDIR)/$(1).stamp + all: $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).a $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).a : $(foreach src,$(2),$(OUTDIR)/$(basename $(src))_x86_32.o) $(MKDIR) -p $$(dir $$@) @@ -129,7 +140,8 @@ $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).a : $(foreach src,$(2),$ $(ARM_LIB) $$@ $$^ endef - +infos: + echo $(STAMPDIR) # # Specific Link Macro # @@ -141,14 +153,14 @@ endef # $6 = Library Paths # define LINKER_RULE -$(OUTDIR)/$(1)_x86_32.nexe : $(foreach src,$(2),$(OUTDIR)/$(basename $(src))_x86_32.o) $(4) - $(X86_LINK) -o $$@ $$(filter-out $(4),$$^) -m32 $(foreach path,$(6),-L$(path)/$(TOOLCHAIN)_x86_32/$(CONFIG)) $(foreach lib,$(3),-l$(lib)) $(5) +$(OUTDIR)/$(1)_x86_32.nexe : $(foreach src,$(2),$(OUTDIR)/$(basename $(src))_x86_32.o) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) + $(X86_LINK) -o $$@ $$(filter %.o,$$^) -m32 $(foreach path,$(6),-L$(path)/$(TOOLCHAIN)_x86_32/$(CONFIG)) $(foreach lib,$(3),-l$(lib)) $(5) -$(OUTDIR)/$(1)_x86_64.nexe : $(foreach src,$(2),$$(OUTDIR)/$(basename $(src))_x86_64.o) $(4) - $(X86_LINK) -o $$@ $$(filter-out $(4),$$^) -m64 $(foreach path,$(6),-L$(path)/$(TOOLCHAIN)_x86_64/$(CONFIG)) $(foreach lib,$(3),-l$(lib)) $(5) +$(OUTDIR)/$(1)_x86_64.nexe : $(foreach src,$(2),$$(OUTDIR)/$(basename $(src))_x86_64.o) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) + $(X86_LINK) -o $$@ $$(filter %.o,$$^) -m64 $(foreach path,$(6),-L$(path)/$(TOOLCHAIN)_x86_64/$(CONFIG)) $(foreach lib,$(3),-l$(lib)) $(5) -$(OUTDIR)/$(1)_arm.nexe : $(foreach src,$(2),$(OUTDIR)/$(basename $(src))_arm.o) $(4) - $(ARM_LINK) -o $$@ $$(filter-out $(4),$$^) $(foreach path,$(6),-L$(path)/$(TOOLCHAIN)_arm/$(CONFIG)) $(foreach lib,$(3),-l$(lib)) $(5) +$(OUTDIR)/$(1)_arm.nexe : $(foreach src,$(2),$(OUTDIR)/$(basename $(src))_arm.o) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) + $(ARM_LINK) -o $$@ $$(filter %.o,$$^) $(foreach path,$(6),-L$(path)/$(TOOLCHAIN)_arm/$(CONFIG)) $(foreach lib,$(3),-l$(lib)) $(5) endef diff --git a/native_client_sdk/src/tools/nacl_llvm.mk b/native_client_sdk/src/tools/nacl_llvm.mk index 0a4bdc5..2207edd 100644 --- a/native_client_sdk/src/tools/nacl_llvm.mk +++ b/native_client_sdk/src/tools/nacl_llvm.mk @@ -26,12 +26,14 @@ PNACL_LIB?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/newlib/bin/pnacl-ar r # $3 = Include Directories # define C_COMPILER_RULE -$(OUTDIR)/$(basename $(1))_pnacl.o : $(1) $(TOP_MAKE) | $(OUTDIR) +-include $(OUTDIR)/$(basename $(1))_pnacl.d +$(OUTDIR)/$(basename $(1))_pnacl.o : $(1) $(TOP_MAKE) | $(dir $(OUTDIR)/$(basename $(1)))dir.stamp $(PNACL_CC) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CFLAGS) endef define CXX_COMPILER_RULE -$(OUTDIR)/$(basename $(1))_pnacl.o : $(1) $(TOP_MAKE) | $(OUTDIR) +-include $(OUTDIR)/$(basename $(1))_pnacl.d +$(OUTDIR)/$(basename $(1))_pnacl.o : $(1) $(TOP_MAKE) | $(dir $(OUTDIR)/$(basename $(1)))dir.stamp $(PNACL_CXX) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CFLAGS) endef @@ -69,6 +71,9 @@ endef # $3 = POSIX Link Flags # $4 = VC Link Flags (unused) define LIB_RULE +$(STAMPDIR)/$(1).stamp : $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)/$(CONFIG)/lib$(1).a + @echo "TOUCHED $$@" > $(STAMPDIR)/$(1).stamp + all: $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)/$(CONFIG)/lib$(1).a $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)/$(CONFIG)/lib$(1).a : $(foreach src,$(2),$(OUTDIR)/$(basename $(src))_pnacl.o) $(MKDIR) -p $$(dir $$@) @@ -88,7 +93,7 @@ endef # define LINKER_RULE all: $(1) -$(1) : $(2) $(4) +$(1) : $(2) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) $(PNACL_LINK) -o $(1) $(2) $(foreach path,$(5),-L$(path)/pnacl/$(CONFIG)) $(foreach lib,$(3),-l$(lib)) $(6) endef |