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
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
++
24 ifeq (,$(findstring gcc
,$(shell $(WHICH
) gcc
)))
25 $(warning To skip the host build use
:)
26 $(warning
"make all_versions NO_HOST_BUILDS=1")
27 $(error Unable to find gcc in PATH while building Host build
)
30 HOST_WARNINGS ?
= -Wno-long-long
-Wall
-Werror
31 HOST_CFLAGS
= -fPIC
-pthread
$(HOST_WARNINGS
) -I
$(NACL_SDK_ROOT
)/include
34 # Adding -Wl,-Bsymbolic means that symbols defined within the module are always
35 # used by the module, and not shadowed by symbols already loaded in, for
36 # exmaple, libc. Without this the libc symbols (or anything injected with
37 # LD_PRELOAD will take precedence).
38 # -pthread is not needed on mac (libpthread is a symlink to libSystem) and
39 # in fact generated a warning if passed at link time.
40 HOST_LDFLAGS ?
= -Wl
,-Map
,$(OUTDIR
)/$(TARGET
).map
-Wl
,-Bsymbolic
-pthread
41 HOST_CFLAGS
+= -I
$(NACL_SDK_ROOT
)/include/mac
43 HOST_LDFLAGS ?
= -Wl
,-map
-Wl
,$(OUTDIR
)/$(TARGET
).map
44 HOST_CFLAGS
+= -I
$(NACL_SDK_ROOT
)/include/linux
54 define C_COMPILER_RULE
55 -include $(call SRC_TO_DEP
,$(1))
56 $(call SRC_TO_OBJ
,$(1)): $(1) $(TOP_MAKE
) |
$(dir $(call SRC_TO_OBJ
,$(1)))dir.stamp
57 $(call LOG
,CC
,$$@
,$(CC
) -o
$$@
-c
$$< -fPIC
$(POSIX_CFLAGS
) $(HOST_CFLAGS
) $(CFLAGS
) $(2))
58 @
$(FIXDEPS
) $(call SRC_TO_DEP_PRE_FIXUP
,$(1))
61 define CXX_COMPILER_RULE
62 -include $(call SRC_TO_DEP
,$(1))
63 $(call SRC_TO_OBJ
,$(1)): $(1) $(TOP_MAKE
) |
$(dir $(call SRC_TO_OBJ
,$(1)))dir.stamp
64 $(call LOG
,CXX
,$$@
,$(CXX
) -o
$$@
-c
$$< -fPIC
$(POSIX_CFLAGS
) $(HOST_CFLAGS
) $(CXXFLAGS
) $(2))
65 @
$(FIXDEPS
) $(call SRC_TO_DEP_PRE_FIXUP
,$(1))
72 # $2 = POSIX compiler flags
73 # $3 = VC compiler flags (unused)
76 ifeq ($(suffix $(1)),.c
)
77 $(call C_COMPILER_RULE
,$(1),$(2) $(foreach inc
,$(INC_PATHS
),-I
$(inc
)))
79 $(call CXX_COMPILER_RULE
,$(1),$(2) $(foreach inc
,$(INC_PATHS
),-I
$(inc
)))
88 # $2 = list of source files
91 $(error
'Shared libraries not supported by Host')
99 # $2 = List of source files
102 $(STAMPDIR
)/$(1).stamp
: $(LIBDIR
)/$(OSNAME
)_host
/$(CONFIG
)/lib
$(1).a
103 @echo
"TOUCHED $$@" > $(STAMPDIR
)/$(1).stamp
105 all: $(LIBDIR
)/$(OSNAME
)_host
/$(CONFIG
)/lib
$(1).a
106 $(LIBDIR
)/$(OSNAME
)_host
/$(CONFIG
)/lib
$(1).a
: $(foreach src
,$(2),$(call SRC_TO_OBJ
,$(src
)))
107 $(MKDIR
) -p
$$(dir $$@
)
109 $(call LOG
,LIB
,$$@
,$(AR
) $(ARFLAGS
) $$@
$$^
)
117 # $2 = List of inputs
120 # $5 = List of lib dirs
126 $(1): $(2) $(foreach dep
,$(4),$(STAMPDIR
)/$(dep
).stamp
)
127 $(call LOG
,LINK
,$$@
,$(LINK
) -o
$(1) $(2) $(HOST_LDFLAGS
) $(LDFLAGS
) $(foreach path
,$(5),-L
$(path
)/$(OSNAME
)_host
)/$(CONFIG
) $(foreach lib
,$(3),-l
$(lib
)) $(6))
132 $(1): $(2) $(foreach dep
,$(4),$(STAMPDIR
)/$(dep
).stamp
)
133 $(call LOG
,LINK
,$$@
,$(LINK
) -shared
-o
$(1) $(2) $(HOST_LDFLAGS
) $(LDFLAGS
) $(foreach path
,$(5),-L
$(path
)/$(OSNAME
)_host
)/$(CONFIG
) $(foreach lib
,$(3),-l
$(lib
)) $(6))
142 # $2 = List of source files
145 # $5 = POSIX linker flags
146 # $6 = VC linker flags
149 $(call LINKER_RULE
,$(OUTDIR
)/$(1)$(HOST_EXT
),$(foreach src
,$(2),$(call SRC_TO_OBJ
,$(src
))),$(filter-out pthread
,$(3)),$(4),$(LIB_PATHS
),$(5))
152 all: $(LIB_LIST
) $(DEPS_LIST
)
157 # The host build makes shared libraries, so the best we can do is -S, which
158 # only strip debug symbols. We don't strip the symbol names.
164 all: $(OUTDIR
)/$(1)$(HOST_EXT
)
165 $(OUTDIR
)/$(1)$(HOST_EXT
): $(OUTDIR
)/$(2)$(HOST_EXT
)
166 $(call LOG
,STRIP
,$$@
,$(STRIP
) -S
-o
$$@
$$^
)
171 # Run standalone builds (command line builds outside of chrome)
175 $(RUN_UNDER
) $(OUTDIR
)/$(TARGET
)$(HOST_EXT
) $(EXE_ARGS
)