Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Unified Diff: pylib/gyp/generator/make.py

Issue 2841004: Use GNU ar's thin archive if this feature is available.... (Closed) Base URL: http://gyp.googlecode.com/svn/trunk/
Patch Set: '' Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pylib/gyp/generator/make.py
===================================================================
--- pylib/gyp/generator/make.py (revision 826)
+++ pylib/gyp/generator/make.py (working copy)
@@ -100,6 +100,24 @@
# C++ apps need to be linked with g++. Not sure what's appropriate.
LINK ?= $(CXX)
+# We want to use GNU ar's T option if available because it's much faster.
+# We try to archive and link a file to see ar and ld support this feature.
+define detect_arflags
+$(shell \
+ mkdir -p $(obj).$(1)/arflags;
+ if echo 'int main(){}' > $(obj).$(1)/arflags/artest.c &&
+ $(CXX.$(1)) -c $(obj).$(1)/arflags/artest.c -o $(obj).$(1)/arflags/artest.o> /dev/null 2>&1 &&
+ $(AR.$(1)) crT $(obj).$(1)/arflags/artest.a $(obj).$(1)/arflags/artest.o > /dev/null 2>&1 &&
+ $(LINK.$(1)) $(obj).$(1)/arflags/artest.a -o $(obj).$(1)/arflags/artest > /dev/null 2>&1 ; then
+ arflags=crT;
+ else
+ arflags=cr;
+ fi;
+ echo ARFLAGS.$(1) := $$arflags > $(obj).$(1)/arflags/arflags.mk;
+ echo $$arflags;
+ )
+endef
+
CC.target ?= $(CC)
CFLAGS.target ?= $(CFLAGS)
CXX.target ?= $(CXX)
@@ -107,6 +125,14 @@
LINK.target ?= $(LINK)
LDFLAGS.target ?= $(LDFLAGS)
AR.target ?= $(AR)
+# We don't want to run the detection multiple times. So, we
+# - use $(obj).target/arflags/arflags.target.mk as the cache of the detection,
+# - use := to avoid the right hand side multiple times, and
+# - use ifeq instead of ?= because ?= is like ifeq and =, not ifeq and := .
+-include $(obj).target/arflags/arflags.mk
+ifeq ($(ARFLAGS.target),)
+ ARFLAGS.target := $(call detect_arflags,target)
+endif
RANLIB.target ?= ranlib
CC.host ?= gcc
@@ -116,6 +142,11 @@
LINK.host ?= g++
LDFLAGS.host ?=
AR.host ?= ar
+# See the description for ARFLAGS.target.
+-include $(obj).host/arflags/arflags.mk
+ifeq ($(ARFLAGS.host),)
+ ARFLAGS.host := $(call detect_arflags,host)
+endif
RANLIB.host ?= ranlib
# Flags to make gcc output dependency info. Note that you need to be
@@ -170,7 +201,7 @@
cmd_cxx = $(CXX.$(TOOLSET)) $(CXXFLAGS.$(TOOLSET)) $(GYP_CXXFLAGS) $(DEPFLAGS) -c -o $@ $<
quiet_cmd_alink = AR+RANLIB($(TOOLSET)) $@
-cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) rc $@ $(filter %.o,$^) && $(RANLIB.$(TOOLSET)) $@
+cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) $(ARFLAGS.$(TOOLSET)) $@ $(filter %.o,$^) && $(RANLIB.$(TOOLSET)) $@
quiet_cmd_touch = TOUCH $@
cmd_touch = touch $@
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698