nacl_llvm.mk revision 7d4cd473f85ac64c3747c96c277f9e506a0d2246
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)#
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Paths to Tools
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)PNACL_CC ?= $(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/newlib/bin/pnacl-clang -c
1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)PNACL_CXX ?= $(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/newlib/bin/pnacl-clang++ -c
1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)PNACL_LINK ?= $(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/newlib/bin/pnacl-clang++
1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)PNACL_LIB ?= $(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/newlib/bin/pnacl-ar
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)PNACL_STRIP ?= $(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/newlib/bin/pnacl-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
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)-include $(call SRC_TO_DEP,$(1),_pnacl)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call SRC_TO_OBJ,$(1),_pnacl): $(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))
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define CXX_COMPILER_RULE
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)-include $(call SRC_TO_DEP,$(1))
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call SRC_TO_OBJ,$(1),_pnacl): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp
36a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)	$(call LOG,CXX ,$$@,$(PNACL_CXX) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CFLAGS))
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Source Name
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = POSIX Compile Flags
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $3 = Include Directories
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $4 = VC Flags (unused)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define COMPILE_RULE
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ifeq ($(suffix $(1)),.c)
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call C_COMPILER_RULE,$(1),$(2) $(foreach inc,$(INC_PATHS),-I$(inc)) $(3))
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)else
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call CXX_COMPILER_RULE,$(1),$(2) $(foreach inc,$(INC_PATHS),-I$(inc)) $(3))
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endif
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# SO Macro
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Target Name
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = List of Sources
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define SO_RULE
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(error 'Shared libraries not supported by PNaCl')
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# LIB Macro
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Target Name
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = List of Sources
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $3 = POSIX Link Flags
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $4 = VC Link Flags (unused)
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define LIB_RULE
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)$(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(TOOLCHAIN)/$(CONFIG)/lib$(1).a
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	@echo "TOUCHED $$@" > $(STAMPDIR)/$(1).stamp
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)all: $(LIBDIR)/$(TOOLCHAIN)/$(CONFIG)/lib$(1).a
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)$(LIBDIR)/$(TOOLCHAIN)/$(CONFIG)/lib$(1).a: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_pnacl))
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	$(MKDIR) -p $$(dir $$@)
7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)	$(call LOG,LIB,$$@,$(PNACL_LIB) -cr $$@ $$^ $(3))
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Specific Link Macro
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Target Name
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = List of inputs
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $3 = List of libs
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $4 = List of deps
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $5 = List of lib dirs
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $6 = Other Linker Args
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define LINKER_RULE
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)all: $(1)
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(1): $(2) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp)
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	$(call LOG,LINK,$$@,$(PNACL_LINK) -o $(1) $(2) $(foreach path,$(5),-L$(path)/pnacl/$(CONFIG)) $(foreach lib,$(3),-l$(lib)) $(6))
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Generalized Link Macro
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Target Name
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = List of Sources
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $3 = List of LIBS
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $4 = List of DEPS
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $5 = POSIX Linker Switches
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $6 = VC Linker Switches
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define LINK_RULE
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call LINKER_RULE,$(OUTDIR)/$(1).pexe,$(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_pnacl)),$(filter-out pthread,$(3)),$(4),$(LIB_PATHS),$(5))
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# Strip Macro
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# $1 = Target Name
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# $2 = Input Name
120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#
121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)define STRIP_RULE
122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)all: $(OUTDIR)/$(1).pexe
123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)$(OUTDIR)/$(1).pexe: $(OUTDIR)/$(2).pexe
124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	$(call LOG,STRIP,$$@,$(PNACL_STRIP) -o $$@ $$^)
125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)endef
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# NMF Manifiest generation
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Use the python script create_nmf to scan the binaries for dependencies using
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# objdump.  Pass in the (-L) paths to the default library toolchains so that we
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# can find those libraries and have it automatically copy the files (-s) to
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# the target directory for us.
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Target Name (the basename of the nmf
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = Additional create_nmf.py arguments
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NMF:=python $(NACL_SDK_ROOT)/tools/create_nmf.py
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define NMF_RULE
14290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)all: $(OUTDIR)/$(1).nmf
1437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)$(OUTDIR)/$(1).nmf: $(OUTDIR)/$(1).pexe
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	$(call LOG,CREATE_NMF,$$@,$(NMF) -o $$@ $$^ -s $(OUTDIR) $(2))
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef
1467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#
1487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)# HTML file generation
1497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#
1507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)CREATE_HTML := python $(NACL_SDK_ROOT)/tools/create_html.py
1517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)define HTML_RULE
1537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)all: $(OUTDIR)/$(1).html
1547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)$(OUTDIR)/$(1).html: $(foreach arch,$(ARCH_SUFFIXES),$(OUTDIR)/$(1)$(arch)) $(GLIBC_SO_LIST)
1557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)	$(call LOG,CREATE_HTML,$$@,$(CREATE_HTML) -o $$@ $$^)
1567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)endef
157