OLD | NEW |
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 # | 5 # |
6 # GNU Make based build file. For details on GNU Make see: | 6 # GNU Make based build file. For details on GNU Make see: |
7 # http://www.gnu.org/software/make/manual/make.html | 7 # http://www.gnu.org/software/make/manual/make.html |
8 # | 8 # |
9 | 9 |
10 | 10 |
11 # | 11 # |
12 # Macros for TOOLS | 12 # Macros for TOOLS |
13 # | 13 # |
14 # We use the C++ compiler for everything and then use the -Wl,-as-needed flag | 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. | 15 # in the linker to drop libc++ unless it's actually needed. |
16 # | 16 # |
17 CC ?= $(NACL_COMPILER_PREFIX) gcc | 17 CC ?= $(NACL_COMPILER_PREFIX) gcc |
18 CXX ?= $(NACL_COMPILER_PREFIX) g++ | 18 CXX ?= $(NACL_COMPILER_PREFIX) g++ |
19 LINK ?= $(CXX) | 19 LINK ?= $(CXX) |
20 LIB ?= ar | 20 AR ?= ar |
| 21 ARFLAGS = -crs |
21 STRIP ?= strip | 22 STRIP ?= strip |
22 | 23 |
| 24 |
| 25 ifneq ($(OSNAME),mac) |
23 # Adding -Wl,-Bsymbolic means that symbols defined within the module are always | 26 # 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 | 27 # used by the module, and not shadowed by symbols already loaded in, for |
25 # exmaple, libc. Without this the libc symbols (or anything injected with | 28 # exmaple, libc. Without this the libc symbols (or anything injected with |
26 # LD_PRELOAD will take precedence). | 29 # LD_PRELOAD will take precedence). |
27 HOST_LDFLAGS ?= -Wl,-Map,$(OUTDIR)/$(TARGET).map -Wl,-Bsymbolic | 30 # -pthread is not needed on mac (libpthread is a symlink to libSystem) and |
| 31 # in fact generated a warning if passed at link time. |
| 32 HOST_LDFLAGS ?= -Wl,-Map,$(OUTDIR)/$(TARGET).map -Wl,-Bsymbolic -pthread |
| 33 else |
| 34 HOST_LDFLAGS ?= -Wl,-map -Wl,$(OUTDIR)/$(TARGET).map |
| 35 endif |
| 36 |
28 | 37 |
29 ifeq (,$(findstring gcc,$(shell $(WHICH) gcc))) | 38 ifeq (,$(findstring gcc,$(shell $(WHICH) gcc))) |
30 $(warning To skip the host build use:) | 39 $(warning To skip the host build use:) |
31 $(warning "make all_versions NO_HOST_BUILDS=1") | 40 $(warning "make all_versions NO_HOST_BUILDS=1") |
32 $(error Unable to find gcc in PATH while building Host build) | 41 $(error Unable to find gcc in PATH while building Host build) |
33 endif | 42 endif |
34 | 43 |
35 HOST_WARNINGS ?= -Wno-long-long -Wall -Werror | 44 HOST_WARNINGS ?= -Wno-long-long -Wall -Werror |
36 HOST_CFLAGS = -fPIC -pthread $(HOST_WARNINGS) -I$(NACL_SDK_ROOT)/include -I$(NAC
L_SDK_ROOT)/include/linux | 45 HOST_CFLAGS = -fPIC -pthread $(HOST_WARNINGS) -I$(NACL_SDK_ROOT)/include -I$(NAC
L_SDK_ROOT)/include/linux |
37 | 46 |
38 | 47 |
39 # | 48 # |
40 # Individual Macros | 49 # Individual Macros |
41 # | 50 # |
42 # $1 = Source Name | 51 # $1 = Source Name |
43 # $2 = Compile Flags | 52 # $2 = Compile Flags |
44 # | 53 # |
45 define C_COMPILER_RULE | 54 define C_COMPILER_RULE |
46 -include $(call SRC_TO_DEP,$(1)) | 55 -include $(call SRC_TO_DEP,$(1)) |
47 $(call SRC_TO_OBJ,$(1)): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.st
amp | 56 $(call SRC_TO_OBJ,$(1)): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.st
amp |
48 » $(call LOG,CC ,$$@,$(CC) -o $$@ -c $$< -fPIC $(POSIX_FLAGS) $(HOST_CFLA
GS) $(2)) | 57 » $(call LOG,CC ,$$@,$(CC) -o $$@ -c $$< -fPIC $(POSIX_CFLAGS) $(HOST_CFL
AGS) $(2)) |
49 @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1)) | 58 @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1)) |
50 endef | 59 endef |
51 | 60 |
52 define CXX_COMPILER_RULE | 61 define CXX_COMPILER_RULE |
53 -include $(call SRC_TO_DEP,$(1)) | 62 -include $(call SRC_TO_DEP,$(1)) |
54 $(call SRC_TO_OBJ,$(1)): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.st
amp | 63 $(call SRC_TO_OBJ,$(1)): $(1) $(TOP_MAKE) | $(dir $(call SRC_TO_OBJ,$(1)))dir.st
amp |
55 » $(call LOG,CXX ,$$@,$(CXX) -o $$@ -c $$< -fPIC $(POSIX_FLAGS) $(HOST_CFL
AGS) $(2)) | 64 » $(call LOG,CXX ,$$@,$(CXX) -o $$@ -c $$< -fPIC $(POSIX_CFLAGS) $(HOST_CF
LAGS) $(2)) |
56 @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1)) | 65 @$(FIXDEPS) $(call SRC_TO_DEP_PRE_FIXUP,$(1)) |
57 endef | 66 endef |
58 | 67 |
59 # | 68 # |
60 # Compile Macro | 69 # Compile Macro |
61 # | 70 # |
62 # $1 = Source Name | 71 # $1 = Source Name |
63 # $2 = POSIX Compile Flags | 72 # $2 = POSIX Compile Flags |
64 # $3 = VC Flags (unused) | 73 # $3 = VC Flags (unused) |
65 # | 74 # |
(...skipping 26 matching lines...) Expand all Loading... |
92 # | 101 # |
93 # | 102 # |
94 define LIB_RULE | 103 define LIB_RULE |
95 $(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(OSNAME)_host/$(CONFIG)/lib$(1).a | 104 $(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(OSNAME)_host/$(CONFIG)/lib$(1).a |
96 @echo "TOUCHED $$@" > $(STAMPDIR)/$(1).stamp | 105 @echo "TOUCHED $$@" > $(STAMPDIR)/$(1).stamp |
97 | 106 |
98 all: $(LIBDIR)/$(OSNAME)_host/$(CONFIG)/lib$(1).a | 107 all: $(LIBDIR)/$(OSNAME)_host/$(CONFIG)/lib$(1).a |
99 $(LIBDIR)/$(OSNAME)_host/$(CONFIG)/lib$(1).a: $(foreach src,$(2),$(call SRC_TO_O
BJ,$(src))) | 108 $(LIBDIR)/$(OSNAME)_host/$(CONFIG)/lib$(1).a: $(foreach src,$(2),$(call SRC_TO_O
BJ,$(src))) |
100 $(MKDIR) -p $$(dir $$@) | 109 $(MKDIR) -p $$(dir $$@) |
101 $(RM) -f $$@ | 110 $(RM) -f $$@ |
102 » $(call LOG,LIB,$$@,$(LIB) -cr $$@ $$^) | 111 » $(call LOG,LIB,$$@,$(AR) $(ARFLAGS) $$@ $$^) |
103 endef | 112 endef |
104 | 113 |
105 | 114 |
106 # | 115 # |
107 # Link Macro | 116 # Link Macro |
108 # | 117 # |
109 # $1 = Target Name | 118 # $1 = Target Name |
110 # $2 = List of inputs | 119 # $2 = List of inputs |
111 # $3 = List of libs | 120 # $3 = List of libs |
112 # $4 = List of deps | 121 # $4 = List of deps |
113 # $5 = List of lib dirs | 122 # $5 = List of lib dirs |
114 # $6 = Linker Args | 123 # $6 = Linker Args |
115 # | 124 # |
116 ifdef STANDALONE | 125 ifdef STANDALONE |
117 define LINKER_RULE | 126 define LINKER_RULE |
118 all: $(1) | 127 all: $(1) |
119 $(1): $(2) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) | 128 $(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 li
b,$(3),-l$(lib)) $(6)) | 129 » $(call LOG,LINK,$$@,$(LINK) -o $(1) $(2) $(HOST_LDFLAGS) $(LDFLAGS) $(fo
reach path,$(5),-L$(path)/$(OSNAME)_host)/$(CONFIG) $(foreach lib,$(3),-l$(lib))
$(6)) |
121 endef | 130 endef |
122 else | 131 else |
123 define LINKER_RULE | 132 define LINKER_RULE |
124 all: $(1) | 133 all: $(1) |
125 $(1): $(2) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) | 134 $(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) $(fo
reach lib,$(3),-l$(lib)) $(6)) | 135 » $(call LOG,LINK,$$@,$(LINK) -shared -o $(1) $(2) $(HOST_LDFLAGS) $(LDFLA
GS) $(foreach path,$(5),-L$(path)/$(OSNAME)_host)/$(CONFIG) $(foreach lib,$(3),-
l$(lib)) $(6)) |
127 endef | 136 endef |
128 endif | 137 endif |
129 | 138 |
130 | 139 |
131 # | 140 # |
132 # Link Macro | 141 # Link Macro |
133 # | 142 # |
134 # $1 = Target Name | 143 # $1 = Target Name |
135 # $2 = List of Sources | 144 # $2 = List of Sources |
136 # $3 = List of LIBS | 145 # $3 = List of LIBS |
137 # $4 = List of DEPS | 146 # $4 = List of DEPS |
138 # $5 = POSIX Linker Switches | 147 # $5 = POSIX Linker Switches |
139 # $6 = VC Linker Switches | 148 # $6 = VC Linker Switches |
140 # | 149 # |
141 define LINK_RULE | 150 define LINK_RULE |
142 $(call LINKER_RULE,$(OUTDIR)/$(1)$(HOST_EXT),$(foreach src,$(2),$(call SRC_TO_OB
J,$(src))),$(filter-out pthread,$(3)),$(4),$(LIB_PATHS),$(5)) | 151 $(call LINKER_RULE,$(OUTDIR)/$(1)$(HOST_EXT),$(foreach src,$(2),$(call SRC_TO_OB
J,$(src))),$(filter-out pthread,$(3)),$(4),$(LIB_PATHS),$(5)) |
143 endef | 152 endef |
144 | 153 |
145 all: $(LIB_LIST) $(DEPS_LIST) | 154 all: $(LIB_LIST) $(DEPS_LIST) |
146 | 155 |
147 | 156 |
148 # | 157 # |
149 # Strip Macro | 158 # Strip Macro |
150 # The host build makes shared libraries, so the best we can do is strip-debug. | 159 # The host build makes shared libraries, so the best we can do is -S, which |
151 # We cannot strip the symbol names. | 160 # only strip debug symbols. We don't strip the symbol names. |
152 # | 161 # |
153 # $1 = Target Name | 162 # $1 = Target Name |
154 # $2 = Input Name | 163 # $2 = Input Name |
155 # | 164 # |
156 define STRIP_RULE | 165 define STRIP_RULE |
157 all: $(OUTDIR)/$(1)$(HOST_EXT) | 166 all: $(OUTDIR)/$(1)$(HOST_EXT) |
158 $(OUTDIR)/$(1)$(HOST_EXT): $(OUTDIR)/$(2)$(HOST_EXT) | 167 $(OUTDIR)/$(1)$(HOST_EXT): $(OUTDIR)/$(2)$(HOST_EXT) |
159 » $(call LOG,STRIP,$$@,$(STRIP) --strip-debug -o $$@ $$^) | 168 » $(call LOG,STRIP,$$@,$(STRIP) -S -o $$@ $$^) |
160 endef | 169 endef |
161 | 170 |
162 | 171 |
163 # | 172 # |
164 # Run standalone builds (command line builds outside of chrome) | 173 # Run standalone builds (command line builds outside of chrome) |
165 # | 174 # |
166 ifdef STANDALONE | 175 ifdef STANDALONE |
167 run: all | 176 run: all |
168 $(RUN_UNDER) $(OUTDIR)/$(TARGET)$(HOST_EXT) $(EXE_ARGS) | 177 $(RUN_UNDER) $(OUTDIR)/$(TARGET)$(HOST_EXT) $(EXE_ARGS) |
169 endif | 178 endif |
OLD | NEW |