1# $OpenBSD: Makefile.inc,v 1.28 2023/11/17 15:46:58 visa Exp $
2
3CLANG_SRCS?=	${.CURDIR}/../../../llvm/clang
4LLDB_SRCS?=	${.CURDIR}/../../../llvm/lldb
5LLD_SRCS?=	${.CURDIR}/../../../llvm/lld
6LLVM_SRCS?=	${.CURDIR}/../../../llvm/llvm
7
8DRIVER_TEMPLATE?=no
9
10.if ${COMPILER_VERSION:L} != "clang"
11CC=		clang
12CXX=		clang++
13.endif
14
15BOOTSTRAP_CLANG?=no
16.if ${BOOTSTRAP_CLANG} == "yes"
17CC=		egcc
18CXX=		eg++
19.endif
20
21DEBUG=
22NOPIE=
23
24CLANG_INCLUDES=	-I${CLANG_SRCS}/include
25LLDB_INCLUDES=	-I${LLDB_SRCS}/include \
26		-I${LLDB_SRCS}/source
27CPPFLAGS+=	-I${LLVM_SRCS}/include -I${.CURDIR}/../include -I${.OBJDIR} \
28		-I${.OBJDIR}/../include
29CPPFLAGS+=	-DNDEBUG
30
31# Disable some protections in the compiler to regain performance.
32.if ${MACHINE_ARCH} == "aarch64" || ${MACHINE_ARCH} == "amd64" || \
33    ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "mips64" || \
34    ${MACHINE_ARCH} == "mips64el" || ${MACHINE_ARCH} == "powerpc"
35CXXFLAGS+=	-fno-ret-protector
36.endif
37.if ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "i386"
38CXXFLAGS+=	-mno-retpoline
39.endif
40
41# Omit frame pointer to improve performance.
42.if ${MACHINE_ARCH} == "mips64" || ${MACHINE_ARCH} == "mips64el"
43CXXFLAGS+=	-fomit-frame-pointer
44CXXFLAGS+=	-mxgot
45.endif
46
47CPPFLAGS+=	-D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS \
48		-D__STDC_FORMAT_MACROS
49
50.if ${MACHINE_ARCH} == "arm"
51TRIPLE=		armv7-unknown-openbsd${OSREV}-gnueabi
52.else
53TRIPLE=		${MACHINE_ARCH}-unknown-openbsd${OSREV}
54.endif
55.include "Makefile.arch"
56
57# upstream defaults
58CFLAGS+=	-ffunction-sections -fdata-sections
59CXXFLAGS+=	-ffunction-sections -fdata-sections
60CXXFLAGS+=	-std=c++17
61CXXFLAGS+=	-fvisibility-inlines-hidden
62CXXFLAGS+=	-fno-exceptions -fno-rtti
63CXXFLAGS+=	-fno-semantic-interposition
64# warnings (from upstream)
65CXXFLAGS+=	-Wall -Wc++98-compat-extra-semi -Wcast-qual \
66		-Wcovered-switch-default -Wctad-maybe-unsupported \
67		-Wdelete-non-virtual-dtor -Werror=date-time \
68		-Werror=unguarded-availability-new -Wextra \
69		-Wimplicit-fallthrough -Wmisleading-indentation \
70		-Wmissing-field-initializers -Wno-long-long -Wno-noexcept-type \
71		-Wno-unused-parameter -Wnon-virtual-dtor -Wstring-conversion \
72		-Wsuggest-override -Wwrite-strings
73
74LDADD+=-Wl,--start-group
75.for lib in ${LLVM_LIBDEPS}
76DPADD+=	${.OBJDIR}/../lib${lib}/lib${lib}.a
77LDADD+=	${.OBJDIR}/../lib${lib}/lib${lib}.a
78.endfor
79LDADD+=-Wl,--end-group
80
81.if ${DRIVER_TEMPLATE:L} == "yes"
82DRIVER_NAME?=	${PROG:S/-/_/g}
83CLEANFILES+=	${DRIVER_NAME}_main.cpp
84SRCS+=		${DRIVER_NAME}_main.cpp
85
86${DRIVER_NAME}_main.cpp:
87	sed "s,@TOOL_NAME@,${DRIVER_NAME},g" \
88		${LLVM_SRCS}/cmake/modules/llvm-driver-template.cpp.in > $@
89.endif
90