Skip to content

Commit 3c2dcec

Browse files
authored
Add LTO support (#2419)
1 parent 917bf22 commit 3c2dcec

File tree

2 files changed

+43
-4
lines changed

2 files changed

+43
-4
lines changed

Makefile.in

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ WANT_DEPS:=@WANT_DEPS@
7474
WANT_ASSEMBLY:=@WANT_ASSEMBLY@
7575
ASM_PATH:=$(ABS_SRC_DIR)/mpn_extras/@ASM_PATH@
7676

77+
WANT_LTO:=@WANT_LTO@
78+
7779
GMP_LIB_PATH:=@GMP_LIB_PATH@
7880
MPFR_LIB_PATH:=@MPFR_LIB_PATH@
7981
BLAS_LIB_PATH:=@BLAS_LIB_PATH@
@@ -431,9 +433,15 @@ endef
431433
$(foreach dir, $(DIRS), $(eval $(call xxx_merged_lobj_rule,$(dir))))
432434
MERGED_LOBJS:=$(foreach dir, $(DIRS),$(BUILD_DIR)/$(dir)_merged.lo)
433435

434-
$(FLINT_DIR)/$(FLINT_LIB_FULL): $(MERGED_LOBJS)
436+
ifeq ($(WANT_LTO),1)
437+
LIB_DEPS = $(LOBJS)
438+
else
439+
LIB_DEPS = $(MERGED_LOBJS)
440+
endif
441+
442+
$(FLINT_DIR)/$(FLINT_LIB_FULL): $(LIB_DEPS)
435443
@echo "Building $(FLINT_LIB_FULL)"
436-
$(CMD) $(CC) $(CFLAGS) -shared $(EXTRA_SHARED_FLAGS) $(MERGED_LOBJS) -o $(FLINT_LIB_FULL) $(LDFLAGS) $(LIBS)
444+
$(CMD) $(CC) $(CFLAGS) -shared $(EXTRA_SHARED_FLAGS) $(LIB_DEPS) -o $(FLINT_LIB_FULL) $(LDFLAGS) $(LIBS)
437445
@$(RM_F) $(FLINT_LIB)
438446
@$(RM_F) $(FLINT_LIB_MAJOR)
439447
@$(LN_S) $(FLINT_LIB_FULL) $(FLINT_LIB)
@@ -452,9 +460,15 @@ endef
452460
$(foreach dir, $(DIRS), $(eval $(call xxx_merged_obj_rule,$(dir))))
453461
MERGED_OBJS:=$(foreach dir, $(DIRS),$(BUILD_DIR)/$(dir)_merged.o)
454462

455-
$(FLINT_DIR)/$(FLINT_LIB_STATIC): $(MERGED_OBJS)
463+
ifeq ($(WANT_LTO),1)
464+
LIB_DEPS = $(OBJS)
465+
else
466+
LIB_DEPS = $(MERGED_OBJS)
467+
endif
468+
469+
$(FLINT_DIR)/$(FLINT_LIB_STATIC): $(LIB_DEPS)
456470
@echo "Building $(FLINT_LIB_STATIC)"
457-
@$(AR) rcs $(FLINT_DIR)/$(FLINT_LIB_STATIC) $(MERGED_OBJS)
471+
@$(AR) rcs $(FLINT_DIR)/$(FLINT_LIB_STATIC) $(LIB_DEPS)
458472
endif
459473

460474
################################################################################

configure.ac

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,17 @@ yes|no)
340340
esac],
341341
enable_fast_build="no")
342342

343+
AC_ARG_ENABLE(lto,
344+
[AS_HELP_STRING([--enable-lto],[Enable link-time optimization [default=no]])],
345+
[case $enableval in
346+
yes|no)
347+
;;
348+
*)
349+
AC_MSG_ERROR([Bad value $enableval for --enable-lto. Need yes or no.])
350+
;;
351+
esac],
352+
enable_lto="no")
353+
343354
################################################################################
344355
# packages
345356
################################################################################
@@ -1274,6 +1285,13 @@ then
12741285
[AC_MSG_ERROR([$CC does not support the flag -mavx512f needed for AVX512 instructions])])
12751286
fi
12761287

1288+
if test "$enable_lto" = "yes";
1289+
then
1290+
AX_CHECK_COMPILE_FLAG([-flto],
1291+
[save_CFLAGS="-flto $save_CFLAGS"],
1292+
[AC_MSG_ERROR([$CC does not support the flag -flto needed for link-time optimization])])
1293+
fi
1294+
12771295
if test "$cflags_set" = "no";
12781296
then
12791297
for flag in $gcc_cflags $gcc_warnings;
@@ -1427,6 +1445,13 @@ else
14271445
AC_SUBST(ASM_PATH,)
14281446
fi
14291447

1448+
if test "$enable_lto" = "yes";
1449+
then
1450+
AC_SUBST(WANT_LTO,1)
1451+
else
1452+
AC_SUBST(WANT_LTO,0)
1453+
fi
1454+
14301455
################################################################################
14311456
# parameters
14321457
################################################################################

0 commit comments

Comments
 (0)