12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# GNU Make based build file. For details on GNU Make see: 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# http://www.gnu.org/software/make/manual/make.html 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Macros for TOOLS 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# We use the C++ compiler for everything and then use the -Wl,-as-needed flag 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# in the linker to drop libc++ unless it's actually needed. 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)HOST_CC ?= cl.exe /nologo 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)HOST_CXX ?= cl.exe /nologo /EHsc 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)HOST_LINK ?= link.exe /nologo 2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)HOST_LIB ?= lib.exe /nologo 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ifeq (,$(findstring cl.exe,$(shell $(WHICH) cl.exe))) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(warning To skip the host build use:) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(warning "make NO_HOST_BUILDS=1") 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(error Unable to find cl.exe in PATH while building Windows host build) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endif 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)ifeq ($(CONFIG),Release) 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)WIN_OPT_FLAGS ?= /O2 /MT /Z7 -DNDEBUG 31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)else 32868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)WIN_OPT_FLAGS ?= /Od /MTd /Z7 -DNACL_SDK_DEBUG 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endif 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)WIN_FLAGS ?= -DWIN32 -D_WIN32 -DPTW32_STATIC_LIB 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Individual Macros 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Source Name 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = Compile Flags 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define C_COMPILER_RULE 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call SRC_TO_OBJ,$(1)): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) $(call LOG,CC,$$@,$(HOST_CC) /Fo$$@ /c $$< $(WIN_OPT_FLAGS) $(2) $(WIN_FLAGS)) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define CXX_COMPILER_RULE 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call SRC_TO_OBJ,$(1)): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) $(call LOG,CXX,$$@,$(HOST_CXX) /Fo$$@ -c $$< $(WIN_OPT_FLAGS) $(2) $(WIN_FLAGS)) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Source Name 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = POSIX Compile Flags (unused) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $3 = VC Compile Flags 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define COMPILE_RULE 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ifeq ($(suffix $(1)),.c) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call C_COMPILER_RULE,$(1),$(3) $(foreach inc,$(INC_PATHS),/I$(inc))) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)else 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call CXX_COMPILER_RULE,$(1),$(3) $(foreach inc,$(INC_PATHS),/I$(inc))) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endif 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# LIB Macro 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Target Name 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = List of Sources 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define LIB_RULE 767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)$(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(OSNAME)_x86_32_host/$(CONFIG)/$(1).lib 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @echo "TOUCHED $$@" > $(STAMPDIR)/$(1).stamp 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)all:$(LIBDIR)/$(OSNAME)_x86_32_host/$(CONFIG)/$(1).lib 807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)$(LIBDIR)/$(OSNAME)_x86_32_host/$(CONFIG)/$(1).lib: $(foreach src,$(2),$(OUTDIR)/$(basename $(src)).o) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) $(MKDIR) -p $$(dir $$@) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) $(call LOG,LIB,$$@,$(HOST_LIB) /OUT:$$@ $$^ $(WIN_LDFLAGS)) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Link Macro 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Target Name 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = List of inputs 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $3 = List of libs 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $4 = List of deps 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $5 = List of lib dirs 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $6 = Other Linker Args 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define LINKER_RULE 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)all: $(1) 987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)$(1): $(2) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) $(call LOG,LINK,$$@,$(HOST_LINK) /DLL /OUT:$(1) /PDB:$(1).pdb $(2) /DEBUG $(foreach path,$(5),/LIBPATH:$(path)/$(OSNAME)_x86_32_host/$(CONFIG)) $(foreach lib,$(3),$(lib).lib) $(6)) 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Link Macro 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $1 = Target Name 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $2 = List of Sources 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $3 = List of LIBS 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $4 = List of DEPS 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $5 = POSIX Linker Switches 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# $6 = VC Linker Switches 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)define LINK_RULE 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)$(call LINKER_RULE,$(OUTDIR)/$(1)$(HOST_EXT),$(foreach src,$(2),$(OUTDIR)/$(basename $(src)).o),$(3),$(4),$(LIB_PATHS),$(6)) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)endef 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# Strip Macro 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# This is a nop (copy) since visual studio already keeps debug info 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# separate from the binaries 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# $1 = Target Name 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# $2 = Input Name 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)define STRIP_RULE 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)all: $(OUTDIR)/$(1)$(HOST_EXT) 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)$(OUTDIR)/$(1)$(HOST_EXT): $(OUTDIR)/$(2)$(HOST_EXT) 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) $(call LOG,COPY,$$@,$(CP) $$^ $$@) 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)endef 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)all: $(LIB_LIST) $(DEPS_LIST) 133