nacl_gcc.mk revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
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# 14LD_X86_32 := -L$(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_32/$(CONFIG) 15LD_X86_64 := -L$(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_64/$(CONFIG) 16LD_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# 25X86_TC_BIN ?= $(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin 26ARM_TC_BIN ?= $(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin 27 28X86_32_CC ?= $(NACL_COMPILER_PREFIX) $(X86_TC_BIN)/i686-nacl-gcc 29X86_32_CXX ?= $(NACL_COMPILER_PREFIX) $(X86_TC_BIN)/i686-nacl-g++ 30X86_32_LINK ?= $(X86_TC_BIN)/i686-nacl-g++ 31X86_32_LIB ?= $(X86_TC_BIN)/i686-nacl-ar 32X86_32_STRIP ?= $(X86_TC_BIN)/i686-nacl-strip 33X86_32_NM ?= $(X86_TC_BIN)/i686-nacl-nm 34 35X86_64_CC ?= $(NACL_COMPILER_PREFIX) $(X86_TC_BIN)/x86_64-nacl-gcc 36X86_64_CXX ?= $(NACL_COMPILER_PREFIX) $(X86_TC_BIN)/x86_64-nacl-g++ 37X86_64_LINK ?= $(X86_TC_BIN)/x86_64-nacl-g++ 38X86_64_LIB ?= $(X86_TC_BIN)/x86_64-nacl-ar 39X86_64_STRIP ?= $(X86_TC_BIN)/x86_64-nacl-strip 40X86_64_NM ?= $(X86_TC_BIN)/x86_64-nacl-nm 41 42ARM_CC ?= $(NACL_COMPILER_PREFIX) $(ARM_TC_BIN)/arm-nacl-gcc 43ARM_CXX ?= $(NACL_COMPILER_PREFIX) $(ARM_TC_BIN)/arm-nacl-g++ 44ARM_LINK ?= $(ARM_TC_BIN)/arm-nacl-g++ 45ARM_LIB ?= $(ARM_TC_BIN)/arm-nacl-ar 46ARM_STRIP ?= $(ARM_TC_BIN)/arm-nacl-strip 47ARM_NM ?= $(ARM_TC_BIN)/arm-nacl-nm 48 49# Architecture-specific flags 50X86_32_CFLAGS ?= 51X86_64_CFLAGS ?= 52ARM_CFLAGS ?= 53 54X86_32_CXXFLAGS ?= 55X86_64_CXXFLAGS ?= 56ARM_CXXFLAGS ?= 57 58X86_32_LDFLAGS ?= -Wl,-Map,$(OUTDIR)/$(TARGET)_x86_32.map 59X86_64_LDFLAGS ?= -Wl,-Map,$(OUTDIR)/$(TARGET)_x86_64.map 60ARM_LDFLAGS ?= -Wl,-Map,$(OUTDIR)/$(TARGET)_arm.map 61 62# 63# Compile Macro 64# 65# $1 = Source Name 66# $2 = Compile Flags 67# 68define 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) 98endef 99 100define 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) 130endef 131 132 133# 134# $1 = Source Name 135# $2 = POSIX Compile Flags 136# $3 = Include Directories 137# $4 = VC Flags (unused) 138# 139define COMPILE_RULE 140ifeq ($(suffix $(1)),.c) 141$(call C_COMPILER_RULE,$(1),$(2) $(foreach inc,$(INC_PATHS),-I$(inc)) $(3)) 142else 143$(call CXX_COMPILER_RULE,$(1),$(2) $(foreach inc,$(INC_PATHS),-I$(inc)) $(3)) 144endif 145endef 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# 151VALID_ARCHES := x86_32 x86_64 152ifeq (newlib,$(TOOLCHAIN)) 153VALID_ARCHES += arm 154endif 155 156ifdef NACL_ARCH 157ifeq (,$(findstring $(NACL_ARCH),$(VALID_ARCHES))) 158$(error Invalid arch specified in NACL_ARCH: $(NACL_ARCH). Valid values are: $(VALID_ARCHES)) 159endif 160ARCHES = ${NACL_ARCH} 161else 162ARCHES ?= ${VALID_ARCHES} 163endif 164 165# 166# SO Macro 167# 168# $1 = Target Name 169# $2 = List of Sources 170# $3 = List of LIBS 171# $4 = List of DEPS 172# $5 = 1 => Don't add to NMF. 173# 174GLIBC_REMAP := 175define SO_RULE 176ifneq (,$(findstring x86_32,$(ARCHES))) 177all: $(OUTDIR)/lib$(1)_x86_32.so 178$(OUTDIR)/lib$(1)_x86_32.so: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_32_pic)) $(4) 179 $(call LOG,LINK,$$@,$(X86_32_LINK) -o $$@ $$(filter-out $(4),$$^) -shared -m32 $(LD_X86_32) $$(LD_FLAGS) $(foreach lib,$(3),-l$(lib))) 180 181install: $(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).so 182$(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).so: $(OUTDIR)/lib$(1)_x86_32.so 183 $(MKDIR) -p $$(dir $$@) 184 $(call LOG,CP ,$$@,$(OSHELPERS) cp $$^ $$@) 185ifneq ($(5),1) 186GLIBC_SO_LIST += $(OUTDIR)/lib$(1)_x86_32.so 187GLIBC_REMAP += -n lib$(1)_x86_32.so,lib$(1).so 188endif 189endif 190 191ifneq (,$(findstring x86_64,$(ARCHES))) 192all: $(OUTDIR)/lib$(1)_x86_64.so 193$(OUTDIR)/lib$(1)_x86_64.so: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_64_pic)) $(4) 194 $(call LOG,LINK,$$@,$(X86_32_LINK) -o $$@ $$(filter-out $(4),$$^) -shared -m64 $(LD_X86_64) $$(LD_FLAGS) $(foreach lib,$(3),-l$(lib))) 195 196install: $(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).so 197$(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).so: $(OUTDIR)/lib$(1)_x86_64.so 198 $(MKDIR) -p $$(dir $$@) 199 $(call LOG,CP ,$$@,$(OSHELPERS) cp $$^ $$@) 200ifneq ($(5),1) 201GLIBC_SO_LIST += $(OUTDIR)/lib$(1)_x86_64.so 202GLIBC_REMAP += -n lib$(1)_x86_64.so,lib$(1).so 203endif 204endif 205endef 206 207 208# 209# LIB Macro 210# 211# $1 = Target Name 212# $2 = List of Sources 213# $3 = POSIX Link Flags 214# $4 = VC Link Flags (unused) 215# 216define LIB_RULE 217$(STAMPDIR)/$(1).stamp: $(OUTDIR)/lib$(1)_x86_32.a 218$(STAMPDIR)/$(1).stamp: $(OUTDIR)/lib$(1)_x86_64.a 219ifneq ($(TOOLCHAIN),glibc) 220$(STAMPDIR)/$(1).stamp: $(OUTDIR)/lib$(1)_arm.a 221endif 222 223$(STAMPDIR)/$(1).stamp: 224 @echo "TOUCHED $$@" > $(STAMPDIR)/$(1).stamp 225 226ifneq (,$(findstring x86_32,$(ARCHES))) 227all: $(OUTDIR)/lib$(1)_x86_32.a 228$(OUTDIR)/lib$(1)_x86_32.a: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_32)) 229 $(MKDIR) -p $$(dir $$@) 230 $(call LOG,LIB ,$$@,$(X86_32_LIB) -cr $$@ $$^) 231 232install: $(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).a 233$(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).a: $(OUTDIR)/lib$(1)_x86_32.a 234 $(MKDIR) -p $$(dir $$@) 235 $(call LOG,CP ,$$@,$(OSHELPERS) cp $$^ $$@) 236endif 237 238ifneq (,$(findstring x86_64,$(ARCHES))) 239all: $(OUTDIR)/lib$(1)_x86_64.a 240$(OUTDIR)/lib$(1)_x86_64.a: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_64)) 241 $(MKDIR) -p $$(dir $$@) 242 $(call LOG,LIB ,$$@,$(X86_64_LIB) -cr $$@ $$^) 243 244install: $(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).a 245$(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).a: $(OUTDIR)/lib$(1)_x86_64.a 246 $(MKDIR) -p $$(dir $$@) 247 $(call LOG,CP ,$$@,$(OSHELPERS) cp $$^ $$@) 248endif 249 250ifneq (,$(findstring arm,$(ARCHES))) 251ifneq ($(TOOLCHAIN),glibc) 252all: $(OUTDIR)/lib$(1)_arm.a 253$(OUTDIR)/lib$(1)_arm.a: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_arm)) 254 $(MKDIR) -p $$(dir $$@) 255 $(call LOG,LIB ,$$@,$(ARM_LIB) -cr $$@ $$^) 256 257install: $(LIBDIR)/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).a 258$(LIBDIR)/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).a: $(OUTDIR)/lib$(1)_arm.a 259 $(MKDIR) -p $$(dir $$@) 260 $(call LOG,CP ,$$@,$(OSHELPERS) cp $$^ $$@) 261endif 262endif 263endef 264 265 266# 267# Specific Link Macro 268# 269# $1 = Target Name 270# $2 = List of Sources 271# $3 = List of LIBS 272# $4 = List of DEPS 273# $5 = POSIX Link Flags 274# $6 = Library Paths 275# 276define LINKER_RULE 277ifneq (,$(findstring x86_32,$(ARCHES))) 278all: $(OUTDIR)/$(1)_x86_32.nexe 279$(OUTDIR)/$(1)_x86_32.nexe: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_32)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) 280 $(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)) 281endif 282 283ifneq (,$(findstring x86_64,$(ARCHES))) 284all: $(OUTDIR)/$(1)_x86_64.nexe 285$(OUTDIR)/$(1)_x86_64.nexe: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_64)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) 286 $(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)) 287endif 288 289ifneq (,$(findstring arm,$(ARCHES))) 290all: $(OUTDIR)/$(1)_arm.nexe 291$(OUTDIR)/$(1)_arm.nexe: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_arm)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) 292 $(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)) 293endif 294endef 295 296 297# 298# Generalized Link Macro 299# 300# $1 = Target Name 301# $2 = List of Sources 302# $3 = List of LIBS 303# $4 = List of DEPS 304# $5 = POSIX Linker Switches 305# $6 = VC Linker Switches 306# 307define LINK_RULE 308$(call LINKER_RULE,$(1),$(2),$(filter-out pthread,$(3)),$(4),$(5),$(LIB_PATHS)) 309endef 310 311 312# 313# Strip Macro for each arch (e.g., each arch supported by LINKER_RULE). 314# 315# $1 = Target Name 316# $2 = Source Name 317# 318define STRIP_ALL_RULE 319ifneq (,$(findstring x86_32,$(ARCHES))) 320$(OUTDIR)/$(1)_x86_32.nexe: $(OUTDIR)/$(2)_x86_32.nexe 321 $(call LOG,STRIP,$$@,$(X86_32_STRIP) -o $$@ $$^) 322endif 323 324ifneq (,$(findstring x86_64,$(ARCHES))) 325$(OUTDIR)/$(1)_x86_64.nexe: $(OUTDIR)/$(2)_x86_64.nexe 326 $(call LOG,STRIP,$$@,$(X86_64_STRIP) -o $$@ $$^) 327endif 328 329ifneq (,$(findstring arm,$(ARCHES))) 330$(OUTDIR)/$(1)_arm.nexe: $(OUTDIR)/$(2)_arm.nexe 331 $(call LOG,STRIP,$$@,$(ARM_STRIP) -o $$@ $$^) 332endif 333endef 334 335 336# 337# Top-level Strip Macro 338# 339# $1 = Target Basename 340# $2 = Source Basename 341# 342define STRIP_RULE 343$(call STRIP_ALL_RULE,$(1),$(2)) 344endef 345 346 347# 348# Strip Macro for each arch (e.g., each arch supported by MAP_RULE). 349# 350# $1 = Target Name 351# $2 = Source Name 352# 353define MAP_ALL_RULE 354ifneq (,$(findstring x86_32,$(ARCHES))) 355all: $(OUTDIR)/$(1)_x86_32.map 356$(OUTDIR)/$(1)_x86_32.map: $(OUTDIR)/$(2)_x86_32.nexe 357 $(call LOG,MAP,$$@,$(X86_32_NM) -l $$^ > $$@) 358endif 359 360ifneq (,$(findstring x86_64,$(ARCHES))) 361all: $(OUTDIR)/$(1)_x86_64.map 362$(OUTDIR)/$(1)_x86_64.map: $(OUTDIR)/$(2)_x86_64.nexe 363 $(call LOG,MAP,$$@,$(X86_64_NM) -l $$^ > $$@) 364endif 365 366ifneq (,$(findstring arm,$(ARCHES))) 367all: $(OUTDIR)/$(1)_arm.map 368$(OUTDIR)/$(1)_arm.map: $(OUTDIR)/$(2)_arm.nexe 369 $(call LOG,MAP,$$@,$(ARM_NM) -l $$^ > $$@ ) 370endif 371endef 372 373 374# 375# Top-level MAP Generation Macro 376# 377# $1 = Target Basename 378# $2 = Source Basename 379# 380define MAP_RULE 381$(call MAP_ALL_RULE,$(1),$(2)) 382endef 383 384 385# 386# Generate ARCH_SUFFIXES, a list of suffixes for executables corresponding to all 387# the architectures in the current build. 388# 389ARCH_SUFFIXES := $(foreach arch,$(ARCHES),_$(arch).nexe) 390 391 392# 393# NMF Manifiest generation 394# 395# Use the python script create_nmf to scan the binaries for dependencies using 396# objdump. Pass in the (-L) paths to the default library toolchains so that we 397# can find those libraries and have it automatically copy the files (-s) to 398# the target directory for us. 399# 400# $1 = Target Name (the basename of the nmf 401# $2 = Additional create_nmf.py arguments 402# 403NMF := python $(NACL_SDK_ROOT)/tools/create_nmf.py 404ifeq ($(CONFIG),Debug) 405NMF_FLAGS += --debug-libs 406HTML_FLAGS += --debug-libs 407endif 408 409EXECUTABLES=$(foreach arch,$(ARCH_SUFFIXES),$(OUTDIR)/$(1)$(arch)) $(GLIBC_SO_LIST) 410 411define NMF_RULE 412all: $(OUTDIR)/$(1).nmf 413$(OUTDIR)/$(1).nmf: $(EXECUTABLES) 414 $(call LOG,CREATE_NMF,$$@,$(NMF) $(NMF_FLAGS) -o $$@ $$^ $(GLIBC_PATHS) -s $(OUTDIR) $(2) $(GLIBC_REMAP)) 415endef 416 417# 418# HTML file generation 419# 420CREATE_HTML := python $(NACL_SDK_ROOT)/tools/create_html.py 421 422define HTML_RULE 423all: $(OUTDIR)/$(1).html 424$(OUTDIR)/$(1).html: $(EXECUTABLES) 425 $(call LOG,CREATE_HTML,$$@,$(CREATE_HTML) $(HTML_FLAGS) -o $$@ $$^) 426endef 427