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 # 12 # Default library paths 13 # 14 LD_X86_32 := -L$(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_32/$(CONFIG) 15 LD_X86_64 := -L$(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_64/$(CONFIG) 16 LD_ARM := -L$(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_arm/$(CONFIG) 17 18 19 # 20 # Macros for TOOLS 21 # 22 # We always link with the C++ compiler but include -Wl,-as-needed flag 23 # in LD_FLAGS so the linker should drop libc++ unless it's actually needed. 24 # 25 X86_TC_BIN ?= $(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin 26 ARM_TC_BIN ?= $(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin 27 28 X86_32_CC ?= $(NACL_COMPILER_PREFIX) $(X86_TC_BIN)/i686-nacl-gcc 29 X86_32_CXX ?= $(NACL_COMPILER_PREFIX) $(X86_TC_BIN)/i686-nacl-g++ 30 X86_32_LINK ?= $(X86_TC_BIN)/i686-nacl-g++ 31 X86_32_LIB ?= $(X86_TC_BIN)/i686-nacl-ar 32 X86_32_STRIP ?= $(X86_TC_BIN)/i686-nacl-strip 33 X86_32_NM ?= $(X86_TC_BIN)/i686-nacl-nm 34 35 X86_64_CC ?= $(NACL_COMPILER_PREFIX) $(X86_TC_BIN)/x86_64-nacl-gcc 36 X86_64_CXX ?= $(NACL_COMPILER_PREFIX) $(X86_TC_BIN)/x86_64-nacl-g++ 37 X86_64_LINK ?= $(X86_TC_BIN)/x86_64-nacl-g++ 38 X86_64_LIB ?= $(X86_TC_BIN)/x86_64-nacl-ar 39 X86_64_STRIP ?= $(X86_TC_BIN)/x86_64-nacl-strip 40 X86_64_NM ?= $(X86_TC_BIN)/x86_64-nacl-nm 41 42 ARM_CC ?= $(NACL_COMPILER_PREFIX) $(ARM_TC_BIN)/arm-nacl-gcc 43 ARM_CXX ?= $(NACL_COMPILER_PREFIX) $(ARM_TC_BIN)/arm-nacl-g++ 44 ARM_LINK ?= $(ARM_TC_BIN)/arm-nacl-g++ 45 ARM_LIB ?= $(ARM_TC_BIN)/arm-nacl-ar 46 ARM_STRIP ?= $(ARM_TC_BIN)/arm-nacl-strip 47 ARM_NM ?= $(ARM_TC_BIN)/arm-nacl-nm 48 49 # Architecture-specific flags 50 X86_32_CFLAGS ?= 51 X86_64_CFLAGS ?= 52 ARM_CFLAGS ?= 53 54 X86_32_CXXFLAGS ?= 55 X86_64_CXXFLAGS ?= 56 ARM_CXXFLAGS ?= 57 58 X86_32_LDFLAGS ?= -Wl,-Map,$(OUTDIR)/$(TARGET)_x86_32.map 59 X86_64_LDFLAGS ?= -Wl,-Map,$(OUTDIR)/$(TARGET)_x86_64.map 60 ARM_LDFLAGS ?= -Wl,-Map,$(OUTDIR)/$(TARGET)_arm.map 61 62 # 63 # Compile Macro 64 # 65 # $1 = Source Name 66 # $2 = Compile Flags 67 # 68 define C_COMPILER_RULE 69 -include $(call SRC_TO_DEP,$(1),_x86_32) 70 $(call SRC_TO_OBJ,$(1),_x86_32): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 71 $(call LOG,CC ,$$@,$(X86_32_CC) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CFLAGS) $(X86_32_CFLAGS)) 72 @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_x86_32) 73 74 -include $(call SRC_TO_DEP,$(1),_x86_64) 75 $(call SRC_TO_OBJ,$(1),_x86_64): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 76 $(call LOG,CC ,$$@,$(X86_64_CC) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CFLAGS) $(X86_64_CFLAGS)) 77 @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_x86_64) 78 79 -include $(call SRC_TO_DEP,$(1),_arm) 80 $(call SRC_TO_OBJ,$(1),_arm): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 81 $(call LOG,CC ,$$@,$(ARM_CC) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CFLAGS) $(ARM_CFLAGS)) 82 @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_arm) 83 84 -include $(call SRC_TO_DEP,$(1),_x86_32_pic) 85 $(call SRC_TO_OBJ,$(1),_x86_32_pic): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 86 $(call LOG,CC ,$$@,$(X86_32_CC) -o $$@ -c $$< -fPIC $(POSIX_FLAGS) $(2) $(NACL_CFLAGS) $(X86_32_CFLAGS)) 87 @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_x86_32_pic) 88 89 -include $(call SRC_TO_DEP,$(1),_x86_64_pic) 90 $(call SRC_TO_OBJ,$(1),_x86_64_pic): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 91 $(call LOG,CC ,$$@,$(X86_64_CC) -o $$@ -c $$< -fPIC $(POSIX_FLAGS) $(2) $(NACL_CFLAGS) $(X86_64_CFLAGS)) 92 @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_x86_64_pic) 93 94 -include $(call SRC_TO_DEP,$(1),_arm_pic) 95 $(call SRC_TO_OBJ,$(1),_arm_pic): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 96 $(call LOG,CC ,$$@,$(ARM_CC) -o $$@ -c $$< -fPIC $(POSIX_FLAGS) $(2) $(NACL_CFLAGS) $(ARM_CFLAGS)) 97 @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_arm_pic) 98 endef 99 100 define CXX_COMPILER_RULE 101 -include $(call SRC_TO_DEP,$(1),_x86_32) 102 $(call SRC_TO_OBJ,$(1),_x86_32): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 103 $(call LOG,CXX ,$$@,$(X86_32_CXX) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CXXFLAGS) $(X86_32_CXXFLAGS)) 104 @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_x86_32) 105 106 -include $(call SRC_TO_DEP,$(1),_x86_64) 107 $(call SRC_TO_OBJ,$(1),_x86_64): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 108 $(call LOG,CXX ,$$@,$(X86_64_CXX) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CXXFLAGS) $(X86_64_CXXFLAGS)) 109 @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_x86_64) 110 111 -include $(call SRC_TO_DEP,$(1),_arm) 112 $(call SRC_TO_OBJ,$(1),_arm): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 113 $(call LOG,CXX ,$$@,$(ARM_CXX) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CXXFLAGS) $(ARM_CXXFLAGS)) 114 @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_arm) 115 116 -include $(call SRC_TO_DEP,$(1),_x86_32_pic) 117 $(call SRC_TO_OBJ,$(1),_x86_32_pic): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 118 $(call LOG,CXX ,$$@,$(X86_32_CXX) -o $$@ -c $$< -fPIC $(POSIX_FLAGS) $(2) $(NACL_CXXFLAGS) $(X86_32_CXXFLAGS)) 119 @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_x86_32_pic) 120 121 -include $(call SRC_TO_DEP,$(1),_x86_64_pic) 122 $(call SRC_TO_OBJ,$(1),_x86_64_pic): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 123 $(call LOG,CXX ,$$@,$(X86_64_CXX) -o $$@ -c $$< -fPIC $(POSIX_FLAGS) $(2) $(NACL_CXXFLAGS) $(X86_64_CXXFLAGS)) 124 @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_x86_64_pic) 125 126 -include $(call SRC_TO_DEP,$(1),_arm_pic) 127 $(call SRC_TO_OBJ,$(1),_arm_pic): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 128 $(call LOG,CXX ,$$@,$(ARM_CXX) -o $$@ -c $$< -fPIC $(POSIX_FLAGS) $(2) $(NACL_CXXFLAGS) $(ARM_CXXFLAGS)) 129 @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1),_arm_pic) 130 endef 131 132 133 # 134 # $1 = Source Name 135 # $2 = POSIX Compile Flags 136 # $3 = Include Directories 137 # $4 = VC Flags (unused) 138 # 139 define COMPILE_RULE 140 ifeq ($(suffix $(1)),.c) 141 $(call C_COMPILER_RULE,$(1),$(2) $(foreach inc,$(INC_PATHS),-I$(inc)) $(3)) 142 else 143 $(call CXX_COMPILER_RULE,$(1),$(2) $(foreach inc,$(INC_PATHS),-I$(inc)) $(3)) 144 endif 145 endef 146 147 # 148 # Determine which architectures to build for. The user can set NACL_ARCH or 149 # ARCHES in the environment to control this. 150 # 151 VALID_ARCHES := x86_32 x86_64 152 ifeq (newlib,$(TOOLCHAIN)) 153 VALID_ARCHES += arm 154 endif 155 156 ifdef NACL_ARCH 157 ifeq (,$(findstring $(NACL_ARCH),$(VALID_ARCHES))) 158 $(error Invalid arch specified in NACL_ARCH: $(NACL_ARCH). Valid values are: $(VALID_ARCHES)) 159 endif 160 ARCHES = ${NACL_ARCH} 161 else 162 ARCHES ?= ${VALID_ARCHES} 163 endif 164 165 GLIBC_REMAP := 166 167 # 168 # SO Macro 169 # 170 # As well as building and installing a shared library this rule adds dependencies 171 # on the library's .stamp file in STAMPDIR. However, the rule for creating the stamp 172 # file is part of LIB_RULE, so users of the DEPS system are currently required to 173 # use the LIB_RULE macro as well as the SO_RULE for each shared library. 174 # 175 # $1 = Target Name 176 # $2 = List of Sources 177 # $3 = List of LIBS 178 # $4 = List of DEPS 179 # $5 = 1 => Don't add to NMF. 180 # 181 define SO_RULE 182 ifneq (,$(findstring x86_32,$(ARCHES))) 183 all: $(OUTDIR)/lib$(1)_x86_32.so 184 $(OUTDIR)/lib$(1)_x86_32.so: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_32_pic)) $(4) 185 $(call LOG,LINK,$$@,$(X86_32_LINK) -o $$@ $$(filter-out $(4),$$^) -shared -m32 $(LD_X86_32) $$(LD_FLAGS) $(foreach lib,$(3),-l$(lib))) 186 187 $(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).so 188 install: $(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).so 189 $(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).so: $(OUTDIR)/lib$(1)_x86_32.so 190 $(MKDIR) -p $$(dir $$@) 191 $(call LOG,CP ,$$@,$(OSHELPERS) cp $$^ $$@) 192 ifneq ($(5),1) 193 GLIBC_SO_LIST += $(OUTDIR)/lib$(1)_x86_32.so 194 GLIBC_REMAP += -n lib$(1)_x86_32.so,lib$(1).so 195 endif 196 endif 197 198 ifneq (,$(findstring x86_64,$(ARCHES))) 199 all: $(OUTDIR)/lib$(1)_x86_64.so 200 $(OUTDIR)/lib$(1)_x86_64.so: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_64_pic)) $(4) 201 $(call LOG,LINK,$$@,$(X86_32_LINK) -o $$@ $$(filter-out $(4),$$^) -shared -m64 $(LD_X86_64) $$(LD_FLAGS) $(foreach lib,$(3),-l$(lib))) 202 203 $(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).so 204 install: $(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).so 205 $(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).so: $(OUTDIR)/lib$(1)_x86_64.so 206 $(MKDIR) -p $$(dir $$@) 207 $(call LOG,CP ,$$@,$(OSHELPERS) cp $$^ $$@) 208 ifneq ($(5),1) 209 GLIBC_SO_LIST += $(OUTDIR)/lib$(1)_x86_64.so 210 GLIBC_REMAP += -n lib$(1)_x86_64.so,lib$(1).so 211 endif 212 endif 213 endef 214 215 # 216 # LIB Macro 217 # 218 # $1 = Target Name 219 # $2 = List of Sources 220 # $3 = POSIX Link Flags 221 # $4 = VC Link Flags (unused) 222 # 223 define LIB_RULE 224 $(STAMPDIR)/$(1).stamp: 225 @echo " STAMP $$@" 226 @echo "TOUCHED $$@" > $(STAMPDIR)/$(1).stamp 227 228 ifneq (,$(findstring x86_32,$(ARCHES))) 229 all: $(OUTDIR)/lib$(1)_x86_32.a 230 $(OUTDIR)/lib$(1)_x86_32.a: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_32)) 231 $(MKDIR) -p $$(dir $$@) 232 $(call LOG,LIB ,$$@,$(X86_32_LIB) -cr $$@ $$^) 233 234 $(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).a 235 install: $(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).a 236 $(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).a: $(OUTDIR)/lib$(1)_x86_32.a 237 $(MKDIR) -p $$(dir $$@) 238 $(call LOG,CP ,$$@,$(OSHELPERS) cp $$^ $$@) 239 endif 240 241 ifneq (,$(findstring x86_64,$(ARCHES))) 242 all: $(OUTDIR)/lib$(1)_x86_64.a 243 $(OUTDIR)/lib$(1)_x86_64.a: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_64)) 244 $(MKDIR) -p $$(dir $$@) 245 $(call LOG,LIB ,$$@,$(X86_64_LIB) -cr $$@ $$^) 246 247 $(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).a 248 install: $(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).a 249 $(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).a: $(OUTDIR)/lib$(1)_x86_64.a 250 $(MKDIR) -p $$(dir $$@) 251 $(call LOG,CP ,$$@,$(OSHELPERS) cp $$^ $$@) 252 endif 253 254 ifneq (,$(findstring arm,$(ARCHES))) 255 ifneq ($(TOOLCHAIN),glibc) 256 all: $(OUTDIR)/lib$(1)_arm.a 257 $(OUTDIR)/lib$(1)_arm.a: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_arm)) 258 $(MKDIR) -p $$(dir $$@) 259 $(call LOG,LIB ,$$@,$(ARM_LIB) -cr $$@ $$^) 260 261 $(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).a 262 install: $(LIBDIR)/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).a 263 $(LIBDIR)/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).a: $(OUTDIR)/lib$(1)_arm.a 264 $(MKDIR) -p $$(dir $$@) 265 $(call LOG,CP ,$$@,$(OSHELPERS) cp $$^ $$@) 266 endif 267 endif 268 endef 269 270 271 # 272 # Specific Link Macro 273 # 274 # $1 = Target Name 275 # $2 = List of Sources 276 # $3 = List of LIBS 277 # $4 = List of DEPS 278 # $5 = POSIX Link Flags 279 # $6 = Library Paths 280 # 281 define LINKER_RULE 282 ifneq (,$(findstring x86_32,$(ARCHES))) 283 all: $(OUTDIR)/$(1)_x86_32.nexe 284 $(OUTDIR)/$(1)_x86_32.nexe: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_32)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) 285 $(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)) 286 endif 287 288 ifneq (,$(findstring x86_64,$(ARCHES))) 289 all: $(OUTDIR)/$(1)_x86_64.nexe 290 $(OUTDIR)/$(1)_x86_64.nexe: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_64)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) 291 $(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)) 292 endif 293 294 ifneq (,$(findstring arm,$(ARCHES))) 295 all: $(OUTDIR)/$(1)_arm.nexe 296 $(OUTDIR)/$(1)_arm.nexe: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_arm)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) 297 $(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)) 298 endif 299 endef 300 301 302 # 303 # Generalized Link Macro 304 # 305 # $1 = Target Name 306 # $2 = List of Sources 307 # $3 = List of LIBS 308 # $4 = List of DEPS 309 # $5 = POSIX Linker Switches 310 # $6 = VC Linker Switches 311 # 312 define LINK_RULE 313 $(call LINKER_RULE,$(1),$(2),$(filter-out pthread,$(3)),$(4),$(5),$(LIB_PATHS)) 314 endef 315 316 317 # 318 # Strip Macro for each arch (e.g., each arch supported by LINKER_RULE). 319 # 320 # $1 = Target Name 321 # $2 = Source Name 322 # 323 define STRIP_ALL_RULE 324 ifneq (,$(findstring x86_32,$(ARCHES))) 325 $(OUTDIR)/$(1)_x86_32.nexe: $(OUTDIR)/$(2)_x86_32.nexe 326 $(call LOG,STRIP,$$@,$(X86_32_STRIP) -o $$@ $$^) 327 endif 328 329 ifneq (,$(findstring x86_64,$(ARCHES))) 330 $(OUTDIR)/$(1)_x86_64.nexe: $(OUTDIR)/$(2)_x86_64.nexe 331 $(call LOG,STRIP,$$@,$(X86_64_STRIP) -o $$@ $$^) 332 endif 333 334 ifneq (,$(findstring arm,$(ARCHES))) 335 $(OUTDIR)/$(1)_arm.nexe: $(OUTDIR)/$(2)_arm.nexe 336 $(call LOG,STRIP,$$@,$(ARM_STRIP) -o $$@ $$^) 337 endif 338 endef 339 340 341 # 342 # Top-level Strip Macro 343 # 344 # $1 = Target Basename 345 # $2 = Source Basename 346 # 347 define STRIP_RULE 348 $(call STRIP_ALL_RULE,$(1),$(2)) 349 endef 350 351 352 # 353 # Strip Macro for each arch (e.g., each arch supported by MAP_RULE). 354 # 355 # $1 = Target Name 356 # $2 = Source Name 357 # 358 define MAP_ALL_RULE 359 ifneq (,$(findstring x86_32,$(ARCHES))) 360 all: $(OUTDIR)/$(1)_x86_32.map 361 $(OUTDIR)/$(1)_x86_32.map: $(OUTDIR)/$(2)_x86_32.nexe 362 $(call LOG,MAP,$$@,$(X86_32_NM) -l $$^ > $$@) 363 endif 364 365 ifneq (,$(findstring x86_64,$(ARCHES))) 366 all: $(OUTDIR)/$(1)_x86_64.map 367 $(OUTDIR)/$(1)_x86_64.map: $(OUTDIR)/$(2)_x86_64.nexe 368 $(call LOG,MAP,$$@,$(X86_64_NM) -l $$^ > $$@) 369 endif 370 371 ifneq (,$(findstring arm,$(ARCHES))) 372 all: $(OUTDIR)/$(1)_arm.map 373 $(OUTDIR)/$(1)_arm.map: $(OUTDIR)/$(2)_arm.nexe 374 $(call LOG,MAP,$$@,$(ARM_NM) -l $$^ > $$@ ) 375 endif 376 endef 377 378 379 # 380 # Top-level MAP Generation Macro 381 # 382 # $1 = Target Basename 383 # $2 = Source Basename 384 # 385 define MAP_RULE 386 $(call MAP_ALL_RULE,$(1),$(2)) 387 endef 388 389 390 # 391 # Generate ARCH_SUFFIXES, a list of suffixes for executables corresponding to all 392 # the architectures in the current build. 393 # 394 ARCH_SUFFIXES := $(foreach arch,$(ARCHES),_$(arch).nexe) 395 396 397 # 398 # NMF Manifiest generation 399 # 400 # Use the python script create_nmf to scan the binaries for dependencies using 401 # objdump. Pass in the (-L) paths to the default library toolchains so that we 402 # can find those libraries and have it automatically copy the files (-s) to 403 # the target directory for us. 404 # 405 # $1 = Target Name (the basename of the nmf 406 # $2 = Additional create_nmf.py arguments 407 # 408 NMF := python $(NACL_SDK_ROOT)/tools/create_nmf.py 409 ifeq ($(CONFIG),Debug) 410 NMF_FLAGS += --debug-libs 411 HTML_FLAGS += --debug-libs 412 endif 413 414 EXECUTABLES=$(foreach arch,$(ARCH_SUFFIXES),$(OUTDIR)/$(1)$(arch)) $(GLIBC_SO_LIST) 415 416 define NMF_RULE 417 all: $(OUTDIR)/$(1).nmf 418 $(OUTDIR)/$(1).nmf: $(EXECUTABLES) 419 $(call LOG,CREATE_NMF,$$@,$(NMF) $(NMF_FLAGS) -o $$@ $$^ $(GLIBC_PATHS) -s $(OUTDIR) $(2) $(GLIBC_REMAP)) 420 endef 421 422 # 423 # HTML file generation 424 # 425 CREATE_HTML := python $(NACL_SDK_ROOT)/tools/create_html.py 426 427 define HTML_RULE 428 all: $(OUTDIR)/$(1).html 429 $(OUTDIR)/$(1).html: $(EXECUTABLES) 430 $(call LOG,CREATE_HTML,$$@,$(CREATE_HTML) $(HTML_FLAGS) -o $$@ $$^) 431 endef 432 433 434 # 435 # Determine which executable to pass into the debugger. For newlib 436 # this is the NEXE which will actually be used. For glibc, runnable-ld.so 437 # is the "app", and the "app" is actual an .so we load. 438 # 439 ifeq (x86_32,$(SYSARCH)) 440 LIB_NAME = lib32 441 else 442 LIB_NAME = lib64 443 endif 444 445 446 ifeq (newlib,$(TOOLCHAIN)) 447 GDB_DEBUG_TARGET = $(abspath $(OUTDIR))/$(TARGET)_$(SYSARCH).nexe 448 else 449 GDB_DEBUG_TARGET = $(abspath $(OUTDIR))/$(LIB_NAME)/runnable-ld.so 450 endif 451