12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# GNU Make based build file. For details on GNU Make see: 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# http://www.gnu.org/software/make/manual/make.html 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)# Default library paths 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)LD_X86_32 := -L$(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_32/$(CONFIG) 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)LD_X86_64 := -L$(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_64/$(CONFIG) 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)LD_ARM := -L$(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_arm/$(CONFIG) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Macros for TOOLS 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# We always link with the C++ compiler but include -Wl,-as-needed flag 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# in LD_FLAGS so the linker should drop libc++ unless it's actually needed. 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochX86_TC_BIN ?= $(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochARM_TC_BIN ?= $(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochX86_32_CC ?= $(NACL_COMPILER_PREFIX) $(X86_TC_BIN)/i686-nacl-gcc 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochX86_32_CXX ?= $(NACL_COMPILER_PREFIX) $(X86_TC_BIN)/i686-nacl-g++ 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochX86_32_LINK ?= $(X86_TC_BIN)/i686-nacl-g++ 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochX86_32_LIB ?= $(X86_TC_BIN)/i686-nacl-ar 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochX86_32_STRIP ?= $(X86_TC_BIN)/i686-nacl-strip 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochX86_32_NM ?= $(X86_TC_BIN)/i686-nacl-nm 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochX86_64_CC ?= $(NACL_COMPILER_PREFIX) $(X86_TC_BIN)/x86_64-nacl-gcc 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochX86_64_CXX ?= $(NACL_COMPILER_PREFIX) $(X86_TC_BIN)/x86_64-nacl-g++ 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochX86_64_LINK ?= $(X86_TC_BIN)/x86_64-nacl-g++ 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochX86_64_LIB ?= $(X86_TC_BIN)/x86_64-nacl-ar 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochX86_64_STRIP ?= $(X86_TC_BIN)/x86_64-nacl-strip 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochX86_64_NM ?= $(X86_TC_BIN)/x86_64-nacl-nm 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochARM_CC ?= $(NACL_COMPILER_PREFIX) $(ARM_TC_BIN)/arm-nacl-gcc 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochARM_CXX ?= $(NACL_COMPILER_PREFIX) $(ARM_TC_BIN)/arm-nacl-g++ 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochARM_LINK ?= $(ARM_TC_BIN)/arm-nacl-g++ 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochARM_LIB ?= $(ARM_TC_BIN)/arm-nacl-ar 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochARM_STRIP ?= $(ARM_TC_BIN)/arm-nacl-strip 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochARM_NM ?= $(ARM_TC_BIN)/arm-nacl-nm 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# Architecture-specific flags 50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)X86_32_CFLAGS ?= 51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)X86_64_CFLAGS ?= 52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)ARM_CFLAGS ?= 53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)X86_32_CXXFLAGS ?= 55868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)X86_64_CXXFLAGS ?= 56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)ARM_CXXFLAGS ?= 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochX86_32_LDFLAGS ?= -Wl,-Map,$(OUTDIR)/$(TARGET)_x86_32.map 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochX86_64_LDFLAGS ?= -Wl,-Map,$(OUTDIR)/$(TARGET)_x86_64.map 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochARM_LDFLAGS ?= -Wl,-Map,$(OUTDIR)/$(TARGET)_arm.map 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Compile Macro 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Source Name 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = Compile Flags 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define C_COMPILER_RULE 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)-include $(call SRC_TO_DEP,$(1),_x86_32) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call SRC_TO_OBJ,$(1),_x86_32): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 71a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,CC ,$$@,$(X86_32_CC) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CFLAGS) $(X86_32_CFLAGS)) 727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_x86_32) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)-include $(call SRC_TO_DEP,$(1),_x86_64) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call SRC_TO_OBJ,$(1),_x86_64): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 76a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,CC ,$$@,$(X86_64_CC) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CFLAGS) $(X86_64_CFLAGS)) 777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_x86_64) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)-include $(call SRC_TO_DEP,$(1),_arm) 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call SRC_TO_OBJ,$(1),_arm): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 81a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,CC ,$$@,$(ARM_CC) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CFLAGS) $(ARM_CFLAGS)) 827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_arm) 83a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 84a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)-include $(call SRC_TO_DEP,$(1),_x86_32_pic) 85a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)$(call SRC_TO_OBJ,$(1),_x86_32_pic): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 86a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,CC ,$$@,$(X86_32_CC) -o $$@ -c $$< -fPIC $(POSIX_FLAGS) $(2) $(NACL_CFLAGS) $(X86_32_CFLAGS)) 877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_x86_32_pic) 88a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 89a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)-include $(call SRC_TO_DEP,$(1),_x86_64_pic) 90a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)$(call SRC_TO_OBJ,$(1),_x86_64_pic): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 91a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,CC ,$$@,$(X86_64_CC) -o $$@ -c $$< -fPIC $(POSIX_FLAGS) $(2) $(NACL_CFLAGS) $(X86_64_CFLAGS)) 927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_x86_64_pic) 93a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 94a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)-include $(call SRC_TO_DEP,$(1),_arm_pic) 95a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)$(call SRC_TO_OBJ,$(1),_arm_pic): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 96a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,CC ,$$@,$(ARM_CC) -o $$@ -c $$< -fPIC $(POSIX_FLAGS) $(2) $(NACL_CFLAGS) $(ARM_CFLAGS)) 977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_arm_pic) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define CXX_COMPILER_RULE 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)-include $(call SRC_TO_DEP,$(1),_x86_32) 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call SRC_TO_OBJ,$(1),_x86_32): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 103a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,CXX ,$$@,$(X86_32_CXX) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CXXFLAGS) $(X86_32_CXXFLAGS)) 1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_x86_32) 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)-include $(call SRC_TO_DEP,$(1),_x86_64) 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call SRC_TO_OBJ,$(1),_x86_64): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 108a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,CXX ,$$@,$(X86_64_CXX) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CXXFLAGS) $(X86_64_CXXFLAGS)) 1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_x86_64) 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)-include $(call SRC_TO_DEP,$(1),_arm) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call SRC_TO_OBJ,$(1),_arm): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 113a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,CXX ,$$@,$(ARM_CXX) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CXXFLAGS) $(ARM_CXXFLAGS)) 1147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_arm) 115a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 116a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)-include $(call SRC_TO_DEP,$(1),_x86_32_pic) 117a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)$(call SRC_TO_OBJ,$(1),_x86_32_pic): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 118a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,CXX ,$$@,$(X86_32_CXX) -o $$@ -c $$< -fPIC $(POSIX_FLAGS) $(2) $(NACL_CXXFLAGS) $(X86_32_CXXFLAGS)) 1197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_x86_32_pic) 120a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 121a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)-include $(call SRC_TO_DEP,$(1),_x86_64_pic) 122a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)$(call SRC_TO_OBJ,$(1),_x86_64_pic): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 123a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,CXX ,$$@,$(X86_64_CXX) -o $$@ -c $$< -fPIC $(POSIX_FLAGS) $(2) $(NACL_CXXFLAGS) $(X86_64_CXXFLAGS)) 1247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_x86_64_pic) 125a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 126a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)-include $(call SRC_TO_DEP,$(1),_arm_pic) 127a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)$(call SRC_TO_OBJ,$(1),_arm_pic): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 128a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,CXX ,$$@,$(ARM_CXX) -o $$@ -c $$< -fPIC $(POSIX_FLAGS) $(2) $(NACL_CXXFLAGS) $(ARM_CXXFLAGS)) 1297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_arm_pic) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Source Name 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = POSIX Compile Flags 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $3 = Include Directories 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $4 = VC Flags (unused) 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define COMPILE_RULE 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ifeq ($(suffix $(1)),.c) 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call C_COMPILER_RULE,$(1),$(2) $(foreach inc,$(INC_PATHS),-I$(inc)) $(3)) 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)else 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call CXX_COMPILER_RULE,$(1),$(2) $(foreach inc,$(INC_PATHS),-I$(inc)) $(3)) 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endif 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 1487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch# Determine which architectures to build for. The user can set NACL_ARCH or 1497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch# ARCHES in the environment to control this. 1507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch# 1517dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochVALID_ARCHES := x86_32 x86_64 1527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochifeq (newlib,$(TOOLCHAIN)) 1537dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochVALID_ARCHES += arm 1547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochendif 1557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochifdef NACL_ARCH 1577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochifeq (,$(findstring $(NACL_ARCH),$(VALID_ARCHES))) 1587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch$(error Invalid arch specified in NACL_ARCH: $(NACL_ARCH). Valid values are: $(VALID_ARCHES)) 1597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochendif 1607dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochARCHES = ${NACL_ARCH} 1617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochelse 1627dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochARCHES ?= ${VALID_ARCHES} 1637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochendif 1647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 165ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochGLIBC_REMAP := 166ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch# 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# SO Macro 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 170ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch# As well as building and installing a shared library this rule adds dependencies 171ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch# on the library's .stamp file in STAMPDIR. However, the rule for creating the stamp 172ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch# file is part of LIB_RULE, so users of the DEPS system are currently required to 173ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch# use the LIB_RULE macro as well as the SO_RULE for each shared library. 174ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch# 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Target Name 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = List of Sources 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $3 = List of LIBS 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $4 = List of DEPS 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $5 = 1 => Don't add to NMF. 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define SO_RULE 1827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochifneq (,$(findstring x86_32,$(ARCHES))) 183a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)all: $(OUTDIR)/lib$(1)_x86_32.so 184a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)$(OUTDIR)/lib$(1)_x86_32.so: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_32_pic)) $(4) 185a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,LINK,$$@,$(X86_32_LINK) -o $$@ $$(filter-out $(4),$$^) -shared -m32 $(LD_X86_32) $$(LD_FLAGS) $(foreach lib,$(3),-l$(lib))) 186a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 187ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch$(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).so 188a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)install: $(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).so 189a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)$(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).so: $(OUTDIR)/lib$(1)_x86_32.so 190a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(MKDIR) -p $$(dir $$@) 191a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,CP ,$$@,$(OSHELPERS) cp $$^ $$@) 1927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochifneq ($(5),1) 1937dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochGLIBC_SO_LIST += $(OUTDIR)/lib$(1)_x86_32.so 1947dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochGLIBC_REMAP += -n lib$(1)_x86_32.so,lib$(1).so 1957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochendif 1967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochendif 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochifneq (,$(findstring x86_64,$(ARCHES))) 199a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)all: $(OUTDIR)/lib$(1)_x86_64.so 200a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)$(OUTDIR)/lib$(1)_x86_64.so: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_64_pic)) $(4) 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) $(call LOG,LINK,$$@,$(X86_32_LINK) -o $$@ $$(filter-out $(4),$$^) -shared -m64 $(LD_X86_64) $$(LD_FLAGS) $(foreach lib,$(3),-l$(lib))) 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 203ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch$(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).so 204a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)install: $(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).so 205a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)$(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).so: $(OUTDIR)/lib$(1)_x86_64.so 206a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(MKDIR) -p $$(dir $$@) 207a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,CP ,$$@,$(OSHELPERS) cp $$^ $$@) 208a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)ifneq ($(5),1) 2097dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochGLIBC_SO_LIST += $(OUTDIR)/lib$(1)_x86_64.so 2107dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochGLIBC_REMAP += -n lib$(1)_x86_64.so,lib$(1).so 2117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochendif 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endif 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# LIB Macro 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Target Name 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = List of Sources 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $3 = POSIX Link Flags 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $4 = VC Link Flags (unused) 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define LIB_RULE 2247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)$(STAMPDIR)/$(1).stamp: 225ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch @echo " STAMP $$@" 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @echo "TOUCHED $$@" > $(STAMPDIR)/$(1).stamp 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochifneq (,$(findstring x86_32,$(ARCHES))) 229a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)all: $(OUTDIR)/lib$(1)_x86_32.a 230a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)$(OUTDIR)/lib$(1)_x86_32.a: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_32)) 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) $(MKDIR) -p $$(dir $$@) 232a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,LIB ,$$@,$(X86_32_LIB) -cr $$@ $$^) 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 234ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch$(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).a 235a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)install: $(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).a 236a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)$(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).a: $(OUTDIR)/lib$(1)_x86_32.a 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) $(MKDIR) -p $$(dir $$@) 238a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,CP ,$$@,$(OSHELPERS) cp $$^ $$@) 2397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochendif 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochifneq (,$(findstring x86_64,$(ARCHES))) 242a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)all: $(OUTDIR)/lib$(1)_x86_64.a 243a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)$(OUTDIR)/lib$(1)_x86_64.a: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_64)) 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) $(MKDIR) -p $$(dir $$@) 245a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,LIB ,$$@,$(X86_64_LIB) -cr $$@ $$^) 246a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 247ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch$(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).a 248a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)install: $(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).a 249a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)$(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).a: $(OUTDIR)/lib$(1)_x86_64.a 250a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(MKDIR) -p $$(dir $$@) 251a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,CP ,$$@,$(OSHELPERS) cp $$^ $$@) 2527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochendif 253a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 2547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochifneq (,$(findstring arm,$(ARCHES))) 255a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)ifneq ($(TOOLCHAIN),glibc) 256a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)all: $(OUTDIR)/lib$(1)_arm.a 257a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)$(OUTDIR)/lib$(1)_arm.a: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_arm)) 258a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(MKDIR) -p $$(dir $$@) 259a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,LIB ,$$@,$(ARM_LIB) -cr $$@ $$^) 260a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 261ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch$(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).a 262a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)install: $(LIBDIR)/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).a 263a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)$(LIBDIR)/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).a: $(OUTDIR)/lib$(1)_arm.a 264a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(MKDIR) -p $$(dir $$@) 265a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,CP ,$$@,$(OSHELPERS) cp $$^ $$@) 266a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)endif 2677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)endif 2687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochendef 2697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Specific Link Macro 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Target Name 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = List of Sources 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $3 = List of LIBS 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $4 = List of DEPS 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $5 = POSIX Link Flags 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $6 = Library Paths 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define LINKER_RULE 2827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ifneq (,$(findstring x86_32,$(ARCHES))) 2837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)all: $(OUTDIR)/$(1)_x86_32.nexe 2847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)$(OUTDIR)/$(1)_x86_32.nexe: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_32)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) 285eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch $(call LOG,LINK,$$@,$(X86_32_LINK) -o $$@ $$(filter %.o,$$^) $(NACL_LDFLAGS) $(X86_32_LDFLAGS) $(foreach path,$(6),-L$(path)/$(TOOLCHAIN)_x86_32/$(CONFIG)) $(foreach lib,$(3),-l$(lib)) $(5)) 2867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)endif 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ifneq (,$(findstring x86_64,$(ARCHES))) 2897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)all: $(OUTDIR)/$(1)_x86_64.nexe 2907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)$(OUTDIR)/$(1)_x86_64.nexe: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_64)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) 291eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch $(call LOG,LINK,$$@,$(X86_64_LINK) -o $$@ $$(filter %.o,$$^) $(NACL_LDFLAGS) $(X86_64_LDFLAGS) $(foreach path,$(6),-L$(path)/$(TOOLCHAIN)_x86_64/$(CONFIG)) $(foreach lib,$(3),-l$(lib)) $(5)) 2927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)endif 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ifneq (,$(findstring arm,$(ARCHES))) 2957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)all: $(OUTDIR)/$(1)_arm.nexe 2967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)$(OUTDIR)/$(1)_arm.nexe: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_arm)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) 297eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch $(call LOG,LINK,$$@,$(ARM_LINK) -o $$@ $$(filter %.o,$$^) $(NACL_LDFLAGS) $(ARM_LDFLAGS) $(foreach path,$(6),-L$(path)/$(TOOLCHAIN)_arm/$(CONFIG)) $(foreach lib,$(3),-l$(lib)) $(5)) 2987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)endif 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Generalized Link Macro 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Target Name 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = List of Sources 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $3 = List of LIBS 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $4 = List of DEPS 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $5 = POSIX Linker Switches 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $6 = VC Linker Switches 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define LINK_RULE 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call LINKER_RULE,$(1),$(2),$(filter-out pthread,$(3)),$(4),$(5),$(LIB_PATHS)) 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# Strip Macro for each arch (e.g., each arch supported by LINKER_RULE). 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# 320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# $1 = Target Name 321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# $2 = Source Name 322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# 323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)define STRIP_ALL_RULE 3247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ifneq (,$(findstring x86_32,$(ARCHES))) 3257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)$(OUTDIR)/$(1)_x86_32.nexe: $(OUTDIR)/$(2)_x86_32.nexe 326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) $(call LOG,STRIP,$$@,$(X86_32_STRIP) -o $$@ $$^) 3277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)endif 328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ifneq (,$(findstring x86_64,$(ARCHES))) 3307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)$(OUTDIR)/$(1)_x86_64.nexe: $(OUTDIR)/$(2)_x86_64.nexe 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) $(call LOG,STRIP,$$@,$(X86_64_STRIP) -o $$@ $$^) 3327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)endif 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ifneq (,$(findstring arm,$(ARCHES))) 3357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)$(OUTDIR)/$(1)_arm.nexe: $(OUTDIR)/$(2)_arm.nexe 336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) $(call LOG,STRIP,$$@,$(ARM_STRIP) -o $$@ $$^) 3377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)endif 338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)endef 339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 341c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# 342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# Top-level Strip Macro 343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# 344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# $1 = Target Basename 345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# $2 = Source Basename 346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# 347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)define STRIP_RULE 348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)$(call STRIP_ALL_RULE,$(1),$(2)) 349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)endef 350c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 351c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# 353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# Strip Macro for each arch (e.g., each arch supported by MAP_RULE). 354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# 355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# $1 = Target Name 356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# $2 = Source Name 357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# 358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)define MAP_ALL_RULE 3597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochifneq (,$(findstring x86_32,$(ARCHES))) 3607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochall: $(OUTDIR)/$(1)_x86_32.map 3617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)$(OUTDIR)/$(1)_x86_32.map: $(OUTDIR)/$(2)_x86_32.nexe 362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) $(call LOG,MAP,$$@,$(X86_32_NM) -l $$^ > $$@) 3637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochendif 364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochifneq (,$(findstring x86_64,$(ARCHES))) 3667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochall: $(OUTDIR)/$(1)_x86_64.map 3677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)$(OUTDIR)/$(1)_x86_64.map: $(OUTDIR)/$(2)_x86_64.nexe 368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) $(call LOG,MAP,$$@,$(X86_64_NM) -l $$^ > $$@) 3697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochendif 370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochifneq (,$(findstring arm,$(ARCHES))) 3727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochall: $(OUTDIR)/$(1)_arm.map 3737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)$(OUTDIR)/$(1)_arm.map: $(OUTDIR)/$(2)_arm.nexe 374c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) $(call LOG,MAP,$$@,$(ARM_NM) -l $$^ > $$@ ) 3757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochendif 376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)endef 377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# 380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# Top-level MAP Generation Macro 381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# 382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# $1 = Target Basename 383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# $2 = Source Basename 384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# 385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)define MAP_RULE 386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)$(call MAP_ALL_RULE,$(1),$(2)) 387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)endef 388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# 3917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)# Generate ARCH_SUFFIXES, a list of suffixes for executables corresponding to all 3927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)# the architectures in the current build. 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 3947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ARCH_SUFFIXES := $(foreach arch,$(ARCHES),_$(arch).nexe) 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# NMF Manifiest generation 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Use the python script create_nmf to scan the binaries for dependencies using 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# objdump. Pass in the (-L) paths to the default library toolchains so that we 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# can find those libraries and have it automatically copy the files (-s) to 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# the target directory for us. 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Target Name (the basename of the nmf 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = Additional create_nmf.py arguments 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 40890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)NMF := python $(NACL_SDK_ROOT)/tools/create_nmf.py 40990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)ifeq ($(CONFIG),Debug) 41090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)NMF_FLAGS += --debug-libs 411eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochHTML_FLAGS += --debug-libs 41290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)endif 413a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 414eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochEXECUTABLES=$(foreach arch,$(ARCH_SUFFIXES),$(OUTDIR)/$(1)$(arch)) $(GLIBC_SO_LIST) 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define NMF_RULE 4177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)all: $(OUTDIR)/$(1).nmf 418eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch$(OUTDIR)/$(1).nmf: $(EXECUTABLES) 41990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) $(call LOG,CREATE_NMF,$$@,$(NMF) $(NMF_FLAGS) -o $$@ $$^ $(GLIBC_PATHS) -s $(OUTDIR) $(2) $(GLIBC_REMAP)) 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 4217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)# 4237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)# HTML file generation 4247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)# 4257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CREATE_HTML := python $(NACL_SDK_ROOT)/tools/create_html.py 4267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)define HTML_RULE 4287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)all: $(OUTDIR)/$(1).html 429eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch$(OUTDIR)/$(1).html: $(EXECUTABLES) 430eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch $(call LOG,CREATE_HTML,$$@,$(CREATE_HTML) $(HTML_FLAGS) -o $$@ $$^) 4317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)endef 4324311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 4334311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 4344311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch# 4354311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch# Determine which executable to pass into the debugger. For newlib 4364311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch# this is the NEXE which will actually be used. For glibc, runnable-ld.so 4374311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch# is the "app", and the "app" is actual an .so we load. 4384311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch# 4394311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdochifeq (x86_32,$(SYSARCH)) 4404311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochLIB_NAME = lib32 4414311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdochelse 4424311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochLIB_NAME = lib64 4434311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdochendif 4444311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 4454311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 4464311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdochifeq (newlib,$(TOOLCHAIN)) 4474311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochGDB_DEBUG_TARGET = $(abspath $(OUTDIR))/$(TARGET)_$(SYSARCH).nexe 4484311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdochelse 4494311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochGDB_DEBUG_TARGET = $(abspath $(OUTDIR))/$(LIB_NAME)/runnable-ld.so 4504311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdochendif 451