Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / native_client_sdk / src / tools / nacl_llvm.mk
1 # Copyright (c) 2012 The Chromium Authors.   All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 #
6 # GNU Make based build file.  For details on GNU Make see:
7 #   http://www.gnu.org/software/make/manual/make.html
8 #
9
10 #
11 # Paths to Tools
12 #
13 PNACL_CC := $(shell $(NACL_CONFIG) -t $(TOOLCHAIN) --tool=cc)
14 PNACL_CXX := $(shell $(NACL_CONFIG) -t $(TOOLCHAIN) --tool=c++)
15 PNACL_LINK := $(shell $(NACL_CONFIG) -t $(TOOLCHAIN) --tool=c++)
16 PNACL_LIB := $(shell $(NACL_CONFIG) -t $(TOOLCHAIN) --tool=ar)
17 PNACL_STRIP := $(shell $(NACL_CONFIG) -t $(TOOLCHAIN) --tool=strip)
18 PNACL_FINALIZE := $(shell $(NACL_CONFIG) -t $(TOOLCHAIN) --tool=finalize)
19
20 #
21 # Compile Macro
22 #
23 # $1 = Source Name
24 # $2 = Compile Flags
25 # $3 = Include Directories
26 #
27 define C_COMPILER_RULE
28 -include $(call SRC_TO_DEP,$(1))
29 $(call SRC_TO_OBJ,$(1)): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp
30         $(call LOG,CC  ,$$@,$(PNACL_CC) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CFLAGS))
31         @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1))
32 endef
33
34 define CXX_COMPILER_RULE
35 -include $(call SRC_TO_DEP,$(1))
36 $(call SRC_TO_OBJ,$(1)): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp
37         $(call LOG,CXX ,$$@,$(PNACL_CXX) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CFLAGS))
38         @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1))
39 endef
40
41
42 # $1 = Source Name
43 # $2 = POSIX Compile Flags
44 # $3 = Include Directories
45 # $4 = VC Flags (unused)
46 define COMPILE_RULE
47 ifeq ($(suffix $(1)),.c)
48 $(call C_COMPILER_RULE,$(1),$(2) $(foreach inc,$(INC_PATHS),-I$(inc)) $(3))
49 else
50 $(call CXX_COMPILER_RULE,$(1),$(2) $(foreach inc,$(INC_PATHS),-I$(inc)) $(3))
51 endif
52 endef
53
54
55 #
56 # SO Macro
57 #
58 # $1 = Target Name
59 # $2 = List of Sources
60 #
61 #
62 define SO_RULE
63 $(error 'Shared libraries not supported by PNaCl')
64 endef
65
66
67 #
68 # LIB Macro
69 #
70 # $1 = Target Name
71 # $2 = List of Sources
72 # $3 = POSIX Link Flags
73 # $4 = VC Link Flags (unused)
74 define LIB_RULE
75 $(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(TOOLCHAIN)/$(CONFIG)/lib$(1).a
76         @echo "TOUCHED $$@" > $(STAMPDIR)/$(1).stamp
77
78 all: $(LIBDIR)/$(TOOLCHAIN)/$(CONFIG)/lib$(1).a
79 $(LIBDIR)/$(TOOLCHAIN)/$(CONFIG)/lib$(1).a: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src)))
80         $(MKDIR) -p $$(dir $$@)
81         $(RM) -f $$@
82         $(call LOG,LIB,$$@,$(PNACL_LIB) -cr $$@ $$^ $(3))
83 endef
84
85
86 #
87 # Specific Link Macro
88 #
89 # $1 = Target Name
90 # $2 = List of inputs
91 # $3 = List of libs
92 # $4 = List of deps
93 # $5 = List of lib dirs
94 # $6 = Other Linker Args
95 #
96 define LINKER_RULE
97 all: $(1).pexe 
98 $(1).pexe: $(1).bc
99         $(call LOG,FINALIZE,$$@,$(PNACL_FINALIZE) -o $$@ $$^)
100
101 $(1).bc: $(2) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp)
102         $(call LOG,LINK,$$@,$(PNACL_LINK) -o $$@ $(2) $(PNACL_LDFLAGS) $(foreach path,$(5),-L$(path)/pnacl/$(CONFIG)) $(foreach lib,$(3),-l$(lib)) $(6))
103 endef
104
105
106 #
107 # Generalized Link Macro
108 #
109 # $1 = Target Name
110 # $2 = List of Sources
111 # $3 = List of LIBS
112 # $4 = List of DEPS
113 # $5 = POSIX Linker Switches
114 # $6 = VC Linker Switches
115 #
116 define LINK_RULE
117 $(call LINKER_RULE,$(OUTDIR)/$(1),$(foreach src,$(2),$(call SRC_TO_OBJ,$(src))),$(filter-out pthread,$(3)),$(4),$(LIB_PATHS),$(5))
118 endef
119
120
121 #
122 # Strip Macro
123 #
124 # NOTE: pnacl-strip does not really do much for finalized pexes (in a
125 # sense, they are already stripped), but set this rule up for uniformity.
126 #
127 # $1 = Target Name
128 # $2 = Input Name
129 #
130 define STRIP_RULE
131 all: $(OUTDIR)/$(1).pexe
132 $(OUTDIR)/$(1).pexe: $(OUTDIR)/$(2).pexe
133         $(call LOG,STRIP,$$@,$(PNACL_STRIP) $$^ -o $$@)
134 endef
135
136
137 #
138 # NMF Manifest generation
139 #
140 # Use the python script create_nmf to scan the binaries for dependencies using
141 # objdump.  Pass in the (-L) paths to the default library toolchains so that we
142 # can find those libraries and have it automatically copy the files (-s) to
143 # the target directory for us.
144 #
145 # $1 = Target Name (the basename of the nmf)
146 # $2 = Additional create_nmf.py arguments
147 #
148 NMF:=python $(NACL_SDK_ROOT)/tools/create_nmf.py
149
150 EXECUTABLES=$(OUTDIR)/$(1).pexe $(OUTDIR)/$(1)_unstripped.bc
151
152 define NMF_RULE
153 all: $(OUTDIR)/$(1).nmf
154 $(OUTDIR)/$(1).nmf: $(EXECUTABLES)
155         $(call LOG,CREATE_NMF,$$@,$(NMF) -o $$@ $$^ -s $(OUTDIR) $(2))
156 endef
157
158 #
159 # HTML file generation
160 #
161 CREATE_HTML := python $(NACL_SDK_ROOT)/tools/create_html.py
162
163 define HTML_RULE
164 all: $(OUTDIR)/$(1).html
165 $(OUTDIR)/$(1).html: $(EXECUTABLES)
166         $(call LOG,CREATE_HTML,$$@,$(CREATE_HTML) -o $$@ $$^)
167 endef