@@ -62,6 +62,32 @@ CXX_MAJOR := $(shell $(CXX) -dumpversion 2>&1 | cut -d'.' -f1)
62
62
CXX_MINOR := $(shell $(CXX) -dumpversion 2>&1 | cut -d'.' -f2)
63
63
64
64
65
+ ################################################################################
66
+ # Set optional compiler flags for performance
67
+ #
68
+ # These flags are compiler and compiler version specific optimization flags.
69
+ #
70
+ # Because clang-6 and clang-7's -dumpversion reports version 4.2.1
71
+ # and clang-6 needs either the llvm-ar or ar gold plugin to use link time
72
+ # optimization (flto), flto is only turned on for clang versions greater than 8.
73
+ # For gcc all versions after 4.9 can use the system `ar` and other utilities
74
+ # when compiling with flto.
75
+ #
76
+ # FLAGS:
77
+ # CXXFLAGS_OPTIM: Additional flags to CXXFLAGS
78
+ # CPPFLAGS_OPTIM: Additional flags to CXXFLAGS
79
+ # CXXFLAGS_OPTIM_TBB: Additional flags to TBB_CXXFLAGS
80
+ # CXXFLAGS_OPTIM_SUNDIALS: Additional flags to CXXFLAGS_SUNDIALS
81
+ # CPPFLAGS_OPTIM_SUNDIALS: Additional flags to CPPFLAGS_SUNDIALS
82
+ # CXXFLAGS_FLTO: Additional flags for compiling with FLTO
83
+ # CPPFLAGS_FLTO: Additional flags for compiling with FLTO
84
+ # CXXFLAGS_FLTO_TBB: Additional flags for compiling tbb with flto
85
+ # CXXFLAGS_FLTO_SUNDIALS: Additional flags for compiling c++ sundials with flto
86
+ # CPPFLAGS_FLTO_SUNDIALS: Additional flags for compiling c sundials with flto
87
+ # LDFLAGS_OPTIM: Adding optimization flags to LDFLAGS
88
+ # LDFLAGS_FLTO: Adding flto options to LDFLAGS
89
+ # LDFLAGS_MPI_FLTO: For adding flto options to MPI build
90
+ ##
65
91
66
92
################################################################################
67
93
# Set default compiler flags
@@ -80,14 +106,14 @@ INC_GTEST ?= -I $(GTEST)/include -I $(GTEST)
80
106
81
107
## setup precompiler options
82
108
CPPFLAGS_BOOST ?= -DBOOST_DISABLE_ASSERTS
83
- CPPFLAGS_SUNDIALS ?= -DNO_FPRINTF_OUTPUT
84
- CPPFLAGS_GTEST ?=
109
+ CPPFLAGS_SUNDIALS ?= -DNO_FPRINTF_OUTPUT $(CPPFLAGS_OPTIM_SUNDIALS) $(CXXFLAGS_FLTO_SUNDIALS)
110
+ # CPPFLAGS_GTEST ?=
85
111
86
112
87
113
## setup compiler flags
88
114
CXXFLAGS_LANG ?= -std=c++1y
89
- #CXXFLAGS_BOOST
90
- CXXFLAGS_SUNDIALS ?= -pipe
115
+ #CXXFLAGS_BOOST ?=
116
+ CXXFLAGS_SUNDIALS ?= -pipe $(CXXFLAGS_OPTIM_SUNDIALS) $(CPPFLAGS_FLTO_SUNDIALS)
91
117
#CXXFLAGS_GTEST
92
118
93
119
@@ -224,7 +250,7 @@ endif
224
250
225
251
226
252
CXXFLAGS_TBB ?= -I $(TBB)/include
227
- LDFLAGS_TBB ?= -Wl,-L,"$(TBB_BIN_ABSOLUTE_PATH)" -Wl,-rpath,"$(TBB_BIN_ABSOLUTE_PATH)"
253
+ LDFLAGS_TBB ?= -Wl,-L,"$(TBB_BIN_ABSOLUTE_PATH)" -Wl,-rpath,"$(TBB_BIN_ABSOLUTE_PATH)" $(LDFLAGS_FLTO_FLTO) $(LDFLAGS_OPTIM_TBB)
228
254
LDLIBS_TBB ?=
229
255
230
256
################################################################################
@@ -251,13 +277,13 @@ ifdef STAN_MPI
251
277
252
278
BOOST_LIBRARY_ABSOLUTE_PATH = $(abspath $(BOOST)/stage/lib)
253
279
254
- LDFLAGS_MPI ?= -Wl,-L,"$(BOOST_LIBRARY_ABSOLUTE_PATH)" -Wl,-rpath,"$(BOOST_LIBRARY_ABSOLUTE_PATH)"
280
+ LDFLAGS_MPI ?= -Wl,-L,"$(BOOST_LIBRARY_ABSOLUTE_PATH)" -Wl,-rpath,"$(BOOST_LIBRARY_ABSOLUTE_PATH)" $(LDFLAGS_MPI_FLTO) $(MPI_OPTIM)
255
281
CXXFLAGS_MPI ?= -Wno-delete-non-virtual-dtor
256
282
endif
257
283
258
- CXXFLAGS += $(CXXFLAGS_LANG) $(CXXFLAGS_OS) $(CXXFLAGS_WARNINGS) $(CXXFLAGS_BOOST) $(CXXFLAGS_EIGEN) $(CXXFLAGS_OPENCL) $(CXXFLAGS_MPI) $(CXXFLAGS_THREADS) $(CXXFLAGS_TBB) -O$(O) $(INC)
259
- CPPFLAGS += $(CPPFLAGS_LANG) $(CPPFLAGS_OS) $(CPPFLAGS_WARNINGS) $(CPPFLAGS_BOOST) $(CPPFLAGS_EIGEN) $(CPPFLAGS_OPENCL) $(CPPFLAGS_MPI) $(CPPFLAGS_TBB)
260
- LDFLAGS += $(LDFLAGS_LANG) $(LDFLAGS_OS) $(LDFLAGS_WARNINGS) $(LDFLAGS_BOOST) $(LDFLAGS_EIGEN) $(LDFLAGS_OPENCL) $(LDFLAGS_MPI) $(LDFLAGS_TBB)
284
+ CXXFLAGS += $(CXXFLAGS_LANG) $(CXXFLAGS_OS) $(CXXFLAGS_WARNINGS) $(CXXFLAGS_BOOST) $(CXXFLAGS_EIGEN) $(CXXFLAGS_OPENCL) $(CXXFLAGS_MPI) $(CXXFLAGS_THREADS) $(CXXFLAGS_TBB) $(CXXFLAGS_FLTO) $(CXXFLAGS_OPTIM) -O$(O) $(INC)
285
+ CPPFLAGS += $(CPPFLAGS_LANG) $(CPPFLAGS_OS) $(CPPFLAGS_WARNINGS) $(CPPFLAGS_BOOST) $(CPPFLAGS_EIGEN) $(CPPFLAGS_OPENCL) $(CPPFLAGS_MPI) $(CPPFLAGS_TBB) $(CPPFLAGS_FLTO) $(CPPFLAGS_OPTIM)
286
+ LDFLAGS += $(LDFLAGS_LANG) $(LDFLAGS_OS) $(LDFLAGS_WARNINGS) $(LDFLAGS_BOOST) $(LDFLAGS_EIGEN) $(LDFLAGS_OPENCL) $(LDFLAGS_MPI) $(LDFLAGS_TBB) $(LDFLAGS_FLTO) $(LDFLAGS_OPTIM)
261
287
LDLIBS += $(LDLIBS_LANG) $(LDLIBS_OS) $(LDLIBS_WARNINGS) $(LDLIBS_BOOST) $(LDLIBS_EIGEN) $(LDLIBS_OPENCL) $(LDLIBS_MPI) $(LDLIBS_TBB)
262
288
263
289
.PHONY: print-compiler-flags
@@ -280,15 +306,20 @@ print-compiler-flags:
280
306
@echo ' Compiler flags (each can be overriden separately):'
281
307
@echo ' - CXXFLAGS_LANG ' $(CXXFLAGS_LANG)
282
308
@echo ' - CXXFLAGS_WARNINGS ' $(CXXFLAGS_WARNINGS)
309
+ @echo ' - CXXFLAGS_OPTIM ' $(CXXFLAGS_OPTIM)
310
+ @echo ' - CXXFLAGS_FLTO ' $(CXXFLAGS_FLTO)
283
311
@echo ' - CXXFLAGS_BOOST ' $(CXXFLAGS_BOOST)
284
312
@echo ' - CXXFLAGS_EIGEN ' $(CXXFLAGS_EIGEN)
285
313
@echo ' - CXXFLAGS_OS ' $(CXXFLAGS_OS)
286
314
@echo ' - CXXFLAGS_GTEST ' $(CXXFLAGS_GTEST)
287
315
@echo ' - CXXFLAGS_THREADS ' $(CXXFLAGS_THREADS)
288
316
@echo ' - CXXFLAGS_OPENCL ' $(CXXFLAGS_OPENCL)
289
317
@echo ' - CXXFLAGS_TBB ' $(CXXFLAGS_TBB)
318
+ @echo ' - CXXFLAGS_OPTIM_TBB ' $(CXXFLAGS_OPTIM_TBB)
290
319
@echo ' - CXXFLAGS_MPI ' $(CXXFLAGS_MPI)
291
320
@echo ' - CFLAGS_SUNDIALS ' $(CFLAGS_SUNDIALS)
321
+ @echo ' - CXXFLAGS_SUNDIALS ' $(CXXFLAGS_SUNDIALS)
322
+ @echo ' - CXXFLAGS_OPTIM_SUNDIALS ' $(CXXFLAGS_OPTIM_SUNDIALS)
292
323
@echo ' LDLIBS:'
293
324
@echo ' - LDLIBS_LANG ' $(LDLIBS_LANG)
294
325
@echo ' - LDLIBS_WARNINGS ' $(LDLIBS_WARNINGS)
0 commit comments