From 702b800e440edc85f81bbc69f1a03e854364d696 Mon Sep 17 00:00:00 2001 From: "jvoung@chromium.org" Date: Thu, 11 Apr 2013 17:01:51 +0000 Subject: [PATCH] nacl-sdk: Add a PNaCl finalize step to the Release builds for SDK examples. For PNaCl bitcode stability we need to strip metadata, such as debug since the debug metadata is still evolving. We want to show developers that this is part of the workflow. Add a release build of the examples to test this out. Adds ~1 min 40 to windows build. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3348 NOTRY=true Review URL: https://chromiumcodereview.appspot.com/13466021 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@193671 0039d316-1c4b-4281-b951-d872f2087c98 --- native_client_sdk/src/build_tools/template.mk | 5 ++++ native_client_sdk/src/build_tools/test_sdk.py | 8 +++++-- native_client_sdk/src/tools/host_gcc.mk | 16 +++++++++++++ native_client_sdk/src/tools/host_vc.mk | 15 ++++++++++++ native_client_sdk/src/tools/nacl_gcc.mk | 33 +++++++++++++++++++++++++++ native_client_sdk/src/tools/nacl_llvm.mk | 14 +++++++++++- 6 files changed, 88 insertions(+), 3 deletions(-) diff --git a/native_client_sdk/src/build_tools/template.mk b/native_client_sdk/src/build_tools/template.mk index ca5f2d42e3d4..d240f1f915e3 100644 --- a/native_client_sdk/src/build_tools/template.mk +++ b/native_client_sdk/src/build_tools/template.mk @@ -94,7 +94,12 @@ $(eval $(call SO_RULE,{{name}},$({{name}}_SOURCES))) [[ elif target['TYPE'] == 'so-standalone':]] $(eval $(call SO_RULE,{{name}},$({{name}}_SOURCES),,,1)) [[ else:]] +ifeq ($(CONFIG),Release) +$(eval $(call LINK_RULE,{{name}}_unstripped,$({{name}}_SOURCES),$(LIBS),$(DEPS))) +$(eval $(call STRIP_RULE,{{name}},{{name}}_unstripped)) +else $(eval $(call LINK_RULE,{{name}},$({{name}}_SOURCES),$(LIBS),$(DEPS))) +endif [[]] # diff --git a/native_client_sdk/src/build_tools/test_sdk.py b/native_client_sdk/src/build_tools/test_sdk.py index f245fb40b113..6e7a841fe8a9 100755 --- a/native_client_sdk/src/build_tools/test_sdk.py +++ b/native_client_sdk/src/build_tools/test_sdk.py @@ -37,8 +37,12 @@ TEST_LIBRARY_LIST = [ def BuildStepBuildExamples(pepperdir, platform): - build_sdk.BuildStepMakeAll(pepperdir, platform, 'examples', 'Build Examples', - deps=False) + build_sdk.BuildStepMakeAll(pepperdir, platform, 'examples', + 'Build Examples (Debug)', + deps=False, config='Debug') + build_sdk.BuildStepMakeAll(pepperdir, platform, 'examples', + 'Build Examples (Release)', + deps=False, config='Release') def BuildStepCopyTests(pepperdir, toolchains, build_experimental, clobber): diff --git a/native_client_sdk/src/tools/host_gcc.mk b/native_client_sdk/src/tools/host_gcc.mk index f7767390b65f..386cf9d35a92 100644 --- a/native_client_sdk/src/tools/host_gcc.mk +++ b/native_client_sdk/src/tools/host_gcc.mk @@ -19,6 +19,7 @@ HOST_CC?=gcc HOST_CXX?=g++ HOST_LINK?=g++ HOST_LIB?=ar r +HOST_STRIP?=strip ifeq (,$(findstring gcc,$(shell $(WHICH) gcc))) $(warning To skip the host build use:) @@ -125,3 +126,18 @@ $(call LINKER_RULE,$(OUTDIR)/$(1)$(HOST_EXT),$(foreach src,$(2),$(call SRC_TO_OB endef all : $(LIB_LIST) $(DEPS_LIST) + + +# +# Strip Macro +# The host build makes shared libraries, so the best we can do is strip-debug. +# We cannot strip the symbol names. +# +# $1 = Target Name +# $2 = Input Name +# +define STRIP_RULE +all: $(OUTDIR)/$(1)$(HOST_EXT) +$(OUTDIR)/$(1)$(HOST_EXT): $(OUTDIR)/$(2)$(HOST_EXT) + $(call LOG,STRIP,$$@,$(HOST_STRIP) --strip-debug -o $$@ $$^) +endef diff --git a/native_client_sdk/src/tools/host_vc.mk b/native_client_sdk/src/tools/host_vc.mk index ac2fbd4fd11e..2f7b6a97e87b 100644 --- a/native_client_sdk/src/tools/host_vc.mk +++ b/native_client_sdk/src/tools/host_vc.mk @@ -115,4 +115,19 @@ define LINK_RULE $(call LINKER_RULE,$(OUTDIR)/$(1)$(HOST_EXT),$(foreach src,$(2),$(OUTDIR)/$(basename $(src)).o),$(3),$(4),$(LIB_PATHS),$(6)) endef + +# +# Strip Macro +# This is a nop (copy) since visual studio already keeps debug info +# separate from the binaries +# +# $1 = Target Name +# $2 = Input Name +# +define STRIP_RULE +all: $(OUTDIR)/$(1)$(HOST_EXT) +$(OUTDIR)/$(1)$(HOST_EXT): $(OUTDIR)/$(2)$(HOST_EXT) + $(call LOG,COPY,$$@,$(CP) $$^ $$@) +endef + all : $(LIB_LIST) $(DEPS_LIST) diff --git a/native_client_sdk/src/tools/nacl_gcc.mk b/native_client_sdk/src/tools/nacl_gcc.mk index ea7d869f3cd7..bdbe33dd7a3d 100644 --- a/native_client_sdk/src/tools/nacl_gcc.mk +++ b/native_client_sdk/src/tools/nacl_gcc.mk @@ -28,16 +28,19 @@ X86_32_CC?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin/i686-nacl-gcc X86_32_CXX?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin/i686-nacl-g++ X86_32_LINK?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin/i686-nacl-g++ X86_32_LIB?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin/i686-nacl-ar +X86_32_STRIP?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin/i686-nacl-strip X86_64_CC?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin/x86_64-nacl-gcc X86_64_CXX?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin/x86_64-nacl-g++ X86_64_LINK?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin/x86_64-nacl-g++ X86_64_LIB?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin/x86_64-nacl-ar +X86_64_STRIP?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin/x86_64-nacl-strip ARM_CC?=$(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin/arm-nacl-gcc ARM_CXX?=$(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin/arm-nacl-g++ ARM_LINK?=$(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin/arm-nacl-g++ ARM_LIB?=$(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin/arm-nacl-ar +ARM_STRIP?=$(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin/arm-nacl-strip # Architecture-specific flags @@ -204,6 +207,35 @@ endef # +# Strip Macro for each arch (e.g., each arch supported by LINKER_RULE). +# +# $1 = Target Name +# $2 = Source Name +# +define STRIP_ALL_RULE +$(OUTDIR)/$(1)_x86_32.nexe : $(OUTDIR)/$(2)_x86_32.nexe + $(call LOG,STRIP,$$@,$(X86_32_STRIP) -o $$@ $$^) + +$(OUTDIR)/$(1)_x86_64.nexe : $(OUTDIR)/$(2)_x86_64.nexe + $(call LOG,STRIP,$$@,$(X86_64_STRIP) -o $$@ $$^) + +$(OUTDIR)/$(1)_arm.nexe : $(OUTDIR)/$(2)_arm.nexe + $(call LOG,STRIP,$$@,$(ARM_STRIP) -o $$@ $$^) +endef + + +# +# Top-level Strip Macro +# +# $1 = Target Basename +# $2 = Source Basename +# +define STRIP_RULE +$(call STRIP_ALL_RULE,$(1),$(2)) +endef + + +# # Determine which architectures to build for. The user can set NACL_ARCH or # ARCHES in the environment to control this. # @@ -221,6 +253,7 @@ else ARCHES?=${VALID_ARCHES} endif + # # Generate NMF_TARGETS # diff --git a/native_client_sdk/src/tools/nacl_llvm.mk b/native_client_sdk/src/tools/nacl_llvm.mk index 429b6e392827..271b2895cb7a 100644 --- a/native_client_sdk/src/tools/nacl_llvm.mk +++ b/native_client_sdk/src/tools/nacl_llvm.mk @@ -16,7 +16,7 @@ PNACL_CC?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/newlib/bin/pnacl-clang -c PNACL_CXX?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/newlib/bin/pnacl-clang++ -c PNACL_LINK?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/newlib/bin/pnacl-clang++ PNACL_LIB?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/newlib/bin/pnacl-ar r - +PNACL_STRIP?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/newlib/bin/pnacl-finalize # # Compile Macro @@ -113,6 +113,18 @@ $(call LINKER_RULE,$(OUTDIR)/$(1).pexe,$(foreach src,$(2),$(call SRC_TO_OBJ,$(sr endef +# +# Strip Macro +# +# $1 = Target Name +# $2 = Input Name +# +define STRIP_RULE +all: $(OUTDIR)/$(1).pexe +$(OUTDIR)/$(1).pexe: $(OUTDIR)/$(2).pexe + $(call LOG,STRIP,$$@,$(PNACL_STRIP) -o $$@ $$^) +endef + # # NMF Manifiest generation -- 2.11.4.GIT