Makefile support for link-time optimization (#7181)
Summary: `USE_LTO=1` in `make` commands now enables LTO. The archiver (`ar`) needed to change in this PR to use a wrapper that enables the LTO plugin. Pull Request resolved: https://github.com/facebook/rocksdb/pull/7181 Test Plan: build a few ways ``` $ make clean && USE_LTO=1 make -j48 db_bench $ make clean && USE_CLANG=1 USE_LTO=1 make -j48 db_bench $ make clean && ROCKSDB_NO_FBCODE=1 USE_LTO=1 make -j48 db_bench ``` Reviewed By: cheng-chang Differential Revision: D22784994 Pulled By: ajkr fbshipit-source-id: 9c45333bd49bf4615aa04c85b7c6fd3925421152
This commit is contained in:
parent
83ea266b43
commit
c0c33a4854
11
Makefile
11
Makefile
@ -195,6 +195,17 @@ endif
|
|||||||
$(warning Warning: Compiling in debug mode. Don't use the resulting binary in production)
|
$(warning Warning: Compiling in debug mode. Don't use the resulting binary in production)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# `USE_LTO=1` enables link-time optimizations. Among other things, this enables
|
||||||
|
# more devirtualization opportunities and inlining across translation units.
|
||||||
|
# This can save significant overhead introduced by RocksDB's pluggable
|
||||||
|
# interfaces/internal abstractions, like in the iterator hierarchy. It works
|
||||||
|
# better when combined with profile-guided optimizations (not currently
|
||||||
|
# supported natively in Makefile).
|
||||||
|
ifeq ($(USE_LTO), 1)
|
||||||
|
CXXFLAGS += -flto
|
||||||
|
LDFLAGS += -flto -fuse-linker-plugin
|
||||||
|
endif
|
||||||
|
|
||||||
#-----------------------------------------------
|
#-----------------------------------------------
|
||||||
include src.mk
|
include src.mk
|
||||||
|
|
||||||
|
@ -89,6 +89,16 @@ if test -z "$CXX"; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test -z "$AR"; then
|
||||||
|
if [ -x "$(command -v gcc-ar)" ]; then
|
||||||
|
AR=gcc-ar
|
||||||
|
elif [ -x "$(command -v llvm-ar)" ]; then
|
||||||
|
AR=llvm-ar
|
||||||
|
else
|
||||||
|
AR=ar
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Detect OS
|
# Detect OS
|
||||||
if test -z "$TARGET_OS"; then
|
if test -z "$TARGET_OS"; then
|
||||||
TARGET_OS=`uname -s`
|
TARGET_OS=`uname -s`
|
||||||
@ -756,6 +766,7 @@ ROCKSDB_PATCH=`build_tools/version.sh patch`
|
|||||||
|
|
||||||
echo "CC=$CC" >> "$OUTPUT"
|
echo "CC=$CC" >> "$OUTPUT"
|
||||||
echo "CXX=$CXX" >> "$OUTPUT"
|
echo "CXX=$CXX" >> "$OUTPUT"
|
||||||
|
echo "AR=$AR" >> "$OUTPUT"
|
||||||
echo "PLATFORM=$PLATFORM" >> "$OUTPUT"
|
echo "PLATFORM=$PLATFORM" >> "$OUTPUT"
|
||||||
echo "PLATFORM_LDFLAGS=$PLATFORM_LDFLAGS" >> "$OUTPUT"
|
echo "PLATFORM_LDFLAGS=$PLATFORM_LDFLAGS" >> "$OUTPUT"
|
||||||
echo "JAVA_LDFLAGS=$JAVA_LDFLAGS" >> "$OUTPUT"
|
echo "JAVA_LDFLAGS=$JAVA_LDFLAGS" >> "$OUTPUT"
|
||||||
|
@ -109,6 +109,7 @@ if [ -z "$USE_CLANG" ]; then
|
|||||||
# gcc
|
# gcc
|
||||||
CC="$GCC_BASE/bin/gcc"
|
CC="$GCC_BASE/bin/gcc"
|
||||||
CXX="$GCC_BASE/bin/g++"
|
CXX="$GCC_BASE/bin/g++"
|
||||||
|
AR="$GCC_BASE/bin/gcc-ar"
|
||||||
|
|
||||||
CFLAGS+=" -B$BINUTILS/gold"
|
CFLAGS+=" -B$BINUTILS/gold"
|
||||||
CFLAGS+=" -isystem $GLIBC_INCLUDE"
|
CFLAGS+=" -isystem $GLIBC_INCLUDE"
|
||||||
@ -119,6 +120,7 @@ else
|
|||||||
CLANG_INCLUDE="$CLANG_LIB/clang/stable/include"
|
CLANG_INCLUDE="$CLANG_LIB/clang/stable/include"
|
||||||
CC="$CLANG_BIN/clang"
|
CC="$CLANG_BIN/clang"
|
||||||
CXX="$CLANG_BIN/clang++"
|
CXX="$CLANG_BIN/clang++"
|
||||||
|
AR="$CLANG_BIN/llvm-ar"
|
||||||
|
|
||||||
KERNEL_HEADERS_INCLUDE="$KERNEL_HEADERS_BASE/include"
|
KERNEL_HEADERS_INCLUDE="$KERNEL_HEADERS_BASE/include"
|
||||||
|
|
||||||
|
@ -69,6 +69,7 @@ if [ -z "$USE_CLANG" ]; then
|
|||||||
# gcc
|
# gcc
|
||||||
CC="$GCC_BASE/bin/gcc"
|
CC="$GCC_BASE/bin/gcc"
|
||||||
CXX="$GCC_BASE/bin/g++"
|
CXX="$GCC_BASE/bin/g++"
|
||||||
|
CXX="$GCC_BASE/bin/gcc-ar"
|
||||||
|
|
||||||
CFLAGS="-B$BINUTILS/gold -m64 -mtune=generic"
|
CFLAGS="-B$BINUTILS/gold -m64 -mtune=generic"
|
||||||
CFLAGS+=" -isystem $GLIBC_INCLUDE"
|
CFLAGS+=" -isystem $GLIBC_INCLUDE"
|
||||||
@ -81,6 +82,7 @@ else
|
|||||||
CLANG_INCLUDE="$CLANG_LIB/clang/*/include"
|
CLANG_INCLUDE="$CLANG_LIB/clang/*/include"
|
||||||
CC="$CLANG_BIN/clang"
|
CC="$CLANG_BIN/clang"
|
||||||
CXX="$CLANG_BIN/clang++"
|
CXX="$CLANG_BIN/clang++"
|
||||||
|
AR="$CLANG_BIN/llvm-ar"
|
||||||
|
|
||||||
KERNEL_HEADERS_INCLUDE="$KERNEL_HEADERS_BASE/include/"
|
KERNEL_HEADERS_INCLUDE="$KERNEL_HEADERS_BASE/include/"
|
||||||
|
|
||||||
|
@ -118,6 +118,7 @@ if [ -z "$USE_CLANG" ]; then
|
|||||||
# gcc
|
# gcc
|
||||||
CC="$GCC_BASE/bin/gcc"
|
CC="$GCC_BASE/bin/gcc"
|
||||||
CXX="$GCC_BASE/bin/g++"
|
CXX="$GCC_BASE/bin/g++"
|
||||||
|
AR="$GCC_BASE/bin/gcc-ar"
|
||||||
|
|
||||||
CFLAGS+=" -B$BINUTILS/gold"
|
CFLAGS+=" -B$BINUTILS/gold"
|
||||||
CFLAGS+=" -isystem $LIBGCC_INCLUDE"
|
CFLAGS+=" -isystem $LIBGCC_INCLUDE"
|
||||||
@ -128,6 +129,7 @@ else
|
|||||||
CLANG_INCLUDE="$CLANG_LIB/clang/stable/include"
|
CLANG_INCLUDE="$CLANG_LIB/clang/stable/include"
|
||||||
CC="$CLANG_BIN/clang"
|
CC="$CLANG_BIN/clang"
|
||||||
CXX="$CLANG_BIN/clang++"
|
CXX="$CLANG_BIN/clang++"
|
||||||
|
AR="$CLANG_BIN/llvm-ar"
|
||||||
|
|
||||||
KERNEL_HEADERS_INCLUDE="$KERNEL_HEADERS_BASE/include"
|
KERNEL_HEADERS_INCLUDE="$KERNEL_HEADERS_BASE/include"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user