Updating trunk VERSION from 2139.0 to 2140.0
[chromium-blink-merge.git] / native_client_sdk / src / tools / host_gcc.mk
blob18160ea653157e07dbda6c40737f3c8f336a61d8
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
6 # GNU Make based build file. For details on GNU Make see:
7 # http://www.gnu.org/software/make/manual/make.html
12 # Macros for TOOLS
14 # We use the C++ compiler for everything and then use the -Wl,-as-needed flag
15 # in the linker to drop libc++ unless it's actually needed.
17 CC ?= $(NACL_COMPILER_PREFIX) gcc
18 CXX ?= $(NACL_COMPILER_PREFIX) g++
19 LINK ?= $(CXX)
20 LIB ?= ar
21 STRIP ?= strip
23 # Adding -Wl,-Bsymbolic means that symbols defined within the module are always
24 # used by the moulde, and not shadowed by symbols already loaded in, for
25 # exmaple, libc. Without this the libc symbols (or anything injected with
26 # LD_PRELOAD will take precedence).
27 HOST_LDFLAGS ?= -Wl,-Map,$(OUTDIR)/$(TARGET).map -Wl,-Bsymbolic
29 ifeq (,$(findstring gcc,$(shell $(WHICH) gcc)))
30 $(warning To skip the host build use:)
31 $(warning "make all_versions NO_HOST_BUILDS=1")
32 $(error Unable to find gcc in PATH while building Host build)
33 endif
35 HOST_WARNINGS ?= -Wno-long-long -Wall -Werror
36 HOST_CFLAGS = -fPIC -pthread $(HOST_WARNINGS) -I$(NACL_SDK_ROOT)/include -I$(NACL_SDK_ROOT)/include/linux
40 # Individual Macros
42 # $1 = Source Name
43 # $2 = Compile Flags
45 define C_COMPILER_RULE
46 -include $(call SRC_TO_DEP,$(1))
47 $(call SRC_TO_OBJ,$(1)): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp
48 $(call LOG,CC ,$$@,$(CC) -o $$@ -c $$< -fPIC $(POSIX_FLAGS) $(HOST_CFLAGS) $(2))
49 @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1))
50 endef
52 define CXX_COMPILER_RULE
53 -include $(call SRC_TO_DEP,$(1))
54 $(call SRC_TO_OBJ,$(1)): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.stamp
55 $(call LOG,CXX ,$$@,$(CXX) -o $$@ -c $$< -fPIC $(POSIX_FLAGS) $(HOST_CFLAGS) $(2))
56 @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1))
57 endef
60 # Compile Macro
62 # $1 = Source Name
63 # $2 = POSIX Compile Flags
64 # $3 = VC Flags (unused)
66 define COMPILE_RULE
67 ifeq ($(suffix $(1)),.c)
68 $(call C_COMPILER_RULE,$(1),$(2) $(foreach inc,$(INC_PATHS),-I$(inc)))
69 else
70 $(call CXX_COMPILER_RULE,$(1),$(2) $(foreach inc,$(INC_PATHS),-I$(inc)))
71 endif
72 endef
76 # SO Macro
78 # $1 = Target Name
79 # $2 = List of Sources
82 define SO_RULE
83 $(error 'Shared libraries not supported by Host')
84 endef
88 # LIB Macro
90 # $1 = Target Name
91 # $2 = List of Sources
94 define LIB_RULE
95 $(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(OSNAME)_host/$(CONFIG)/lib$(1).a
96 @echo "TOUCHED $$@" > $(STAMPDIR)/$(1).stamp
98 all: $(LIBDIR)/$(OSNAME)_host/$(CONFIG)/lib$(1).a
99 $(LIBDIR)/$(OSNAME)_host/$(CONFIG)/lib$(1).a: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src)))
100 $(MKDIR) -p $$(dir $$@)
101 $(RM) -f $$@
102 $(call LOG,LIB,$$@,$(LIB) -cr $$@ $$^)
103 endef
107 # Link Macro
109 # $1 = Target Name
110 # $2 = List of inputs
111 # $3 = List of libs
112 # $4 = List of deps
113 # $5 = List of lib dirs
114 # $6 = Linker Args
116 ifdef STANDALONE
117 define LINKER_RULE
118 all: $(1)
119 $(1): $(2) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp)
120 $(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))
121 endef
122 else
123 define LINKER_RULE
124 all: $(1)
125 $(1): $(2) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp)
126 $(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))
127 endef
128 endif
132 # Link Macro
134 # $1 = Target Name
135 # $2 = List of Sources
136 # $3 = List of LIBS
137 # $4 = List of DEPS
138 # $5 = POSIX Linker Switches
139 # $6 = VC Linker Switches
141 define LINK_RULE
142 $(call LINKER_RULE,$(OUTDIR)/$(1)$(HOST_EXT),$(foreach src,$(2),$(call SRC_TO_OBJ,$(src))),$(filter-out pthread,$(3)),$(4),$(LIB_PATHS),$(5))
143 endef
145 all: $(LIB_LIST) $(DEPS_LIST)
149 # Strip Macro
150 # The host build makes shared libraries, so the best we can do is strip-debug.
151 # We cannot strip the symbol names.
153 # $1 = Target Name
154 # $2 = Input Name
156 define STRIP_RULE
157 all: $(OUTDIR)/$(1)$(HOST_EXT)
158 $(OUTDIR)/$(1)$(HOST_EXT): $(OUTDIR)/$(2)$(HOST_EXT)
159 $(call LOG,STRIP,$$@,$(STRIP) --strip-debug -o $$@ $$^)
160 endef
164 # Run standalone builds (command line builds outside of chrome)
166 ifdef STANDALONE
167 run: all
168 $(RUN_UNDER) $(OUTDIR)/$(TARGET)$(HOST_EXT) $(EXE_ARGS)
169 endif