1# $FreeBSD$ 2 3.include <src.opts.mk> 4 5.ifndef LLVM_BASE 6.error Please define LLVM_BASE before including this file 7.endif 8 9.ifndef LLVM_SRCS 10.error Please define LLVM_SRCS before including this file 11.endif 12 13.ifndef SRCDIR 14.error Please define SRCDIR before including this file 15.endif 16 17.ifndef OS_REVISION 18.error Please define OS_REVISION before including this file 19.endif 20 21.PATH: ${LLVM_BASE}/${SRCDIR} 22 23CFLAGS+= -I${SRCTOP}/lib/clang/include 24CFLAGS+= -I${LLVM_SRCS}/include 25CFLAGS+= -D__STDC_CONSTANT_MACROS 26CFLAGS+= -D__STDC_FORMAT_MACROS 27CFLAGS+= -D__STDC_LIMIT_MACROS 28CFLAGS+= -DHAVE_VCS_VERSION_INC 29.if ${MK_LLVM_ASSERTIONS} == "no" 30CFLAGS+= -DNDEBUG 31.endif 32 33# Note that using TARGET_ARCH here is essential for a functional native-xtools 34# build! For native-xtools, we're building binaries that will work on the 35# *host* machine (MACHINE_ARCH), but they should default to producing binaries 36# for the *target* machine (TARGET_ARCH). 37TARGET_ARCH?= ${MACHINE_ARCH} 38BUILD_ARCH?= ${MACHINE_ARCH} 39 40# Armv6 and armv7 uses hard float abi, unless the CPUTYPE has soft in it. 41# For all other targets, we stick with 'unknown'. 42.if ${TARGET_ARCH:Marm*} 43.if !defined(CPUTYPE) || ${CPUTYPE:M*soft*} == "" 44TARGET_TRIPLE_ABI=-gnueabihf 45.else 46TARGET_TRIPLE_ABI=-gnueabi 47.endif 48.else 49TARGET_TRIPLE_ABI= 50.endif 51VENDOR= unknown 52 53LLVM_TARGET_TRIPLE?= ${TARGET_ARCH:C/amd64/x86_64/}-${VENDOR}-freebsd${OS_REVISION}${TARGET_TRIPLE_ABI} 54LLVM_BUILD_TRIPLE?= ${BUILD_ARCH:C/amd64/x86_64/}-${VENDOR}-freebsd${OS_REVISION} 55 56CFLAGS+= -DLLVM_DEFAULT_TARGET_TRIPLE=\"${LLVM_TARGET_TRIPLE}\" 57CFLAGS+= -DLLVM_HOST_TRIPLE=\"${LLVM_BUILD_TRIPLE}\" 58CFLAGS+= -DDEFAULT_SYSROOT=\"${TOOLS_PREFIX}\" 59 60.if ${MK_LLVM_TARGET_AARCH64} != "no" 61CFLAGS+= -DLLVM_TARGET_ENABLE_AARCH64 62. if ${MACHINE_CPUARCH} == "aarch64" 63LLVM_NATIVE_ARCH= AArch64 64. endif 65.endif 66.if ${MK_LLVM_TARGET_ARM} != "no" 67CFLAGS+= -DLLVM_TARGET_ENABLE_ARM 68. if ${MACHINE_CPUARCH} == "arm" 69LLVM_NATIVE_ARCH= ARM 70. endif 71.endif 72.if ${MK_LLVM_TARGET_BPF} != "no" 73CFLAGS+= -DLLVM_TARGET_ENABLE_BPF 74.endif 75.if ${MK_LLVM_TARGET_MIPS} != "no" 76CFLAGS+= -DLLVM_TARGET_ENABLE_MIPS 77.endif 78.if ${MK_LLVM_TARGET_POWERPC} != "no" 79CFLAGS+= -DLLVM_TARGET_ENABLE_POWERPC 80. if ${MACHINE_CPUARCH} == "powerpc" 81LLVM_NATIVE_ARCH= PowerPC 82. endif 83.endif 84.if ${MK_LLVM_TARGET_RISCV} != "no" 85CFLAGS+= -DLLVM_TARGET_ENABLE_RISCV 86. if ${MACHINE_CPUARCH} == "riscv" 87LLVM_NATIVE_ARCH= RISCV 88. endif 89.endif 90.if ${MK_LLVM_TARGET_X86} != "no" 91CFLAGS+= -DLLVM_TARGET_ENABLE_X86 92. if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64" 93LLVM_NATIVE_ARCH= X86 94. endif 95.endif 96 97.ifdef LLVM_NATIVE_ARCH 98CFLAGS+= -DLLVM_NATIVE_ASMPARSER=LLVMInitialize${LLVM_NATIVE_ARCH}AsmParser 99CFLAGS+= -DLLVM_NATIVE_ASMPRINTER=LLVMInitialize${LLVM_NATIVE_ARCH}AsmPrinter 100CFLAGS+= -DLLVM_NATIVE_DISASSEMBLER=LLVMInitialize${LLVM_NATIVE_ARCH}Disassembler 101CFLAGS+= -DLLVM_NATIVE_TARGET=LLVMInitialize${LLVM_NATIVE_ARCH}Target 102CFLAGS+= -DLLVM_NATIVE_TARGETINFO=LLVMInitialize${LLVM_NATIVE_ARCH}TargetInfo 103CFLAGS+= -DLLVM_NATIVE_TARGETMC=LLVMInitialize${LLVM_NATIVE_ARCH}TargetMC 104.endif 105 106CFLAGS+= -ffunction-sections 107CFLAGS+= -fdata-sections 108.include "bsd.linker.mk" 109.if ${LINKER_TYPE} == "mac" 110LDFLAGS+= -Wl,-dead_strip 111.else 112LDFLAGS+= -Wl,--gc-sections 113.endif 114 115CXXSTD?= c++17 116CXXFLAGS+= -fno-exceptions 117CXXFLAGS+= -fno-rtti 118.if ${.MAKE.OS} == "FreeBSD" || !defined(BOOTSTRAPPING) 119CXXFLAGS.clang+= -stdlib=libc++ 120.else 121# Building on macOS/Linux needs the real sysctl() not the bootstrap tools stub. 122CFLAGS+= -DBOOTSTRAPPING_WANT_NATIVE_SYSCTL 123.endif 124.if defined(BOOTSTRAPPING) && ${.MAKE.OS} == "Linux" 125LIBADD+= dl 126.endif 127