Skip to content

Instantly share code, notes, and snippets.

@rguiscard
Last active June 5, 2024 02:31
Show Gist options
  • Save rguiscard/da6a475b3983c9dc8e771d827e95d0b8 to your computer and use it in GitHub Desktop.
Save rguiscard/da6a475b3983c9dc8e771d827e95d0b8 to your computer and use it in GitHub Desktop.
Compile mruby with Cosmopolitan Libc
# 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;
}
# 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