Index: native_client_sdk/src/tools/common.mk |
diff --git a/native_client_sdk/src/tools/common.mk b/native_client_sdk/src/tools/common.mk |
index 45917dcebd08b330c87c2521741405f65f68837b..5797755eebac55d09e7b9d2dca5a6ab8a6c3dc17 100644 |
--- a/native_client_sdk/src/tools/common.mk |
+++ b/native_client_sdk/src/tools/common.mk |
@@ -128,6 +128,9 @@ X86_LINK?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin/i686-nacl-g++ -Wl,-as-needed |
ARM_CXX?=$(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin/arm-nacl-g++ |
ARM_LINK?=$(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin/arm-nacl-g++ -Wl,-as-needed |
+PNACL_CXX?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/newlib/bin/pnacl-clang++ -c |
+PNACL_LINK?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/newlib/bin/pnacl-clang++ |
+ |
# |
# Rules for output directories. |
@@ -147,6 +150,18 @@ OUTDIR:=$(TOOLCHAIN)/$(CONFIG) |
# |
+# Dependency Macro |
+# |
+# $1 = Name of dependency |
+# |
+define DEPEND_RULE |
+.PHONY: $(1) |
+$(1): |
+ +$(MAKE) -C $(NACL_SDK_ROOT)/src/$(1) |
+DEPS_LIST+=$(1) |
+endef |
+ |
+# |
# Compile Macro |
# |
# $1 = Source Name |
@@ -170,6 +185,9 @@ $(OUTDIR)/$(basename $(1))_x86_64.o : $(1) $(THIS_MAKE) | $(OUTDIR) |
$(OUTDIR)/$(basename $(1))_arm.o : $(1) $(THIS_MAKE) | $(OUTDIR) |
$(ARM_CXX) -o $$@ -c $$< $(OPT_FLAGS) $(CXX_FLAGS) $(NACL_WARNINGS) |
+ |
+$(OUTDIR)/$(basename $(1))_pnacl.o : $(1) $(THIS_MAKE) | $(OUTDIR) |
+ $(PNACL_CXX) -o $$@ -c $$< $(OPT_FLAGS) $(CXX_FLAGS) $(NACL_WARNINGS) |
endef |
@@ -205,9 +223,14 @@ $(OUTDIR)/$(1)_x86_64.nexe : $(foreach src,$(2),$(OUTDIR)/$(basename $(src))_x86 |
NMF_TARGETS+=$(OUTDIR)/$(1)_arm.nexe |
$(OUTDIR)/$(1)_arm.nexe : $(foreach src,$(2),$(OUTDIR)/$(basename $(src))_arm.o) |
$(ARM_LINK) -o $$@ $$^ $(LD_ARM) $(LD_FLAGS) $(foreach lib,$(LIBS),-l$(lib)) |
+ |
+NMF_TARGETS+=$(OUTDIR)/$(1).pexe |
+$(OUTDIR)/$(1).pexe : $(foreach src,$(2),$(OUTDIR)/$(basename $(src))_pnacl.o) |
+ $(PNACL_LINK) -o $$@ $$^ $(LD_PNACL) $(LD_FLAGS) $(foreach lib,$(LIBS),-l$(lib)) |
endef |
+ |
# |
# Generate NMF_TARGETS |
# |
@@ -215,6 +238,11 @@ ARCHES=x86_32 x86_64 |
ifeq "newlib" "$(TOOLCHAIN)" |
ARCHES+=arm |
endif |
+NMF_ARCHES:=$(foreach arch,$(ARCHES),_$(arch).nexe) |
+ |
+ifeq "pnacl" "$(TOOLCHAIN)" |
+NMF_ARCHES:=.pexe |
+endif |
# |
@@ -234,9 +262,51 @@ GLIBC_PATHS:=-L $(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/lib32 |
GLIBC_PATHS+=-L $(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/lib |
define NMF_RULE |
-$(OUTDIR)/$(1).nmf : $(foreach arch,$(ARCHES),$(OUTDIR)/$(1)_$(arch).nexe) |
- $(NMF) -o $$@ $$^ -D $(GLIBC_DUMP) $(GLIBC_PATHS) $(2) |
+$(OUTDIR)/$(1).nmf : $(foreach arch,$(NMF_ARCHES),$(OUTDIR)/$(1)$(arch)) |
+ $(NMF) -o $$@ $$^ -D $(GLIBC_DUMP) $(GLIBC_PATHS) -s $(OUTDIR) $(2) |
-all : $(OUTDIR)/$(1).nmf |
+all : $(DEPS_LIST) $(OUTDIR)/$(1).nmf |
endef |
+ |
+# |
+# Verify we can find the Chrome executable if we need to launch it. |
+# |
+.PHONY: CHECK_FOR_CHROME RUN LAUNCH |
+CHECK_FOR_CHROME: |
+ifeq (,$(wildcard $(CHROME_PATH))) |
+ $(warning No valid Chrome found at CHROME_PATH=$(CHROME_PATH)) |
+ $(error Set CHROME_PATH via an environment variable, or command-line.) |
+else |
+ $(warning Using chrome at: $(CHROME_PATH)) |
+endif |
+ |
+ |
+# |
+# Variables for running examples with Chrome. |
+# |
+RUN_PY:=python $(NACL_SDK_ROOT)/tools/run.py |
+ |
+# Add this to launch Chrome with additional environment variables defined. |
+# Each element should be specified as KEY=VALUE, with whitespace separating |
+# key-value pairs. e.g. |
+# CHROME_ENV=FOO=1 BAR=2 BAZ=3 |
+CHROME_ENV?= |
+ |
+# Additional arguments to pass to Chrome. |
+CHROME_ARGS+=--enable-nacl --enable-pnacl --incognito --ppapi-out-of-process |
+ |
+ |
+CONFIG?=Debug |
+PAGE?=index_$(TOOLCHAIN)_$(CONFIG).html |
+ |
+RUN: LAUNCH |
+LAUNCH: CHECK_FOR_CHROME all |
+ifeq (,$(wildcard $(PAGE))) |
+ $(warning No valid HTML page found at $(PAGE)) |
+ $(error Make sure TOOLCHAIN and CONFIG are properly set) |
+endif |
+ $(RUN_PY) -C $(THIS_DIR) -P $(PAGE) $(addprefix -E ,$(CHROME_ENV)) -- \ |
+ $(CHROME_PATH) $(CHROME_ARGS) \ |
+ --register-pepper-plugins="$(PPAPI_DEBUG),$(PPAPI_RELEASE)" |
+ |