summaryrefslogtreecommitdiffstats
path: root/native_client_sdk
diff options
context:
space:
mode:
authornoelallen@google.com <noelallen@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-09 00:18:12 +0000
committernoelallen@google.com <noelallen@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-09 00:18:12 +0000
commit4609861bd20bafe318cf3de8abbf6f661299579d (patch)
treee39003019a5866df7a02812b902f55a2d24bdde7 /native_client_sdk
parentf74a281fe4ea2dfb8ca0ef3e3127141b3c72d2dc (diff)
downloadchromium_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.mk38
-rw-r--r--native_client_sdk/src/tools/host_gcc.mk11
-rw-r--r--native_client_sdk/src/tools/host_vc.mk9
-rw-r--r--native_client_sdk/src/tools/nacl_gcc.mk38
-rw-r--r--native_client_sdk/src/tools/nacl_llvm.mk11
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