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
++
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
)
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
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))
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))
63 # $2 = POSIX Compile Flags
64 # $3 = VC Flags (unused)
67 ifeq ($(suffix $(1)),.c
)
68 $(call C_COMPILER_RULE
,$(1),$(2) $(foreach inc
,$(INC_PATHS
),-I
$(inc
)))
70 $(call CXX_COMPILER_RULE
,$(1),$(2) $(foreach inc
,$(INC_PATHS
),-I
$(inc
)))
79 # $2 = List of Sources
83 $(error
'Shared libraries not supported by Host')
91 # $2 = List of Sources
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 $$@
)
102 $(call LOG
,LIB
,$$@
,$(LIB
) -cr
$$@
$$^
)
110 # $2 = List of inputs
113 # $5 = List of lib dirs
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))
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))
135 # $2 = List of Sources
138 # $5 = POSIX Linker Switches
139 # $6 = VC Linker Switches
142 $(call LINKER_RULE
,$(OUTDIR
)/$(1)$(HOST_EXT
),$(foreach src
,$(2),$(call SRC_TO_OBJ
,$(src
))),$(filter-out pthread
,$(3)),$(4),$(LIB_PATHS
),$(5))
145 all: $(LIB_LIST
) $(DEPS_LIST
)
150 # The host build makes shared libraries, so the best we can do is strip-debug.
151 # We cannot strip the symbol names.
157 all: $(OUTDIR
)/$(1)$(HOST_EXT
)
158 $(OUTDIR
)/$(1)$(HOST_EXT
): $(OUTDIR
)/$(2)$(HOST_EXT
)
159 $(call LOG
,STRIP
,$$@
,$(STRIP
) --strip-debug
-o
$$@
$$^
)
164 # Run standalone builds (command line builds outside of chrome)
168 $(RUN_UNDER
) $(OUTDIR
)/$(TARGET
)$(HOST_EXT
) $(EXE_ARGS
)