Skip to content

Commit

Permalink
LLVM crosscompile x64 for ARM64
Browse files Browse the repository at this point in the history
  • Loading branch information
konistehrad committed Feb 6, 2024
1 parent 1d1b21f commit f754b38
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 1 deletion.
34 changes: 34 additions & 0 deletions build/llvm/LLVM.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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 = ""
.. ' -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() == "macos" then
local host_arch = unix_host_architecture()
if host_arch ~= "arm64" then
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")
Expand Down
7 changes: 6 additions & 1 deletion build/scripts/Utils.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -202,4 +207,4 @@ function os.rmfiles(src_dir, filter)
print( "Error: " .. counter .. "/" .. #matches .. " files removed.")
return nil
end
end
end

0 comments on commit f754b38

Please sign in to comment.