mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-11-25 10:01:02 +01:00
Allow bootstrapping llvm-tblgen on macOS and Linux
This is needed in order to build various LLVM binutils (e.g. addr2line) as well as clang/lld/lldb. Co-authored-by: Jessica Clarke <jrtc27@FreeBSD.org> Test Plan: Compiles on ubuntu 18.04 and macOS 11.4 Reviewed By: dim Differential Revision: https://reviews.freebsd.org/D31057
This commit is contained in:
parent
2de949cf85
commit
31ba4ce889
@ -146,7 +146,8 @@ static Flavor parseFlavor(std::vector<const char *> &v) {
|
|||||||
static int lldMain(int argc, const char **argv, llvm::raw_ostream &stdoutOS,
|
static int lldMain(int argc, const char **argv, llvm::raw_ostream &stdoutOS,
|
||||||
llvm::raw_ostream &stderrOS, bool exitEarly = true) {
|
llvm::raw_ostream &stderrOS, bool exitEarly = true) {
|
||||||
std::vector<const char *> args(argv, argv + argc);
|
std::vector<const char *> args(argv, argv + argc);
|
||||||
#ifdef __FreeBSD__
|
#if 1
|
||||||
|
/* On FreeBSD we only build the ELF linker. */
|
||||||
return !elf::link(args, exitEarly, stdoutOS, stderrOS);
|
return !elf::link(args, exitEarly, stdoutOS, stderrOS);
|
||||||
#else
|
#else
|
||||||
switch (parseFlavor(args)) {
|
switch (parseFlavor(args)) {
|
||||||
|
@ -29,7 +29,11 @@
|
|||||||
/* #undef HAVE_CRASHREPORTERCLIENT_H */
|
/* #undef HAVE_CRASHREPORTERCLIENT_H */
|
||||||
|
|
||||||
/* can use __crashreporter_info__ */
|
/* can use __crashreporter_info__ */
|
||||||
|
#if defined(__APPLE__)
|
||||||
|
#define HAVE_CRASHREPORTER_INFO 1
|
||||||
|
#else
|
||||||
#define HAVE_CRASHREPORTER_INFO 0
|
#define HAVE_CRASHREPORTER_INFO 0
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define to 1 if you have the declaration of `arc4random', and to 0 if you
|
/* Define to 1 if you have the declaration of `arc4random', and to 0 if you
|
||||||
don't. */
|
don't. */
|
||||||
@ -125,28 +129,46 @@
|
|||||||
#define HAVE_PTHREAD_SETNAME_NP 1
|
#define HAVE_PTHREAD_SETNAME_NP 1
|
||||||
|
|
||||||
/* Define to 1 if you have the <link.h> header file. */
|
/* Define to 1 if you have the <link.h> header file. */
|
||||||
|
#if __has_include(<link.h>)
|
||||||
#define HAVE_LINK_H 1
|
#define HAVE_LINK_H 1
|
||||||
|
#else
|
||||||
|
#define HAVE_LINK_H 0
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define to 1 if you have the `lseek64' function. */
|
/* Define to 1 if you have the `lseek64' function. */
|
||||||
/* #undef HAVE_LSEEK64 */
|
#if defined(__linux__)
|
||||||
|
#define HAVE_LSEEK64 1
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define to 1 if you have the <mach/mach.h> header file. */
|
/* Define to 1 if you have the <mach/mach.h> header file. */
|
||||||
/* #undef HAVE_MACH_MACH_H */
|
#if __has_include(<mach/mach.h>)
|
||||||
|
#define HAVE_MACH_MACH_H 1
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define to 1 if you have the `mallctl' function. */
|
/* Define to 1 if you have the `mallctl' function. */
|
||||||
|
#if defined(__FreeBSD__)
|
||||||
#define HAVE_MALLCTL 1
|
#define HAVE_MALLCTL 1
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define to 1 if you have the `mallinfo' function. */
|
/* Define to 1 if you have the `mallinfo' function. */
|
||||||
/* #undef HAVE_MALLINFO */
|
#if defined(__linux__)
|
||||||
|
#define HAVE_MALLINFO 1
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define to 1 if you have the <malloc/malloc.h> header file. */
|
/* Define to 1 if you have the <malloc/malloc.h> header file. */
|
||||||
/* #undef HAVE_MALLOC_MALLOC_H */
|
#if __has_include(<malloc/malloc.h>)
|
||||||
|
#define HAVE_MALLOC_MALLOC_H 1
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define to 1 if you have the `malloc_zone_statistics' function. */
|
/* Define to 1 if you have the `malloc_zone_statistics' function. */
|
||||||
/* #undef HAVE_MALLOC_ZONE_STATISTICS */
|
#if defined(__APPLE__)
|
||||||
|
#define HAVE_MALLOC_ZONE_STATISTICS 1
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define to 1 if you have the `posix_fallocate' function. */
|
/* Define to 1 if you have the `posix_fallocate' function. */
|
||||||
|
#if !defined(__APPLE__)
|
||||||
#define HAVE_POSIX_FALLOCATE 1
|
#define HAVE_POSIX_FALLOCATE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define to 1 if you have the `posix_spawn' function. */
|
/* Define to 1 if you have the `posix_spawn' function. */
|
||||||
#define HAVE_POSIX_SPAWN 1
|
#define HAVE_POSIX_SPAWN 1
|
||||||
@ -209,19 +231,31 @@
|
|||||||
#define HAVE_SYS_TIME_H 1
|
#define HAVE_SYS_TIME_H 1
|
||||||
|
|
||||||
/* Define to 1 if stat struct has st_mtimespec member .*/
|
/* Define to 1 if stat struct has st_mtimespec member .*/
|
||||||
|
#if !defined(__linux__)
|
||||||
#define HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC 1
|
#define HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC 1
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define to 1 if stat struct has st_mtim member. */
|
/* Define to 1 if stat struct has st_mtim member. */
|
||||||
|
#if !defined(__APPLE__)
|
||||||
#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
|
#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||||
#define HAVE_SYS_TYPES_H 1
|
#define HAVE_SYS_TYPES_H 1
|
||||||
|
|
||||||
/* Define if the setupterm() function is supported this platform. */
|
/* Define if the setupterm() function is supported this platform. */
|
||||||
|
#if defined(__FreeBSD__)
|
||||||
|
/*
|
||||||
|
* This is only needed for terminalHasColors(). When disabled LLVM falls back
|
||||||
|
* to checking a list of TERM prefixes which is sufficient for a bootstrap tool.
|
||||||
|
*/
|
||||||
#define LLVM_ENABLE_TERMINFO 1
|
#define LLVM_ENABLE_TERMINFO 1
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define if the xar_open() function is supported this platform. */
|
/* Define if the xar_open() function is supported this platform. */
|
||||||
/* #undef HAVE_LIBXAR */
|
#if defined(__APPLE__)
|
||||||
|
#define HAVE_LIBXAR
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define to 1 if you have the <termios.h> header file. */
|
/* Define to 1 if you have the <termios.h> header file. */
|
||||||
#define HAVE_TERMIOS_H 1
|
#define HAVE_TERMIOS_H 1
|
||||||
@ -239,7 +273,9 @@
|
|||||||
/* #undef HAVE__CHSIZE_S */
|
/* #undef HAVE__CHSIZE_S */
|
||||||
|
|
||||||
/* Define to 1 if you have the `_Unwind_Backtrace' function. */
|
/* Define to 1 if you have the `_Unwind_Backtrace' function. */
|
||||||
/* #undef HAVE__UNWIND_BACKTRACE */
|
#if !defined(__FreeBSD__)
|
||||||
|
#define HAVE__UNWIND_BACKTRACE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Have host's __alloca */
|
/* Have host's __alloca */
|
||||||
/* #undef HAVE___ALLOCA */
|
/* #undef HAVE___ALLOCA */
|
||||||
@ -315,7 +351,11 @@
|
|||||||
/* #undef LLVM_LIBXML2_ENABLED */
|
/* #undef LLVM_LIBXML2_ENABLED */
|
||||||
|
|
||||||
/* Define to the extension used for shared libraries, say, ".so". */
|
/* Define to the extension used for shared libraries, say, ".so". */
|
||||||
|
#if defined(__APPLE__)
|
||||||
|
#define LTDL_SHLIB_EXT ".dylib"
|
||||||
|
#else
|
||||||
#define LTDL_SHLIB_EXT ".so"
|
#define LTDL_SHLIB_EXT ".so"
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define to the address where bug reports for this package should be sent. */
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
#define PACKAGE_BUGREPORT "https://bugs.freebsd.org/submit/"
|
#define PACKAGE_BUGREPORT "https://bugs.freebsd.org/submit/"
|
||||||
@ -351,6 +391,10 @@
|
|||||||
/* #undef LLVM_GISEL_COV_PREFIX */
|
/* #undef LLVM_GISEL_COV_PREFIX */
|
||||||
|
|
||||||
/* Whether Timers signpost passes in Xcode Instruments */
|
/* Whether Timers signpost passes in Xcode Instruments */
|
||||||
|
#if defined(__APPLE__)
|
||||||
|
#define LLVM_SUPPORT_XCODE_SIGNPOSTS 1
|
||||||
|
#else
|
||||||
#define LLVM_SUPPORT_XCODE_SIGNPOSTS 0
|
#define LLVM_SUPPORT_XCODE_SIGNPOSTS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -717,7 +717,8 @@ SRCS_EXL+= LTO/LTOModule.cpp
|
|||||||
SRCS_EXL+= LTO/SummaryBasedOptimizations.cpp
|
SRCS_EXL+= LTO/SummaryBasedOptimizations.cpp
|
||||||
SRCS_EXL+= LTO/ThinLTOCodeGenerator.cpp
|
SRCS_EXL+= LTO/ThinLTOCodeGenerator.cpp
|
||||||
SRCS_MIN+= LTO/UpdateCompilerUsed.cpp
|
SRCS_MIN+= LTO/UpdateCompilerUsed.cpp
|
||||||
SRCS_MIN+= LineEditor/LineEditor.cpp
|
# Only needed for clangd/clang-query, uncomment once we build those.
|
||||||
|
# SRCS_XDW+= LineEditor/LineEditor.cpp
|
||||||
SRCS_MIN+= Linker/IRMover.cpp
|
SRCS_MIN+= Linker/IRMover.cpp
|
||||||
SRCS_MIN+= Linker/LinkModules.cpp
|
SRCS_MIN+= Linker/LinkModules.cpp
|
||||||
SRCS_MIN+= MC/ConstantPools.cpp
|
SRCS_MIN+= MC/ConstantPools.cpp
|
||||||
|
@ -100,12 +100,24 @@ CFLAGS+= -DLLVM_NATIVE_TARGETMC=LLVMInitialize${LLVM_NATIVE_ARCH}TargetMC
|
|||||||
|
|
||||||
CFLAGS+= -ffunction-sections
|
CFLAGS+= -ffunction-sections
|
||||||
CFLAGS+= -fdata-sections
|
CFLAGS+= -fdata-sections
|
||||||
|
.if ${LINKER_TYPE} == "mac"
|
||||||
|
LDFLAGS+= -Wl,-dead_strip
|
||||||
|
.else
|
||||||
LDFLAGS+= -Wl,--gc-sections
|
LDFLAGS+= -Wl,--gc-sections
|
||||||
|
.endif
|
||||||
|
|
||||||
CXXSTD?= c++14
|
CXXSTD?= c++14
|
||||||
CXXFLAGS+= -fno-exceptions
|
CXXFLAGS+= -fno-exceptions
|
||||||
CXXFLAGS+= -fno-rtti
|
CXXFLAGS+= -fno-rtti
|
||||||
|
.if ${.MAKE.OS} == "FreeBSD" || !defined(BOOTSTRAPPING)
|
||||||
|
# Building on macOS/Linux needs the real sysctl() not the bootstrap tools stub.
|
||||||
|
CFLAGS+= -DBOOTSTRAPPING_WANT_NATIVE_SYSCTL
|
||||||
|
.else
|
||||||
CXXFLAGS.clang+= -stdlib=libc++
|
CXXFLAGS.clang+= -stdlib=libc++
|
||||||
|
.endif
|
||||||
|
.if defined(BOOTSTRAPPING) && ${.MAKE.OS} == "Linux"
|
||||||
|
LIBADD+= dl
|
||||||
|
.endif
|
||||||
|
|
||||||
.if ${MACHINE_ARCH:Mmips64}
|
.if ${MACHINE_ARCH:Mmips64}
|
||||||
STATIC_CFLAGS+= -mxgot
|
STATIC_CFLAGS+= -mxgot
|
||||||
|
@ -360,14 +360,6 @@ __DEFAULT_YES_OPTIONS+=OPENMP
|
|||||||
__DEFAULT_NO_OPTIONS+=OPENMP
|
__DEFAULT_NO_OPTIONS+=OPENMP
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
.if ${.MAKE.OS} != "FreeBSD"
|
|
||||||
# Building the target compiler requires building tablegen on the host
|
|
||||||
# which is (currently) not possible on non-FreeBSD.
|
|
||||||
BROKEN_OPTIONS+=CLANG LLD LLDB
|
|
||||||
# The same also applies to the bootstrap LLVM.
|
|
||||||
BROKEN_OPTIONS+=CLANG_BOOTSTRAP LLD_BOOTSTRAP
|
|
||||||
.endif
|
|
||||||
|
|
||||||
.include <bsd.mkopt.mk>
|
.include <bsd.mkopt.mk>
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -37,6 +37,11 @@
|
|||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#ifdef BOOTSTRAPPING_WANT_NATIVE_SYSCTL
|
||||||
|
/* We need the real sysctl.h e.g. when bootstrapping the LLVM tools. */
|
||||||
|
#include_next <sys/sysctl.h>
|
||||||
|
#else
|
||||||
|
/* Otherwise, avoid sysctls since they might not be supported on the host. */
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#define sysctlbyname __freebsd_sysctlbyname
|
#define sysctlbyname __freebsd_sysctlbyname
|
||||||
@ -44,3 +49,4 @@
|
|||||||
|
|
||||||
int sysctl(const int *, u_int, void *, size_t *, const void *, size_t);
|
int sysctl(const int *, u_int, void *, size_t *, const void *, size_t);
|
||||||
int sysctlbyname(const char *, void *, size_t *, const void *, size_t);
|
int sysctlbyname(const char *, void *, size_t *, const void *, size_t);
|
||||||
|
#endif
|
||||||
|
@ -166,6 +166,9 @@ if __name__ == "__main__":
|
|||||||
"needed if CC/CPP/CXX are not set). ")
|
"needed if CC/CPP/CXX are not set). ")
|
||||||
parser.add_argument("--debug", action="store_true",
|
parser.add_argument("--debug", action="store_true",
|
||||||
help="Print information on inferred env vars")
|
help="Print information on inferred env vars")
|
||||||
|
parser.add_argument("--bootstrap-toolchain", action="store_true",
|
||||||
|
help="Bootstrap the toolchain instead of using an "
|
||||||
|
"external one (experimental and not recommended)")
|
||||||
parser.add_argument("--clean", action="store_true",
|
parser.add_argument("--clean", action="store_true",
|
||||||
help="Do a clean rebuild instead of building with "
|
help="Do a clean rebuild instead of building with "
|
||||||
"-DWITHOUT_CLEAN")
|
"-DWITHOUT_CLEAN")
|
||||||
@ -195,6 +198,7 @@ if __name__ == "__main__":
|
|||||||
if "universe" not in sys.argv and "tinderbox" not in sys.argv:
|
if "universe" not in sys.argv and "tinderbox" not in sys.argv:
|
||||||
sys.exit("TARGET= and TARGET_ARCH= must be set explicitly "
|
sys.exit("TARGET= and TARGET_ARCH= must be set explicitly "
|
||||||
"when building on non-FreeBSD")
|
"when building on non-FreeBSD")
|
||||||
|
if not parsed_args.bootstrap_toolchain:
|
||||||
# infer values for CC/CXX/CPP
|
# infer values for CC/CXX/CPP
|
||||||
if parsed_args.host_compiler_type == "gcc":
|
if parsed_args.host_compiler_type == "gcc":
|
||||||
default_cc, default_cxx, default_cpp = ("gcc", "g++", "cpp")
|
default_cc, default_cxx, default_cpp = ("gcc", "g++", "cpp")
|
||||||
|
@ -17,8 +17,10 @@ LDADD+= ${OBJTOP}/lib/clang/lib${lib}/lib${lib}.a
|
|||||||
|
|
||||||
PACKAGE= clang
|
PACKAGE= clang
|
||||||
|
|
||||||
|
.if ${.MAKE.OS} == "FreeBSD" || !defined(BOOTSTRAPPING)
|
||||||
LIBADD+= execinfo
|
LIBADD+= execinfo
|
||||||
LIBADD+= ncursesw
|
LIBADD+= ncursesw
|
||||||
|
.endif
|
||||||
LIBADD+= pthread
|
LIBADD+= pthread
|
||||||
|
|
||||||
.include <bsd.prog.mk>
|
.include <bsd.prog.mk>
|
||||||
|
@ -102,8 +102,10 @@ TGHDRS+= ${INCFILE}
|
|||||||
DPSRCS+= ${TGHDRS}
|
DPSRCS+= ${TGHDRS}
|
||||||
CLEANFILES+= ${TGHDRS} ${TGHDRS:C/$/.d/}
|
CLEANFILES+= ${TGHDRS} ${TGHDRS:C/$/.d/}
|
||||||
|
|
||||||
|
.if ${.MAKE.OS} == "FreeBSD" || !defined(BOOTSTRAPPING)
|
||||||
LIBADD+= execinfo
|
LIBADD+= execinfo
|
||||||
LIBADD+= ncursesw
|
LIBADD+= ncursesw
|
||||||
|
.endif
|
||||||
LIBADD+= pthread
|
LIBADD+= pthread
|
||||||
LIBADD+= z
|
LIBADD+= z
|
||||||
|
|
||||||
|
@ -22,8 +22,10 @@ LDADD+= ${OBJTOP}/lib/clang/lib${lib}/lib${lib}.a
|
|||||||
|
|
||||||
PACKAGE= clang
|
PACKAGE= clang
|
||||||
|
|
||||||
|
.if ${.MAKE.OS} == "FreeBSD" || !defined(BOOTSTRAPPING)
|
||||||
LIBADD+= execinfo
|
LIBADD+= execinfo
|
||||||
LIBADD+= ncursesw
|
LIBADD+= ncursesw
|
||||||
|
.endif
|
||||||
LIBADD+= pthread
|
LIBADD+= pthread
|
||||||
|
|
||||||
.include <bsd.prog.mk>
|
.include <bsd.prog.mk>
|
||||||
|
Loading…
Reference in New Issue
Block a user