blob: 750af9daf284fb1170e96346d8f2be6f52c98d80 [file] [log] [blame]
# 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'])}}
[[]]
TARGET = {{targets[0]['NAME']}}
[[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
[[]]
[[ExpandDict('DEPS', targets[0].get('DEPS', []))]]
[[ExpandDict('LIBS', targets[0].get('LIBS', []))]]
[[for target in targets:]]
[[ source_list = sorted(target['SOURCES'] + target.get('EXTRA_SOURCES', []))]]
[[ source_list = (s for s in source_list 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}}