Skip to content

Commit

Permalink
Parallelize Link Time Optimization for GCC, CLANG and MINGW
Browse files Browse the repository at this point in the history
This patch tries to run multiple LTO threads in parallel, speeding up
the build process of optimized builds if the -j make parameter is used.
This mitigates the longer linking times of optimized builds since the
integration of the NNUE code. Roughly 2x build speedup.

I've tried a similar patch some two years ago but it ran into trouble
with old compiler versions then. Since we're on the C++17 standard now
these old compilers should be obsolete.

closes official-stockfish/Stockfish#2943

No functional change.
  • Loading branch information
gvreuls authored and lucabrivio committed Aug 10, 2020
1 parent f858eb4 commit 38eec78
Showing 1 changed file with 17 additions and 4 deletions.
21 changes: 17 additions & 4 deletions src/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,9 @@ ifeq ($(COMP),gcc)
ifneq ($(KERNEL),Darwin)
LDFLAGS += -Wl,--no-as-needed
endif

gccversion = $(shell $(CXX) --version)
gccisclang = $(findstring clang,$(gccversion))
endif

ifeq ($(COMP),mingw)
Expand Down Expand Up @@ -496,18 +499,28 @@ endif
### needs access to the optimization flags.
ifeq ($(optimize),yes)
ifeq ($(debug), no)
ifeq ($(comp),$(filter $(comp),gcc clang))
ifeq ($(comp),clang)
CXXFLAGS += -flto=thin
LDFLAGS += $(CXXFLAGS)

# GCC and CLANG use different methods for parallelizing LTO and CLANG pretends to be
# GCC on some systems.
else ifeq ($(comp),gcc)
ifeq ($(gccisclang),)
CXXFLAGS += -flto
LDFLAGS += $(CXXFLAGS) -flto=jobserver
else
CXXFLAGS += -flto=thin
LDFLAGS += $(CXXFLAGS)
endif

# To use LTO and static linking on windows, the tool chain requires a recent gcc:
# gcc version 10.1 in msys2 or TDM-GCC version 9.2 are know to work, older might not.
# So, only enable it for a cross from Linux by default.
ifeq ($(comp),mingw)
else ifeq ($(comp),mingw)
ifeq ($(KERNEL),Linux)
CXXFLAGS += -flto
LDFLAGS += $(CXXFLAGS)
LDFLAGS += $(CXXFLAGS) -flto=jobserver
endif
endif
endif
Expand Down Expand Up @@ -693,7 +706,7 @@ config-sanity:
@test "$(comp)" = "gcc" || test "$(comp)" = "icc" || test "$(comp)" = "mingw" || test "$(comp)" = "clang"

$(EXE): $(OBJS)
$(CXX) -o $@ $(OBJS) $(LDFLAGS)
+$(CXX) -o $@ $(OBJS) $(LDFLAGS)

clang-profile-make:
$(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
Expand Down

0 comments on commit 38eec78

Please sign in to comment.