1ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# 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)# Paths to Tools 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PNACL_CC := $(shell $(NACL_CONFIG) -t $(TOOLCHAIN) --tool=cc) 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PNACL_CXX := $(shell $(NACL_CONFIG) -t $(TOOLCHAIN) --tool=c++) 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PNACL_LINK := $(shell $(NACL_CONFIG) -t $(TOOLCHAIN) --tool=c++) 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PNACL_LIB := $(shell $(NACL_CONFIG) -t $(TOOLCHAIN) --tool=ar) 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PNACL_STRIP := $(shell $(NACL_CONFIG) -t $(TOOLCHAIN) --tool=strip) 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PNACL_FINALIZE := $(shell $(NACL_CONFIG) -t $(TOOLCHAIN) --tool=finalize) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Compile Macro 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Source Name 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = Compile Flags 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $3 = Include Directories 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define C_COMPILER_RULE 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)-include $(call SRC_TO_DEP,$(1)) 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)$(call SRC_TO_OBJ,$(1)): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 30a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,CC ,$$@,$(PNACL_CC) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CFLAGS)) 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1)) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define CXX_COMPILER_RULE 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)-include $(call SRC_TO_DEP,$(1)) 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)$(call SRC_TO_OBJ,$(1)): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 37a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) $(call LOG,CXX ,$$@,$(PNACL_CXX) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CFLAGS)) 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1)) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Source Name 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = POSIX Compile Flags 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $3 = Include Directories 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $4 = VC Flags (unused) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define COMPILE_RULE 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ifeq ($(suffix $(1)),.c) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call C_COMPILER_RULE,$(1),$(2) $(foreach inc,$(INC_PATHS),-I$(inc)) $(3)) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)else 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call CXX_COMPILER_RULE,$(1),$(2) $(foreach inc,$(INC_PATHS),-I$(inc)) $(3)) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endif 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# SO Macro 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Target Name 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = List of Sources 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define SO_RULE 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(error 'Shared libraries not supported by PNaCl') 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# LIB Macro 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Target Name 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = List of Sources 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $3 = POSIX Link Flags 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $4 = VC Link Flags (unused) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define LIB_RULE 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)$(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(TOOLCHAIN)/$(CONFIG)/lib$(1).a 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @echo "TOUCHED $$@" > $(STAMPDIR)/$(1).stamp 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)all: $(LIBDIR)/$(TOOLCHAIN)/$(CONFIG)/lib$(1).a 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)$(LIBDIR)/$(TOOLCHAIN)/$(CONFIG)/lib$(1).a: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src))) 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) $(MKDIR) -p $$(dir $$@) 810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) $(RM) -f $$@ 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) $(call LOG,LIB,$$@,$(PNACL_LIB) -cr $$@ $$^ $(3)) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Specific Link Macro 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Target Name 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = List of inputs 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $3 = List of libs 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $4 = List of deps 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $5 = List of lib dirs 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $6 = Other Linker Args 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define LINKER_RULE 97ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochall: $(1).pexe 98ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch$(1).pexe: $(1).bc 99ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch $(call LOG,FINALIZE,$$@,$(PNACL_FINALIZE) -o $$@ $$^) 100ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 101ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch$(1).bc: $(2) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) 1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) $(call LOG,LINK,$$@,$(PNACL_LINK) -o $$@ $(2) $(PNACL_LDFLAGS) $(foreach path,$(5),-L$(path)/pnacl/$(CONFIG)) $(foreach lib,$(3),-l$(lib)) $(6)) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Generalized Link Macro 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Target Name 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = List of Sources 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $3 = List of LIBS 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $4 = List of DEPS 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $5 = POSIX Linker Switches 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $6 = VC Linker Switches 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define LINK_RULE 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)$(call LINKER_RULE,$(OUTDIR)/$(1),$(foreach src,$(2),$(call SRC_TO_OBJ,$(src))),$(filter-out pthread,$(3)),$(4),$(LIB_PATHS),$(5)) 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# Strip Macro 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# 1240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch# NOTE: pnacl-strip does not really do much for finalized pexes (in a 1250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch# sense, they are already stripped), but set this rule up for uniformity. 126eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch# 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# $1 = Target Name 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# $2 = Input Name 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)define STRIP_RULE 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)all: $(OUTDIR)/$(1).pexe 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)$(OUTDIR)/$(1).pexe: $(OUTDIR)/$(2).pexe 1330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch $(call LOG,STRIP,$$@,$(PNACL_STRIP) $$^ -o $$@) 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)endef 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 1380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch# NMF Manifest generation 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Use the python script create_nmf to scan the binaries for dependencies using 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# objdump. Pass in the (-L) paths to the default library toolchains so that we 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# can find those libraries and have it automatically copy the files (-s) to 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# the target directory for us. 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 1450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch# $1 = Target Name (the basename of the nmf) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = Additional create_nmf.py arguments 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NMF:=python $(NACL_SDK_ROOT)/tools/create_nmf.py 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 150effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochEXECUTABLES=$(OUTDIR)/$(1).pexe $(OUTDIR)/$(1)_unstripped.bc 1511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define NMF_RULE 15390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)all: $(OUTDIR)/$(1).nmf 154ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch$(OUTDIR)/$(1).nmf: $(EXECUTABLES) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) $(call LOG,CREATE_NMF,$$@,$(NMF) -o $$@ $$^ -s $(OUTDIR) $(2)) 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 1577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)# 1597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)# HTML file generation 1607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)# 1617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CREATE_HTML := python $(NACL_SDK_ROOT)/tools/create_html.py 1627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)define HTML_RULE 1647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)all: $(OUTDIR)/$(1).html 165ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch$(OUTDIR)/$(1).html: $(EXECUTABLES) 1667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) $(call LOG,CREATE_HTML,$$@,$(CREATE_HTML) -o $$@ $$^) 1677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)endef 168