# Copyright (c) 2013 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # GNU Makefile based on shared rules provided by the Native Client SDK. # See README.Makefiles for more details. [[]] [[def ExpandDict(key, value_in, pre_list=[], post_list=[]):]] [[ value = value_in or [] ]] [[ pre = pre_list or [] ]] [[ post = post_list or [] ]] [[ if type(value) is not dict:]] [[ out = pre]] [[ out.extend(value)]] [[ out.extend(post)]] [[ if out:]] {{key}} = {{' '.join(out)}} [[ ]] [[ return]] [[ ]] [[ for subkey in value:]] [[ out = pre]] [[ out.extend(value[subkey])]] [[ out.extend(post)]] {{key}}_{{subkey}} = {{' '.join(out)}} [[ ]] {{key}} = $({{key}}_$(TOOLCHAIN)) [[]] VALID_TOOLCHAINS := {{' '.join(tools)}} {{pre}} NACL_SDK_ROOT ?= $(abspath $(CURDIR)/{{rel_sdk}}) [[if 'INCLUDES' in targets[0]:]] EXTRA_INC_PATHS={{' '.join(targets[0]['INCLUDES'])}} [[]] [[if multi_platform:]] # Build with platform-specific subdirectories, to reduce the download size of # the app. MULTI_PLATFORM = 1 [[]] include $(NACL_SDK_ROOT)/tools/common.mk [[if desc.get('SOCKET_PERMISSIONS'):]] CHROME_ARGS += --allow-nacl-socket-api=localhost [[]] TARGET = {{targets[0]['NAME']}} [[ExpandDict('DEPS', targets[0].get('DEPS', []))]] [[ExpandDict('LIBS', targets[0].get('LIBS', []))]] [[for target in targets:]] [[ source_list = (s for s in sorted(target['SOURCES']) if not s.endswith('.h'))]] [[ source_list = ' \\\n '.join(source_list)]] [[ sources = target['NAME'] + '_SOURCES']] [[ cflags = target['NAME'] + '_CFLAGS']] [[ flags = target.get('CFLAGS', [])]] [[ flags.extend(target.get('CXXFLAGS', []))]] [[ if len(targets) == 1:]] [[ sources = 'SOURCES']] [[ cflags = 'CFLAGS']] [[ ]] [[ ExpandDict(cflags, flags)]] [[ for define in target.get('DEFINES', []):]] {{cflags}} += -D{{define}} [[ ]] [[ if 'CFLAGS_GCC' in target:]] ifneq ($(TOOLCHAIN),pnacl) {{cflags}} += {{' '.join(target['CFLAGS_GCC'])}} endif [[ ]] {{sources}} = {{source_list}} # Build rules generated by macros from common.mk: [[if targets[0].get('DEPS'):]] $(foreach dep,$(DEPS),$(eval $(call DEPEND_RULE,$(dep)))) [[if len(targets) > 1:]] [[ for target in targets:]] [[ name = target['NAME'] ]] $(foreach src,$({{name}}_SOURCES),$(eval $(call COMPILE_RULE,$(src),$({{name}}_CFLAGS)))) [[else:]] $(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS)))) [[]] [[for target in targets:]] [[ sources = target['NAME'] + '_SOURCES']] [[ name = target['NAME'] ]] [[ if len(targets) == 1:]] [[ sources = 'SOURCES']] [[ name = '$(TARGET)']] [[ if target['TYPE'] == 'so':]] $(eval $(call SO_RULE,{{name}},$({{sources}}))) [[ elif target['TYPE'] == 'so-standalone':]] $(eval $(call SO_RULE,{{name}},$({{sources}}),,,1)) [[ else:]] # The PNaCl workflow uses both an unstripped and finalized/stripped binary. # On NaCl, only produce a stripped binary for Release configs (not Debug). ifneq (,$(or $(findstring pnacl,$(TOOLCHAIN)),$(findstring Release,$(CONFIG)))) $(eval $(call LINK_RULE,{{name}}_unstripped,$({{sources}}),$(LIBS),$(DEPS))) $(eval $(call STRIP_RULE,{{name}},{{name}}_unstripped)) else $(eval $(call LINK_RULE,{{name}},$({{sources}}),$(LIBS),$(DEPS))) endif [[]] $(eval $(call NMF_RULE,$(TARGET),)){{post}}