| # 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}} |