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