mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #6681 from khasinski/cosmopolitan-build-config
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
# Cosmopolitan Libc build configuration for mruby
|
||||
# https://github.com/jart/cosmopolitan
|
||||
#
|
||||
# Produces Actually Portable Executables (APE) - single binaries that run on:
|
||||
# - Linux (x86_64, ARM64)
|
||||
# - macOS (x86_64, ARM64)
|
||||
# - Windows (x86_64)
|
||||
# - FreeBSD (x86_64)
|
||||
# - OpenBSD (x86_64)
|
||||
# - NetBSD (x86_64)
|
||||
#
|
||||
# Requirements:
|
||||
# Download cosmocc toolchain from https://cosmo.zip/pub/cosmocc/
|
||||
#
|
||||
# Usage:
|
||||
# COSMO_ROOT=/path/to/cosmocc rake MRUBY_CONFIG=cosmopolitan
|
||||
#
|
||||
# The resulting binaries in bin/ will have .com extension and run on all
|
||||
# supported platforms without recompilation.
|
||||
|
||||
COSMO_ROOT = ENV['COSMO_ROOT']
|
||||
|
||||
unless COSMO_ROOT && File.directory?(COSMO_ROOT)
|
||||
msg = <<~MSG
|
||||
Cosmopolitan toolchain not found.
|
||||
|
||||
Please set COSMO_ROOT environment variable to the cosmocc directory:
|
||||
|
||||
mkdir -p ~/cosmo && cd ~/cosmo
|
||||
wget https://cosmo.zip/pub/cosmocc/cosmocc.zip
|
||||
unzip cosmocc.zip
|
||||
export COSMO_ROOT=~/cosmo
|
||||
|
||||
Then run:
|
||||
COSMO_ROOT=~/cosmo rake MRUBY_CONFIG=cosmopolitan
|
||||
MSG
|
||||
raise msg
|
||||
end
|
||||
|
||||
MRuby::Build.new do |conf|
|
||||
# C compiler
|
||||
conf.cc do |cc|
|
||||
cc.command = "#{COSMO_ROOT}/bin/cosmocc"
|
||||
cc.flags = %w[-Os -fno-omit-frame-pointer]
|
||||
end
|
||||
|
||||
# C++ compiler
|
||||
conf.cxx do |cxx|
|
||||
cxx.command = "#{COSMO_ROOT}/bin/cosmoc++"
|
||||
cxx.flags = conf.cc.flags.dup
|
||||
end
|
||||
|
||||
# Linker
|
||||
conf.linker do |linker|
|
||||
linker.command = "#{COSMO_ROOT}/bin/cosmocc"
|
||||
linker.flags = %w[-static]
|
||||
end
|
||||
|
||||
# Archiver
|
||||
conf.archiver do |archiver|
|
||||
archiver.command = "#{COSMO_ROOT}/bin/cosmoar"
|
||||
end
|
||||
|
||||
# APE binaries use .com extension
|
||||
conf.exts.executable = '.com'
|
||||
|
||||
# Cosmopolitan provides POSIX compatibility, explicitly select POSIX HALs
|
||||
conf.gem core: 'hal-posix-io'
|
||||
conf.gem core: 'hal-posix-socket'
|
||||
conf.gem core: 'hal-posix-dir'
|
||||
|
||||
# Standard library
|
||||
conf.gembox 'stdlib'
|
||||
conf.gembox 'stdlib-ext'
|
||||
conf.gembox 'stdlib-io' # Includes mruby-io, mruby-socket, mruby-dir
|
||||
conf.gembox 'math'
|
||||
conf.gembox 'metaprog'
|
||||
|
||||
# Binary tools
|
||||
# Note: mruby-bin-config is a shell script and incompatible with .com extension
|
||||
conf.gem core: 'mruby-bin-mrbc'
|
||||
conf.gem core: 'mruby-bin-mruby'
|
||||
conf.gem core: 'mruby-bin-strip'
|
||||
conf.gem core: 'mruby-bin-mirb'
|
||||
conf.gem core: 'mruby-bin-debugger'
|
||||
end
|
||||
Reference in New Issue
Block a user