Last active
June 5, 2024 02:31
-
-
Save rguiscard/da6a475b3983c9dc8e771d827e95d0b8 to your computer and use it in GitHub Desktop.
Compile mruby with Cosmopolitan Libc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Example of mruby with cosmo. | |
# Compile with `../cosmo/bin/cosmocc -I ../mruby-3.3.0/build/cosmo/include add.c ../mruby-3.3.0/build/cosmo/lib/libmruby.a -o add` | |
# To run in Linux, do `./add`; to run in Windows, rename it to "add.com" and run under PowerShell `./add.com`. | |
#include <mruby.h> | |
#include <mruby/compile.h> | |
mrb_value add_int_method(mrb_state *mrb, mrb_value self) | |
{ | |
mrb_int a = 0; | |
mrb_int b = 0; | |
mrb_get_args(mrb, "ii", &a, &b); | |
printf("%d + %d = ", a, b); | |
return mrb_fixnum_value(a+b); | |
} | |
int main(void) { | |
mrb_state *mrb = mrb_open(); | |
mrb_define_method(mrb, mrb->kernel_module, "add_int", add_int_method, MRB_ARGS_REQ(2)); | |
char code[] = "puts add_int(1,10)"; | |
mrb_load_string(mrb, code); | |
mrb_close(mrb); | |
return 0; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Put this file under mruby/build_config/ | |
# Compile mruby with `rake MRUBY_CONFIG=cosmo`. | |
# Run mruby/build/cosmo/bin/mirb for interactive shell. | |
# Remember to change COSMO_PATH to fit your environment. | |
MRuby::CrossBuild.new('cosmo') do |conf| | |
toolchain :gcc | |
COSMO_PATH = "/home/rguiscard/Projects/cosmo/" | |
# C compiler | |
conf.cc do |cc| | |
cc.command = "#{COSMO_PATH}/bin/cosmocc" | |
cc.include_paths = ["#{COSMO_PATH}/include", "./include"] | |
end | |
# C++ compiler | |
conf.cxx do |cxx| | |
cxx.command = "#{COSMO_PATH}/bin/cosmoc++" | |
cxx.include_paths = conf.cc.include_paths.dup | |
end | |
# Linker | |
conf.linker do |linker| | |
linker.command = "#{COSMO_PATH}/bin/cosmocc" | |
linker.library_paths = ["#{COSMO_PATH}/lib"] | |
end | |
# Ar | |
conf.archiver.command = "#{COSMO_PATH}/bin/cosmoar" | |
# All current core gems with ones with build issues commented out | |
conf.gembox "stdlib" | |
conf.gembox "stdlib-ext" | |
conf.gembox "stdlib-io" | |
# conf.gem 'mrbgems/mruby-array-ext/' | |
# conf.gem 'mrbgems/mruby-bigint/' | |
# conf.gem 'mrbgems/mruby-bin-config/' | |
# conf.gem 'mrbgems/mruby-bin-debugger/' | |
conf.gem 'mrbgems/mruby-bin-mirb/' | |
conf.gem 'mrbgems/mruby-bin-mrbc/' | |
# conf.gem 'mrbgems/mruby-bin-mruby/' | |
# conf.gem 'mrbgems/mruby-bin-strip/' | |
# conf.gem 'mrbgems/mruby-binding/' | |
# conf.gem 'mrbgems/mruby-catch/' | |
# conf.gem 'mrbgems/mruby-class-ext/' | |
# conf.gem 'mrbgems/mruby-cmath/' | |
# conf.gem 'mrbgems/mruby-compar-ext/' | |
conf.gem 'mrbgems/mruby-compiler/' | |
# conf.gem 'mrbgems/mruby-complex/' | |
# conf.gem 'mrbgems/mruby-data/' | |
#conf.gem 'mrbgems/mruby-dir/' | |
# conf.gem 'mrbgems/mruby-enum-chain/' | |
# conf.gem 'mrbgems/mruby-enum-ext/' | |
# conf.gem 'mrbgems/mruby-enum-lazy/' | |
#conf.gem 'mrbgems/mruby-enumerator/' | |
# conf.gem 'mrbgems/mruby-errno/' | |
# conf.gem 'mrbgems/mruby-error/' | |
# conf.gem 'mrbgems/mruby-eval/' | |
# conf.gem 'mrbgems/mruby-exit/' | |
# conf.gem 'mrbgems/mruby-fiber/' | |
# conf.gem 'mrbgems/mruby-hash-ext/' | |
#conf.gem 'mrbgems/mruby-io/' | |
# conf.gem 'mrbgems/mruby-kernel-ext/' | |
# conf.gem 'mrbgems/mruby-math/' | |
# conf.gem 'mrbgems/mruby-metaprog/' | |
# conf.gem 'mrbgems/mruby-method/' | |
# conf.gem 'mrbgems/mruby-numeric-ext/' | |
# conf.gem 'mrbgems/mruby-object-ext/' | |
# conf.gem 'mrbgems/mruby-objectspace/' | |
# conf.gem 'mrbgems/mruby-os-memsize/' | |
# conf.gem 'mrbgems/mruby-pack/' | |
conf.gem 'mrbgems/mruby-print/' | |
# conf.gem 'mrbgems/mruby-proc-binding/' | |
# conf.gem 'mrbgems/mruby-proc-ext/' | |
# conf.gem 'mrbgems/mruby-random/' | |
# conf.gem 'mrbgems/mruby-range-ext/' | |
# conf.gem 'mrbgems/mruby-rational/' | |
# conf.gem 'mrbgems/mruby-set/' | |
# conf.gem 'mrbgems/mruby-sleep/' | |
#conf.gem 'mrbgems/mruby-socket/' | |
# conf.gem 'mrbgems/mruby-sprintf/' | |
# conf.gem 'mrbgems/mruby-string-ext/' | |
# conf.gem 'mrbgems/mruby-struct/' | |
# conf.gem 'mrbgems/mruby-symbol-ext/' | |
# conf.gem 'mrbgems/mruby-test-inline-struct/' | |
conf.gem 'mrbgems/mruby-test/' | |
# conf.gem 'mrbgems/mruby-time/' | |
# conf.gem 'mrbgems/mruby-toplevel-ext/' | |
# Turn on `enable_debug` for better debugging | |
# conf.enable_debug | |
conf.enable_bintest | |
conf.enable_test | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment