19fa09679c31dd1fc79a07ed24431b6951227240aricow@chromium.org# Copyright (c) 2012 The Chromium Authors. All rights reserved. 29e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# Use of this source code is governed by a BSD-style license that can be 39e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# found in the LICENSE file. 49e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 59e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 69e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# GNU Make based build file. For details on GNU Make see: 79e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# http://www.gnu.org/software/make/manual/make.html 89e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 99e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 109e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 119e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 129e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# Macros for TOOLS 139e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 149e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# We use the C++ compiler for everything and then use the -Wl,-as-needed flag 159e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# in the linker to drop libc++ unless it's actually needed. 169e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 179e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgCC ?= $(NACL_COMPILER_PREFIX) gcc 189e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgCXX ?= $(NACL_COMPILER_PREFIX) g++ 199e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgLINK ?= $(CXX) 209e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgLIB ?= ar 219e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgSTRIP ?= strip 229e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 239e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# Adding -Wl,-Bsymbolic means that symbols defined within the module are always 249e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# used by the moulde, and not shadowed by symbols already loaded in, for 259e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# exmaple, libc. Without this the libc symbols (or anything injected with 269e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# LD_PRELOAD will take precedence). 279e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgHOST_LDFLAGS ?= -Wl,-Map,$(OUTDIR)/$(TARGET).map -Wl,-Bsymbolic 289e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 299e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgifeq (,$(findstring gcc,$(shell $(WHICH) gcc))) 309e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org$(warning To skip the host build use:) 319e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org$(warning "make all_versions NO_HOST_BUILDS=1") 329e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org$(error Unable to find gcc in PATH while building Host build) 339e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgendif 349e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 359e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgHOST_WARNINGS ?= -Wno-long-long -Wall -Werror 369e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgHOST_CFLAGS = -fPIC -pthread $(HOST_WARNINGS) -I$(NACL_SDK_ROOT)/include -I$(NACL_SDK_ROOT)/include/linux 379e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 389e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 399e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 409e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# Individual Macros 419e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 429e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# $1 = Source Name 439e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# $2 = Compile Flags 449e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 459e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgdefine C_COMPILER_RULE 469e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org-include $(call SRC_TO_DEP,$(1)) 479e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org$(call SRC_TO_OBJ,$(1)): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 489e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org $(call LOG,CC ,$$@,$(CC) -o $$@ -c $$< -fPIC $(POSIX_FLAGS) $(HOST_CFLAGS) $(2)) 499e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1)) 509e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgendef 519e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 529e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgdefine CXX_COMPILER_RULE 539e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org-include $(call SRC_TO_DEP,$(1)) 549e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org$(call SRC_TO_OBJ,$(1)): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 559e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org $(call LOG,CXX ,$$@,$(CXX) -o $$@ -c $$< -fPIC $(POSIX_FLAGS) $(HOST_CFLAGS) $(2)) 569e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1)) 579e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgendef 589e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 599e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 609e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# Compile Macro 619e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 629e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# $1 = Source Name 639e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# $2 = POSIX Compile Flags 649e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# $3 = VC Flags (unused) 659e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 669e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgdefine COMPILE_RULE 679e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgifeq ($(suffix $(1)),.c) 689e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org$(call C_COMPILER_RULE,$(1),$(2) $(foreach inc,$(INC_PATHS),-I$(inc))) 699e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgelse 709e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org$(call CXX_COMPILER_RULE,$(1),$(2) $(foreach inc,$(INC_PATHS),-I$(inc))) 719e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgendif 729e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgendef 739e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 749e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 759e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 769e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# SO Macro 779e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 789e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# $1 = Target Name 799e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# $2 = List of Sources 809e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 819e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 829e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgdefine SO_RULE 839e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org$(error 'Shared libraries not supported by Host') 849e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgendef 859e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 869e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 879e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 889e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# LIB Macro 899e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 909e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# $1 = Target Name 914d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org# $2 = List of Sources 924d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org# 939e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 949e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgdefine LIB_RULE 959e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org$(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(OSNAME)_host/$(CONFIG)/lib$(1).a 969e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org @echo "TOUCHED $$@" > $(STAMPDIR)/$(1).stamp 979e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 989e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgall: $(LIBDIR)/$(OSNAME)_host/$(CONFIG)/lib$(1).a 999e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org$(LIBDIR)/$(OSNAME)_host/$(CONFIG)/lib$(1).a: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src))) 1009e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org $(MKDIR) -p $$(dir $$@) 1019e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org $(RM) -f $$@ 1029e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org $(call LOG,LIB,$$@,$(LIB) -cr $$@ $$^) 1039e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgendef 1049e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 1059e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 1069e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 1079e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# Link Macro 1089e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 1099e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# $1 = Target Name 1109e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# $2 = List of inputs 1119e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# $3 = List of libs 1129e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# $4 = List of deps 1139e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# $5 = List of lib dirs 1149e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# $6 = Linker Args 1159e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 1169e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgifdef STANDALONE 1173847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.comdefine LINKER_RULE 1183847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.comall: $(1) 1193847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com$(1): $(2) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) 1209e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org $(call LOG,LINK,$$@,$(LINK) -o $(1) $(2) $(HOST_LDFLAGS) $(NACL_LDFLAGS) $(LDFLAGS) $(foreach path,$(5),-L$(path)/$(OSNAME)_host)/$(CONFIG) $(foreach lib,$(3),-l$(lib)) $(6)) 1219e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgendef 1229e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgelse 1239e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgdefine LINKER_RULE 1249e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgall: $(1) 1259e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org$(1): $(2) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) 1269e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org $(call LOG,LINK,$$@,$(LINK) -shared -o $(1) $(2) $(HOST_LDFLAGS) $(NACL_LDFLAGS) $(LDFLAGS) $(foreach path,$(5),-L$(path)/$(OSNAME)_host)/$(CONFIG) $(foreach lib,$(3),-l$(lib)) $(6)) 1279e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgendef 1289e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgendif 1299e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 1309e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 1319e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 1329e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# Link Macro 1339e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 1349e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# $1 = Target Name 1359e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# $2 = List of Sources 1369e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# $3 = List of LIBS 1379e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# $4 = List of DEPS 1389e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# $5 = POSIX Linker Switches 1399e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# $6 = VC Linker Switches 1409e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 1419e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgdefine LINK_RULE 1429e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org$(call LINKER_RULE,$(OUTDIR)/$(1)$(HOST_EXT),$(foreach src,$(2),$(call SRC_TO_OBJ,$(src))),$(filter-out pthread,$(3)),$(4),$(LIB_PATHS),$(5)) 1439e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgendef 1449e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 1459e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgall: $(LIB_LIST) $(DEPS_LIST) 1469e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 1479e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 1489e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# 1499e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# Strip Macro 1509e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org# The host build makes shared libraries, so the best we can do is strip-debug. 1517304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org# We cannot strip the symbol names. 1527304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org# 1537304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org# $1 = Target Name 1547c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org# $2 = Input Name 1557c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org# 1567c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.orgdefine STRIP_RULE 157ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.orgall: $(OUTDIR)/$(1)$(HOST_EXT) 158ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org$(OUTDIR)/$(1)$(HOST_EXT): $(OUTDIR)/$(2)$(HOST_EXT) 1599e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org $(call LOG,STRIP,$$@,$(STRIP) --strip-debug -o $$@ $$^) 1609e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgendef 1619e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 1629e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org 16331b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org# 16431b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org# Run standalone builds (command line builds outside of chrome) 16531b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org# 1669e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgifdef STANDALONE 1679e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgrun: all 1689e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org $(RUN_UNDER) $(OUTDIR)/$(TARGET)$(HOST_EXT) $(EXE_ARGS) 1699e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgendif 1709e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org