mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 02:33:06 +01:00
sysroot.py: add support for darwin
This is a tiny bit messy because compiler-rt needs different sysroots for macOS, iOS, etc. We want sysroot.py to create something that is a hermetic representation of all build deps, so it needs to create a directory that contains all needed SDKs, and these subdirectories are then passed to cmake which passes each of these _subdirectories_ as different -isysroot flags while building the runtime libraries. Differential Revision: https://reviews.llvm.org/D96958
This commit is contained in:
parent
1f4fdce14b
commit
6764399355
@ -43,24 +43,6 @@ config("compiler_defaults") {
|
|||||||
cflags = target_flags
|
cflags = target_flags
|
||||||
ldflags = target_flags + target_ldflags
|
ldflags = target_flags + target_ldflags
|
||||||
|
|
||||||
if ((current_os == "ios" || current_os == "mac") && clang_base_path != "") {
|
|
||||||
if (current_os == "ios" && current_cpu == "arm64") {
|
|
||||||
sdk_path = ios_sdk_path
|
|
||||||
} else if (current_os == "ios" && current_cpu == "x64") {
|
|
||||||
sdk_path = iossim_sdk_path
|
|
||||||
} else if (current_os == "mac") {
|
|
||||||
sdk_path = mac_sdk_path
|
|
||||||
}
|
|
||||||
cflags += [
|
|
||||||
"-isysroot",
|
|
||||||
sdk_path,
|
|
||||||
]
|
|
||||||
ldflags += [
|
|
||||||
"-isysroot",
|
|
||||||
sdk_path,
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
# Mostly for compiler-rt, see compiler-rt/cmake/config-ix.cmake
|
# Mostly for compiler-rt, see compiler-rt/cmake/config-ix.cmake
|
||||||
if (current_os == "ios") {
|
if (current_os == "ios") {
|
||||||
asmflags += [ "-miphoneos-version-min=8.0" ]
|
asmflags += [ "-miphoneos-version-min=8.0" ]
|
||||||
@ -283,18 +265,34 @@ config("compiler_defaults") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sysroot != "") {
|
if (sysroot != "") {
|
||||||
assert(current_os != "mac" && current_os != "ios",
|
|
||||||
"FIXME: Make sysroot work on darwin")
|
|
||||||
if (current_os == "win") {
|
if (current_os == "win") {
|
||||||
assert(is_clang, "sysroot only works with clang-cl as host compiler")
|
assert(is_clang, "sysroot only works with clang-cl as host compiler")
|
||||||
cflags += [ "/winsysroot" + rebase_path(sysroot, root_build_dir) ]
|
cflags += [ "/winsysroot" + rebase_path(sysroot, root_build_dir) ]
|
||||||
} else {
|
} else if (current_os != "ios" && current_os != "mac") {
|
||||||
cflags += [ "--sysroot=" + rebase_path(sysroot, root_build_dir) ]
|
cflags += [ "--sysroot=" + rebase_path(sysroot, root_build_dir) ]
|
||||||
if (is_clang) {
|
|
||||||
cflags += [ "-Wpoison-system-directories"]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ((current_os == "ios" || current_os == "mac") &&
|
||||||
|
(clang_base_path != "" || sysroot != "")) {
|
||||||
|
if (current_os == "ios" && current_cpu == "arm64") {
|
||||||
|
sdk_path = ios_sdk_path
|
||||||
|
} else if (current_os == "ios" && current_cpu == "x64") {
|
||||||
|
sdk_path = iossim_sdk_path
|
||||||
|
} else if (current_os == "mac") {
|
||||||
|
sdk_path = mac_sdk_path
|
||||||
|
}
|
||||||
|
cflags += [
|
||||||
|
"-isysroot",
|
||||||
|
sdk_path,
|
||||||
|
]
|
||||||
|
ldflags += [
|
||||||
|
"-isysroot",
|
||||||
|
sdk_path,
|
||||||
|
]
|
||||||
|
}
|
||||||
|
if (sysroot != "" && current_os != "win" && is_clang) {
|
||||||
|
cflags += [ "-Wpoison-system-directories" ]
|
||||||
|
}
|
||||||
|
|
||||||
if (use_ubsan) {
|
if (use_ubsan) {
|
||||||
assert(is_clang && current_os == "linux",
|
assert(is_clang && current_os == "linux",
|
||||||
|
@ -1,20 +1,33 @@
|
|||||||
declare_args() {
|
import("//llvm/utils/gn/build/sysroot.gni")
|
||||||
# Set to true if you don't have Xcode installed, but do have the commandline
|
|
||||||
# tools.
|
|
||||||
mac_use_commandline_tools_sdk = false
|
|
||||||
}
|
|
||||||
|
|
||||||
# Location of the mac sdk.
|
have_ios_sdks = true
|
||||||
# The correct way to do this is to call xcrun (https://reviews.llvm.org/D70835),
|
|
||||||
# but that makes `gn gen` take twice as long and almost everyone has Xcode
|
if (sysroot == "") {
|
||||||
# installed. So require that people who don't have it installed set a gn arg.
|
declare_args() {
|
||||||
if (mac_use_commandline_tools_sdk) {
|
# Set to true if you don't have Xcode installed, but do have the commandline
|
||||||
ios_sdk_path = "/Library/Developer/CommandLineTools/SDKs/iPhoneOS.sdk"
|
# tools.
|
||||||
iossim_sdk_path =
|
mac_use_commandline_tools_sdk = false
|
||||||
"/Library/Developer/CommandLineTools/SDKs/iPhoneSimulator.sdk"
|
}
|
||||||
mac_sdk_path = "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk"
|
|
||||||
|
# Location of the mac sdk.
|
||||||
|
# The correct way to do this is to call xcrun
|
||||||
|
# (https://reviews.llvm.org/D70835), but that makes `gn gen` take twice as
|
||||||
|
# long and almost everyone has Xcode installed. So require that people who
|
||||||
|
# don't have it installed set a gn arg.
|
||||||
|
if (mac_use_commandline_tools_sdk) {
|
||||||
|
ios_sdk_path = "/Library/Developer/CommandLineTools/SDKs/iPhoneOS.sdk"
|
||||||
|
iossim_sdk_path =
|
||||||
|
"/Library/Developer/CommandLineTools/SDKs/iPhoneSimulator.sdk"
|
||||||
|
mac_sdk_path = "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk"
|
||||||
|
} else {
|
||||||
|
mac_sdk_path = "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk"
|
||||||
|
|
||||||
|
# iOS SDKs aren't available in the commandline tools SDK.
|
||||||
|
have_ios_sdks = true
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ios_sdk_path = "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk"
|
ios_sdk_path = rebase_path(sysroot, root_build_dir) + "/iPhoneOS.sdk"
|
||||||
iossim_sdk_path = "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk"
|
iossim_sdk_path =
|
||||||
mac_sdk_path = "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk"
|
rebase_path(sysroot, root_build_dir) + "/iPhoneSimulator.sdk"
|
||||||
|
mac_sdk_path = rebase_path(sysroot, root_build_dir) + "/MacOSX.sdk"
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,7 @@ group("compiler-rt") {
|
|||||||
|
|
||||||
# FIXME: Do this only if a gn arg compiler_rt_enable_ios is set?
|
# FIXME: Do this only if a gn arg compiler_rt_enable_ios is set?
|
||||||
# That would match the cmake build.
|
# That would match the cmake build.
|
||||||
# iOS SDKs aren't available in the commandline tools SDK.
|
if (host_os == "mac" && have_ios_sdks) {
|
||||||
if (host_os == "mac" && !mac_use_commandline_tools_sdk) {
|
|
||||||
if (llvm_build_AArch64) {
|
if (llvm_build_AArch64) {
|
||||||
deps += [ "//compiler-rt/lib/builtins(//llvm/utils/gn/build/toolchain:stage2_ios_aarch64)" ]
|
deps += [ "//compiler-rt/lib/builtins(//llvm/utils/gn/build/toolchain:stage2_ios_aarch64)" ]
|
||||||
}
|
}
|
||||||
|
@ -36,18 +36,47 @@ def make_fake_sysroot(out_dir):
|
|||||||
os.mkdir(os.path.join(out_dir, 'Windows Kits'))
|
os.mkdir(os.path.join(out_dir, 'Windows Kits'))
|
||||||
mkjunction(os.path.join(out_dir, 'Windows Kits', '10'), winsdk)
|
mkjunction(os.path.join(out_dir, 'Windows Kits', '10'), winsdk)
|
||||||
elif sys.platform == 'darwin':
|
elif sys.platform == 'darwin':
|
||||||
assert False, "FIXME: Implement on darwin"
|
# The SDKs used by default in compiler-rt/cmake/base-config-ix.cmake.
|
||||||
|
# COMPILER_RT_ENABLE_IOS defaults to on.
|
||||||
|
# COMPILER_RT_ENABLE_WATCHOS and COMPILER_RT_ENABLE_TV default to off.
|
||||||
|
# compiler-rt/cmake/config-ix.cmake sets DARWIN_EMBEDDED_PLATFORMS
|
||||||
|
# depending on these.
|
||||||
|
sdks = ['macosx', 'iphoneos', 'iphonesimulator']
|
||||||
|
os.mkdir(out_dir)
|
||||||
|
for sdk in sdks:
|
||||||
|
sdkpath = cmdout(['xcrun', '-sdk', sdk, '-show-sdk-path'])
|
||||||
|
# sdkpath is something like /.../SDKs/MacOSX11.1.sdk, which is a
|
||||||
|
# symlink to MacOSX.sdk in the same directory. Resolve the symlink,
|
||||||
|
# to make the symlink in out_dir less likely to break when the SDK
|
||||||
|
# is updated (which will bump the number on xcrun's output, but not
|
||||||
|
# on the symlink destination).
|
||||||
|
sdkpath = os.path.realpath(sdkpath)
|
||||||
|
os.symlink(sdkpath, os.path.join(out_dir, os.path.basename(sdkpath)))
|
||||||
else:
|
else:
|
||||||
os.symlink('/', out_dir)
|
os.symlink('/', out_dir)
|
||||||
|
|
||||||
print('Done.')
|
print('Done. Pass these flags to cmake:')
|
||||||
abs_out_dir = os.path.abspath(out_dir)
|
abs_out_dir = os.path.abspath(out_dir)
|
||||||
if sys.platform == 'win32':
|
if sys.platform == 'win32':
|
||||||
# CMake doesn't like backslashes in commandline args.
|
# CMake doesn't like backslashes in commandline args.
|
||||||
abs_out_dir = abs_out_dir.replace(os.path.sep, '/')
|
abs_out_dir = abs_out_dir.replace(os.path.sep, '/')
|
||||||
print('Pass -DLLVM_WINSYSROOT=' + abs_out_dir + ' to cmake.')
|
print(' -DLLVM_WINSYSROOT=' + abs_out_dir)
|
||||||
|
elif sys.platform == 'darwin':
|
||||||
|
flags = [
|
||||||
|
'-DCMAKE_OSX_SYSROOT=' + os.path.join(abs_out_dir, 'MacOSX.sdk'),
|
||||||
|
|
||||||
|
# For find_darwin_sdk_dir() in
|
||||||
|
# compiler-rt/cmake/Modules/CompilerRTDarwinUtils.cmake
|
||||||
|
'-DDARWIN_macosx_CACHED_SYSROOT=' +
|
||||||
|
os.path.join(abs_out_dir, 'MacOSX.sdk'),
|
||||||
|
'-DDARWIN_iphoneos_CACHED_SYSROOT=' +
|
||||||
|
os.path.join(abs_out_dir, 'iPhoneOS.sdk'),
|
||||||
|
'-DDARWIN_iphonesimulator_CACHED_SYSROOT=' +
|
||||||
|
os.path.join(abs_out_dir, 'iPhoneSimulator.sdk'),
|
||||||
|
]
|
||||||
|
print(' ' + ' '.join(flags))
|
||||||
else:
|
else:
|
||||||
print('Pass -DCMAKE_SYSROOT=' + abs_out_dir + ' to cmake.')
|
print(' -DCMAKE_SYSROOT=' + abs_out_dir + ' to cmake.')
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
Loading…
Reference in New Issue
Block a user