OLD | NEW |
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 # | 5 # |
6 # GNU Make based build file. For details on GNU Make see: | 6 # GNU Make based build file. For details on GNU Make see: |
7 # http://www.gnu.org/software/make/manual/make.html | 7 # http://www.gnu.org/software/make/manual/make.html |
8 # | 8 # |
9 # | 9 # |
10 | 10 |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 # | 121 # |
122 # We use the C++ compiler for everything and then use the -Wl,-as-needed flag | 122 # We use the C++ compiler for everything and then use the -Wl,-as-needed flag |
123 # in the linker to drop libc++ unless it's actually needed. | 123 # in the linker to drop libc++ unless it's actually needed. |
124 # | 124 # |
125 X86_CXX?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin/i686-nacl-g++ | 125 X86_CXX?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin/i686-nacl-g++ |
126 X86_LINK?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin/i686-nacl-g++ -Wl,-as-needed | 126 X86_LINK?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin/i686-nacl-g++ -Wl,-as-needed |
127 | 127 |
128 ARM_CXX?=$(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin/arm-nacl-g++ | 128 ARM_CXX?=$(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin/arm-nacl-g++ |
129 ARM_LINK?=$(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin/arm-nacl-g++ -Wl,-as-needed | 129 ARM_LINK?=$(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin/arm-nacl-g++ -Wl,-as-needed |
130 | 130 |
| 131 PNACL_CXX?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/newlib/bin/pnacl-clang++ -c |
| 132 PNACL_LINK?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/newlib/bin/pnacl-clang++ |
| 133 |
131 | 134 |
132 # | 135 # |
133 # Rules for output directories. | 136 # Rules for output directories. |
134 # | 137 # |
135 # Output will be places in a directory name based on Toolchain and configuration | 138 # Output will be places in a directory name based on Toolchain and configuration |
136 # be default this will be "newlib/Debug". We use a python wrapped MKDIR to | 139 # be default this will be "newlib/Debug". We use a python wrapped MKDIR to |
137 # proivde a cross platform solution. The use of '|' checks for existance instead | 140 # proivde a cross platform solution. The use of '|' checks for existance instead |
138 # of timestamp, since the directory can update when files change. | 141 # of timestamp, since the directory can update when files change. |
139 # | 142 # |
140 $(TOOLCHAIN): | 143 $(TOOLCHAIN): |
141 $(MKDIR) $(TOOLCHAIN) | 144 $(MKDIR) $(TOOLCHAIN) |
142 | 145 |
143 $(TOOLCHAIN)/$(CONFIG): | $(TOOLCHAIN) | 146 $(TOOLCHAIN)/$(CONFIG): | $(TOOLCHAIN) |
144 $(MKDIR) $(TOOLCHAIN)/$(CONFIG) | 147 $(MKDIR) $(TOOLCHAIN)/$(CONFIG) |
145 | 148 |
146 OUTDIR:=$(TOOLCHAIN)/$(CONFIG) | 149 OUTDIR:=$(TOOLCHAIN)/$(CONFIG) |
147 | 150 |
148 | 151 |
149 # | 152 # |
| 153 # Dependency Macro |
| 154 # |
| 155 # $1 = Name of dependency |
| 156 # |
| 157 define DEPEND_RULE |
| 158 .PHONY: $(1) |
| 159 $(1): |
| 160 +$(MAKE) -C $(NACL_SDK_ROOT)/src/$(1) |
| 161 DEPS_LIST+=$(1) |
| 162 endef |
| 163 |
| 164 # |
150 # Compile Macro | 165 # Compile Macro |
151 # | 166 # |
152 # $1 = Source Name | 167 # $1 = Source Name |
153 # | 168 # |
154 # By default, if $(1) = source.c, this rule expands to: | 169 # By default, if $(1) = source.c, this rule expands to: |
155 # newlib/Debug/source_x86_32.o : souce.c Makefile | newlib/Debug | 170 # newlib/Debug/source_x86_32.o : souce.c Makefile | newlib/Debug |
156 # | 171 # |
157 # Which means if 'source.c' or Makefile are newer than the object | 172 # Which means if 'source.c' or Makefile are newer than the object |
158 # newlib/Debug/source_x86_32.o, then run the step: | 173 # newlib/Debug/source_x86_32.o, then run the step: |
159 # $(X86_CC) -o newlib/Debug/source_x86_32.o -c source.c .... | 174 # $(X86_CC) -o newlib/Debug/source_x86_32.o -c source.c .... |
160 # | 175 # |
161 # We repeat this expansion for 64 bit X86 and conditionally for ARM if | 176 # We repeat this expansion for 64 bit X86 and conditionally for ARM if |
162 # TOOLCHAIN=newlib | 177 # TOOLCHAIN=newlib |
163 # | 178 # |
164 define COMPILE_RULE | 179 define COMPILE_RULE |
165 $(OUTDIR)/$(basename $(1))_x86_32.o : $(1) $(THIS_MAKE) | $(OUTDIR) | 180 $(OUTDIR)/$(basename $(1))_x86_32.o : $(1) $(THIS_MAKE) | $(OUTDIR) |
166 $(X86_CXX) -o $$@ -c $$< -m32 $(OPT_FLAGS) $(CXX_FLAGS) $(NACL_WARNINGS) | 181 $(X86_CXX) -o $$@ -c $$< -m32 $(OPT_FLAGS) $(CXX_FLAGS) $(NACL_WARNINGS) |
167 | 182 |
168 $(OUTDIR)/$(basename $(1))_x86_64.o : $(1) $(THIS_MAKE) | $(OUTDIR) | 183 $(OUTDIR)/$(basename $(1))_x86_64.o : $(1) $(THIS_MAKE) | $(OUTDIR) |
169 $(X86_CXX) -o $$@ -c $$< -m64 $(OPT_FLAGS) $(CXX_FLAGS) $(NACL_WARNINGS) | 184 $(X86_CXX) -o $$@ -c $$< -m64 $(OPT_FLAGS) $(CXX_FLAGS) $(NACL_WARNINGS) |
170 | 185 |
171 $(OUTDIR)/$(basename $(1))_arm.o : $(1) $(THIS_MAKE) | $(OUTDIR) | 186 $(OUTDIR)/$(basename $(1))_arm.o : $(1) $(THIS_MAKE) | $(OUTDIR) |
172 $(ARM_CXX) -o $$@ -c $$< $(OPT_FLAGS) $(CXX_FLAGS) $(NACL_WARNINGS) | 187 $(ARM_CXX) -o $$@ -c $$< $(OPT_FLAGS) $(CXX_FLAGS) $(NACL_WARNINGS) |
| 188 |
| 189 $(OUTDIR)/$(basename $(1))_pnacl.o : $(1) $(THIS_MAKE) | $(OUTDIR) |
| 190 $(PNACL_CXX) -o $$@ -c $$< $(OPT_FLAGS) $(CXX_FLAGS) $(NACL_WARNINGS) |
173 endef | 191 endef |
174 | 192 |
175 | 193 |
176 # | 194 # |
177 # Link Macro | 195 # Link Macro |
178 # | 196 # |
179 # $1 = Target Name | 197 # $1 = Target Name |
180 # $2 = List of Sources | 198 # $2 = List of Sources |
181 # | 199 # |
182 # By default, if $(1) = foo $(2) = A.c B.cc, this rule expands to: | 200 # By default, if $(1) = foo $(2) = A.c B.cc, this rule expands to: |
(...skipping 15 matching lines...) Expand all Loading... |
198 $(OUTDIR)/$(1)_x86_32.nexe : $(foreach src,$(2),$(OUTDIR)/$(basename $(src))_x86
_32.o) | 216 $(OUTDIR)/$(1)_x86_32.nexe : $(foreach src,$(2),$(OUTDIR)/$(basename $(src))_x86
_32.o) |
199 $(X86_LINK) -o $$@ $$^ -m32 $(LD_X86_32) $(LD_FLAGS) $(foreach lib,$(LIB
S),-l$(lib)) | 217 $(X86_LINK) -o $$@ $$^ -m32 $(LD_X86_32) $(LD_FLAGS) $(foreach lib,$(LIB
S),-l$(lib)) |
200 | 218 |
201 NMF_TARGETS+=$(OUTDIR)/$(1)_x86_64.nexe | 219 NMF_TARGETS+=$(OUTDIR)/$(1)_x86_64.nexe |
202 $(OUTDIR)/$(1)_x86_64.nexe : $(foreach src,$(2),$(OUTDIR)/$(basename $(src))_x86
_64.o) | 220 $(OUTDIR)/$(1)_x86_64.nexe : $(foreach src,$(2),$(OUTDIR)/$(basename $(src))_x86
_64.o) |
203 $(X86_LINK) -o $$@ $$^ -m64 $(LD_X86_64) $(LD_FLAGS) $(foreach lib,$(LIB
S),-l$(lib)) | 221 $(X86_LINK) -o $$@ $$^ -m64 $(LD_X86_64) $(LD_FLAGS) $(foreach lib,$(LIB
S),-l$(lib)) |
204 | 222 |
205 NMF_TARGETS+=$(OUTDIR)/$(1)_arm.nexe | 223 NMF_TARGETS+=$(OUTDIR)/$(1)_arm.nexe |
206 $(OUTDIR)/$(1)_arm.nexe : $(foreach src,$(2),$(OUTDIR)/$(basename $(src))_arm.o) | 224 $(OUTDIR)/$(1)_arm.nexe : $(foreach src,$(2),$(OUTDIR)/$(basename $(src))_arm.o) |
207 $(ARM_LINK) -o $$@ $$^ $(LD_ARM) $(LD_FLAGS) $(foreach lib,$(LIBS),-l$(l
ib)) | 225 $(ARM_LINK) -o $$@ $$^ $(LD_ARM) $(LD_FLAGS) $(foreach lib,$(LIBS),-l$(l
ib)) |
| 226 |
| 227 NMF_TARGETS+=$(OUTDIR)/$(1).pexe |
| 228 $(OUTDIR)/$(1).pexe : $(foreach src,$(2),$(OUTDIR)/$(basename $(src))_pnacl.o) |
| 229 $(PNACL_LINK) -o $$@ $$^ $(LD_PNACL) $(LD_FLAGS) $(foreach lib,$(LIBS),-
l$(lib)) |
208 endef | 230 endef |
209 | 231 |
210 | 232 |
| 233 |
211 # | 234 # |
212 # Generate NMF_TARGETS | 235 # Generate NMF_TARGETS |
213 # | 236 # |
214 ARCHES=x86_32 x86_64 | 237 ARCHES=x86_32 x86_64 |
215 ifeq "newlib" "$(TOOLCHAIN)" | 238 ifeq "newlib" "$(TOOLCHAIN)" |
216 ARCHES+=arm | 239 ARCHES+=arm |
217 endif | 240 endif |
| 241 NMF_ARCHES:=$(foreach arch,$(ARCHES),_$(arch).nexe) |
| 242 |
| 243 ifeq "pnacl" "$(TOOLCHAIN)" |
| 244 NMF_ARCHES:=.pexe |
| 245 endif |
218 | 246 |
219 | 247 |
220 # | 248 # |
221 # NMF Manifiest generation | 249 # NMF Manifiest generation |
222 # | 250 # |
223 # Use the python script create_nmf to scan the binaries for dependencies using | 251 # Use the python script create_nmf to scan the binaries for dependencies using |
224 # objdump. Pass in the (-L) paths to the default library toolchains so that we | 252 # objdump. Pass in the (-L) paths to the default library toolchains so that we |
225 # can find those libraries and have it automatically copy the files (-s) to | 253 # can find those libraries and have it automatically copy the files (-s) to |
226 # the target directory for us. | 254 # the target directory for us. |
227 # | 255 # |
228 # $1 = Target Name (the basename of the nmf | 256 # $1 = Target Name (the basename of the nmf |
229 # $2 = Additional create_nmf.py arguments | 257 # $2 = Additional create_nmf.py arguments |
230 # | 258 # |
231 NMF:=python $(NACL_SDK_ROOT)/tools/create_nmf.py | 259 NMF:=python $(NACL_SDK_ROOT)/tools/create_nmf.py |
232 GLIBC_DUMP:=$(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/bin/objdump | 260 GLIBC_DUMP:=$(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/bin/objdump |
233 GLIBC_PATHS:=-L $(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/lib32 | 261 GLIBC_PATHS:=-L $(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/lib32 |
234 GLIBC_PATHS+=-L $(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/lib | 262 GLIBC_PATHS+=-L $(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/lib |
235 | 263 |
236 define NMF_RULE | 264 define NMF_RULE |
237 $(OUTDIR)/$(1).nmf : $(foreach arch,$(ARCHES),$(OUTDIR)/$(1)_$(arch).nexe) | 265 $(OUTDIR)/$(1).nmf : $(foreach arch,$(NMF_ARCHES),$(OUTDIR)/$(1)$(arch)) |
238 » $(NMF) -o $$@ $$^ -D $(GLIBC_DUMP) $(GLIBC_PATHS) $(2) | 266 » $(NMF) -o $$@ $$^ -D $(GLIBC_DUMP) $(GLIBC_PATHS) -s $(OUTDIR) $(2) |
239 | 267 |
240 all : $(OUTDIR)/$(1).nmf | 268 all : $(DEPS_LIST) $(OUTDIR)/$(1).nmf |
241 endef | 269 endef |
242 | 270 |
| 271 |
| 272 # |
| 273 # Verify we can find the Chrome executable if we need to launch it. |
| 274 # |
| 275 .PHONY: CHECK_FOR_CHROME RUN LAUNCH |
| 276 CHECK_FOR_CHROME: |
| 277 ifeq (,$(wildcard $(CHROME_PATH))) |
| 278 $(warning No valid Chrome found at CHROME_PATH=$(CHROME_PATH)) |
| 279 $(error Set CHROME_PATH via an environment variable, or command-line.) |
| 280 else |
| 281 $(warning Using chrome at: $(CHROME_PATH)) |
| 282 endif |
| 283 |
| 284 |
| 285 # |
| 286 # Variables for running examples with Chrome. |
| 287 # |
| 288 RUN_PY:=python $(NACL_SDK_ROOT)/tools/run.py |
| 289 |
| 290 # Add this to launch Chrome with additional environment variables defined. |
| 291 # Each element should be specified as KEY=VALUE, with whitespace separating |
| 292 # key-value pairs. e.g. |
| 293 # CHROME_ENV=FOO=1 BAR=2 BAZ=3 |
| 294 CHROME_ENV?= |
| 295 |
| 296 # Additional arguments to pass to Chrome. |
| 297 CHROME_ARGS+=--enable-nacl --enable-pnacl --incognito --ppapi-out-of-process |
| 298 |
| 299 |
| 300 CONFIG?=Debug |
| 301 PAGE?=index_$(TOOLCHAIN)_$(CONFIG).html |
| 302 |
| 303 RUN: LAUNCH |
| 304 LAUNCH: CHECK_FOR_CHROME all |
| 305 ifeq (,$(wildcard $(PAGE))) |
| 306 $(warning No valid HTML page found at $(PAGE)) |
| 307 $(error Make sure TOOLCHAIN and CONFIG are properly set) |
| 308 endif |
| 309 $(RUN_PY) -C $(THIS_DIR) -P $(PAGE) $(addprefix -E ,$(CHROME_ENV)) -- \ |
| 310 $(CHROME_PATH) $(CHROME_ARGS) \ |
| 311 --register-pepper-plugins="$(PPAPI_DEBUG),$(PPAPI_RELEASE)" |
| 312 |
OLD | NEW |