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