LLVM crosscompile x64 for ARM64 (#1826)

* LLVM crosscompile x64 for ARM64

* Fix MacOS host platform test

* Ensure options is persistent in cross compile paths
This commit is contained in:
Conrad Kreyling 2024-02-06 11:29:07 -05:00 коммит произвёл GitHub
Родитель 1d1b21f25e
Коммит a81abd5614
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
2 изменённых файлов: 40 добавлений и 1 удалений

Просмотреть файл

@ -438,10 +438,44 @@ function build_llvm(llvm_build)
local options = os.ishost("macosx") and
"-DLLVM_ENABLE_LIBCXX=true" or ""
local is32bits = target_architecture() == "x86"
local targetIsArm64 = target_architecture() == "arm64"
if is32bits then
options = options .. (is32bits and " -DLLVM_BUILD_32_BITS=true" or "")
end
if targetIsArm64 then
if os.host() == "linux" then
local host_arch = unix_host_architecture()
if host_arch ~= "aarch64" then
options = options .. ""
.. ' -DCMAKE_SYSTEM_NAME=Linux'
.. ' -DCMAKE_SYSTEM_PROCESSOR=aarch64'
.. ' -DCMAKE_C_COMPILER=/usr/bin/aarch64-linux-gnu-gcc'
.. ' -DCMAKE_CXX_COMPILER=/usr/bin/aarch64-linux-gnu-g++'
.. ' -DCMAKE_ASM_COMPILER=/usr/bin/aarch64-linux-gnu-as'
.. ' -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER'
.. ' -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY'
.. ' -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY'
.. ' -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY'
.. ' ' .. options
end
end
if os.host() == "macosx" then
local host_arch = unix_host_architecture()
if host_arch ~= "arm64" then
options = options .. ""
.. ' -DCMAKE_SYSTEM_NAME=Darwin'
.. ' -DCMAKE_SYSTEM_PROCESSOR=arm64'
.. ' -DCMAKE_C_COMPILER_TARGET=arm64-apple-darwin21.6.0'
.. ' -DCMAKE_CXX_COMPILER_TARGET=arm64-apple-darwin21.6.0'
.. ' -DCMAKE_ASM_COMPILER_TARGET=arm64-apple-darwin21.6.0'
.. ' ' .. options
end
end
end
cmake("Ninja", conf, llvm_build, options)
ninja('"' .. llvm_build .. '"')
ninja('"' .. llvm_build .. '"', "clang-headers")

Просмотреть файл

@ -112,6 +112,11 @@ function download(url, file, try)
return res, code
end
function unix_host_architecture()
result, errorCode = os.outputof("uname -m")
return result
end
--
-- Allows copying directories.
-- It uses the premake patterns (**=recursive match, *=file match)
@ -202,4 +207,4 @@ function os.rmfiles(src_dir, filter)
print( "Error: " .. counter .. "/" .. #matches .. " files removed.")
return nil
end
end
end