1# LTO Support
2#
3# This file enforces Link Time Optimization for ports.
4# In order to use it, add WITH_LTO=yes to your /etc/make.conf.
5
6.if !defined(_LTO_MK_INCLUDED)
7_LTO_MK_INCLUDED=	yes
8LTO_Include_MAINTAINER=	ports@MidnightBSD.org
9
10.  if !defined(LTO_UNSAFE) || defined(LTO_DISABLE_CHECK)
11.    if "${ARCH}" == "riscv64" && !defined(LTO_DISABLE_CHECK)
12       DEV_WARNING+=	"LTO is currently broken on riscv64, to override set LTO_DISABLE_CHECK=yes"
13.    elif defined(_INCLUDE_USES_CARGO_MK)
14   CARGO_ENV+=	CARGO_PROFILE_RELEASE_LTO="true" \
15		CARGO_PROFILE_RELEASE_PANIC="abort" \
16		CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1
17.    elif defined(_INCLUDE_USES_MESON_MK)
18   MESON_ARGS+=	-Db_lto=true
19.    elif defined(_INCLUDE_USES_CABAL_MK)
20   CABAL_LTO_ARGS=	--ghc-options=-split-sections \
21			--gcc-options="-fdata-sections -ffunction-sections" \
22			--ld-options=-Wl,--gc-sections,--build-id,--icf=all
23.    else
24# Overridable as a user may want to use -flto
25   LTO_FLAGS?=	-flto=thin
26   CFLAGS+=	${LTO_FLAGS}
27   CXXFLAGS+=	${LTO_FLAGS}
28   LDFLAGS+=	${LTO_FLAGS}
29.    endif
30.  else
31.    if defined(_INCLUDE_USES_CARGO_MK)
32   RUSTFLAGS+=	-C lto=no
33.    endif
34.  endif
35.endif
36