Skip to content

Commit

Permalink
feat: first-class musl support
Browse files Browse the repository at this point in the history
  • Loading branch information
flavorjones committed Jan 27, 2024
1 parent 3673f77 commit 898acd2
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 75 deletions.
48 changes: 32 additions & 16 deletions .cross_rubies
Original file line number Diff line number Diff line change
@@ -1,32 +1,48 @@
3.0.0:aarch64-linux
3.0.0:arm-linux
3.0.0:aarch64-linux-gnu
3.0.0:aarch64-linux-musl
3.0.0:arm-linux-gnu
3.0.0:arm-linux-musl
3.0.0:arm64-darwin
3.0.0:x64-mingw32
3.0.0:x86-linux
3.0.0:x86-linux-gnu
3.0.0:x86-linux-musl
3.0.0:x86-mingw32
3.0.0:x86_64-darwin
3.0.0:x86_64-linux
3.1.0:aarch64-linux
3.1.0:arm-linux
3.0.0:x86_64-linux-gnu
3.0.0:x86_64-linux-musl
3.1.0:aarch64-linux-gnu
3.1.0:aarch64-linux-musl
3.1.0:arm-linux-gnu
3.1.0:arm-linux-musl
3.1.0:arm64-darwin
3.1.0:x64-mingw-ucrt
3.1.0:x86-linux
3.1.0:x86-linux-gnu
3.1.0:x86-linux-musl
3.1.0:x86-mingw32
3.1.0:x86_64-darwin
3.1.0:x86_64-linux
3.2.0:aarch64-linux
3.2.0:arm-linux
3.1.0:x86_64-linux-gnu
3.1.0:x86_64-linux-musl
3.2.0:aarch64-linux-gnu
3.2.0:aarch64-linux-musl
3.2.0:arm-linux-gnu
3.2.0:arm-linux-musl
3.2.0:arm64-darwin
3.2.0:x64-mingw-ucrt
3.2.0:x86-linux
3.2.0:x86-linux-gnu
3.2.0:x86-linux-musl
3.2.0:x86-mingw32
3.2.0:x86_64-darwin
3.2.0:x86_64-linux
3.3.0:aarch64-linux
3.3.0:arm-linux
3.2.0:x86_64-linux-gnu
3.2.0:x86_64-linux-musl
3.3.0:aarch64-linux-gnu
3.3.0:aarch64-linux-musl
3.3.0:arm-linux-gnu
3.3.0:arm-linux-musl
3.3.0:arm64-darwin
3.3.0:x64-mingw-ucrt
3.3.0:x86-linux
3.3.0:x86-linux-gnu
3.3.0:x86-linux-musl
3.3.0:x86-mingw32
3.3.0:x86_64-darwin
3.3.0:x86_64-linux
3.3.0:x86_64-linux-gnu
3.3.0:x86_64-linux-musl
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ group :development do

# building extensions
gem "rake-compiler", "1.2.5"
gem "rake-compiler-dock", "1.4.0"
gem "rake-compiler-dock", "1.5.0.rc1"

# parser generator
gem "rexical", "= 1.0.7"
Expand Down
88 changes: 30 additions & 58 deletions rakelib/extensions.rake
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ CrossRuby = Struct.new(:version, :platform) do
MINGWUCRT_PLATFORM_REGEX = /mingw-ucrt/
MINGW32_PLATFORM_REGEX = /mingw32/
LINUX_PLATFORM_REGEX = /linux/
X86_LINUX_PLATFORM_REGEX = /x86.*linux/
X86_LINUX_GNU_PLATFORM_REGEX = /x86.*linux-gnu$/
X86_LINUX_MUSL_PLATFORM_REGEX = /x86.*linux-musl$/
AARCH_LINUX_PLATFORM_REGEX = /aarch.*linux/
ARM_LINUX_PLATFORM_REGEX = /arm-linux/
DARWIN_PLATFORM_REGEX = /darwin/
Expand Down Expand Up @@ -42,70 +43,35 @@ CrossRuby = Struct.new(:version, :platform) do
end
end

def host
@host ||= case platform
when "x64-mingw-ucrt"
"x86_64-w64-mingw32"
when "x64-mingw32"
"x86_64-w64-mingw32"
when "x86-mingw32"
"i686-w64-mingw32"
when "x86_64-linux"
"x86_64-linux-gnu"
when "x86-linux"
"i686-linux-gnu"
when "aarch64-linux"
"aarch64-linux"
when "x86_64-darwin"
"x86_64-darwin"
when "arm64-darwin"
"aarch64-darwin"
else
raise "CrossRuby.platform: unsupported platform: #{platform}"
end
end

def tool(name)
(@binutils_prefix ||= case platform
when "x64-mingw-ucrt", "x64-mingw32"
"x86_64-w64-mingw32-"
when "x86-mingw32"
"i686-w64-mingw32-"
when "x86_64-linux"
"x86_64-redhat-linux-"
when "x86-linux"
"i686-redhat-linux-"
when "aarch64-linux"
"aarch64-linux-gnu-"
when "x86_64-darwin"
"x86_64-apple-darwin-"
when "arm64-darwin"
"aarch64-apple-darwin-"
when "arm-linux"
"arm-linux-gnueabihf-"
when "aarch64-linux-gnu" then "aarch64-linux-gnu-"
when "aarch64-linux-musl" then "aarch64-linux-musl-"
when "arm-linux-gnu" then "arm-linux-gnueabihf-"
when "arm-linux-musl" then "arm-linux-musleabihf-"
when "arm64-darwin" then "aarch64-apple-darwin-"
when "x64-mingw-ucrt", "x64-mingw32" then "x86_64-w64-mingw32-"
when "x86-linux-gnu" then "i686-redhat-linux-gnu-"
when "x86-linux-musl" then "i686-unknown-linux-musl-"
when "x86-mingw32" then "i686-w64-mingw32-"
when "x86_64-darwin" then "x86_64-apple-darwin-"
when "x86_64-linux-gnu" then "x86_64-redhat-linux-gnu-"
when "x86_64-linux-musl" then "x86_64-unknown-linux-musl-"
else
raise "CrossRuby.tool: unmatched platform: #{platform}"
end) + name
end

def target_file_format
case platform
when "x64-mingw-ucrt", "x64-mingw32"
"pei-x86-64"
when "x86-mingw32"
"pei-i386"
when "x86_64-linux"
"elf64-x86-64"
when "x86-linux"
"elf32-i386"
when "aarch64-linux"
"elf64-littleaarch64"
when "x86_64-darwin"
"Mach-O 64-bit x86-64" # hmm
when "arm64-darwin"
"Mach-O arm64"
when "arm-linux"
"elf32-littlearm"
when "aarch64-linux-gnu", "aarch64-linux-musl" then "elf64-littleaarch64"
when "arm-linux-gnu", "arm-linux-musl" then "elf32-littlearm"
when "arm64-darwin" then "Mach-O arm64"
when "x64-mingw-ucrt", "x64-mingw32" then "pei-x86-64"
when "x86-linux-gnu", "x86-linux-musl" then "elf32-i386"
when "x86-mingw32" then "pei-i386"
when "x86_64-darwin" then "Mach-O 64-bit x86-64" # hmm
when "x86_64-linux-gnu", "x86_64-linux-musl" then "elf64-x86-64"
else
raise "CrossRuby.target_file_format: unmatched platform: #{platform}"
end
Expand Down Expand Up @@ -162,14 +128,18 @@ CrossRuby = Struct.new(:version, :platform) do
"api-ms-win-crt-utility-l1-1-0.dll",
libruby_dll,
]
when X86_LINUX_PLATFORM_REGEX
when X86_LINUX_GNU_PLATFORM_REGEX
[
"libm.so.6",
"libc.so.6",
"libdl.so.2", # on old dists only - now in libc
].tap do |dlls|
dlls << "libpthread.so.0" if ver >= "3.2.0"
end
when X86_LINUX_MUSL_PLATFORM_REGEX
[
"libc.so",
]
when AARCH_LINUX_PLATFORM_REGEX
[
"libm.so.6",
Expand Down Expand Up @@ -201,10 +171,12 @@ CrossRuby = Struct.new(:version, :platform) do

def dll_ref_versions
case platform
when X86_LINUX_PLATFORM_REGEX
when X86_LINUX_GNU_PLATFORM_REGEX
{ "GLIBC" => "2.17" }
when AARCH_LINUX_PLATFORM_REGEX, ARM_LINUX_PLATFORM_REGEX
{ "GLIBC" => "2.29" }
when X86_LINUX_MUSL_PLATFORM_REGEX
{}
else
raise "CrossRuby.dll_ref_versions: unmatched platform: #{platform}"
end
Expand Down

0 comments on commit 898acd2

Please sign in to comment.