commit f9b969050f35a80ae8bfe75578d44fb98edcf4f3 Author: Syed Daanish Date: Mon Jul 27 06:13:37 2026 +0100 Initial commit diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..bc63420 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,16 @@ +[submodule "libs/mgems/mruby-marshal-c"] + path = libs/mgems/mruby-marshal-c + url = https://github.com/LanzaSchneider/mruby-marshal-c.git + ignore = dirty +[submodule "libs/mgems/mruby-env"] + path = libs/mgems/mruby-env + url = https://github.com/iij/mruby-env.git + ignore = dirty +[submodule "libs/mgems/mruby-process"] + path = libs/mgems/mruby-process + url = https://github.com/katzer/mruby-process + ignore = dirty +[submodule "libs/mruby"] + path = libs/mruby + url = https://github.com/mruby/mruby.git + ignore = dirty diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..c06115a --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1785090369, + "narHash": "sha256-m0pDuRJG7EDo9ri+4Ksu83VsI+PlxNC9lNBfydejce4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "624af665418d3c65d544145b4d34ad696439570e", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..281c2a5 --- /dev/null +++ b/flake.nix @@ -0,0 +1,117 @@ +{ + description = "Crib - An IDE."; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + self.submodules = true; + }; + + outputs = + { nixpkgs, ... }: + let + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}.pkgsStatic; + hostPkgs = nixpkgs.legacyPackages.${system}; + + mruby = pkgs.stdenv.mkDerivation { + pname = "mruby"; + version = "0.0.1"; + + src = pkgs.lib.cleanSourceWith { + src = ./libs; + name = "mruby-src"; + }; + + patches = [ + ./libs/changes.patch + ]; + + nativeBuildInputs = with hostPkgs; [ + ruby + gnumake + ]; + + buildPhase = '' + cd mruby + rake + ''; + + installPhase = '' + mkdir -p $out + + cp -r build/host/lib $out/lib + cp -r build/host/include $out/include + + mkdir -p $out/bin + cp build/host/bin/mrbc $out/bin/mrbc + ''; + }; + + crib = pkgs.stdenv.mkDerivation { + pname = "crib"; + version = "0.1.0"; + + src = ./.; + + nativeBuildInputs = with hostPkgs; [ + pkg-config + gnumake + xxd + bash + ]; + + buildInputs = with pkgs; [ + libgrapheme + + mruby + ]; + + buildPhase = '' + make \ + MRBC=${mruby}/bin/mrbc \ + MRUBY_INCLUDE=${mruby}/include \ + MRUBY_LIB=${mruby}/lib/libmruby.a + ''; + + installPhase = '' + mkdir -p $out/bin + cp bin/crib $out/bin/crib + ''; + }; + in + { + packages.${system} = { + default = crib; + crib = crib; + mruby = mruby; + }; + + devShells.${system}.default = pkgs.mkShell { + inputsFrom = [ crib ]; + + packages = [ + hostPkgs.clang-tools + hostPkgs.pkg-config + hostPkgs.ccache + hostPkgs.gnumake + hostPkgs.bear + hostPkgs.ruby + hostPkgs.xxd + hostPkgs.gdb + hostPkgs.binutils + + pkgs.libgrapheme + pkgs.pcre2 + ]; + + shellHook = '' + export CC="ccache gcc" + export CXX="ccache g++" + + export MRBC=${mruby}/bin/mrbc + export MRUBY_INCLUDE=${mruby}/include + export MRUBY_LIB=${mruby}/lib/libmruby.a + ''; + }; + }; +} diff --git a/libs/changes.patch b/libs/changes.patch new file mode 100644 index 0000000..eb23bdb --- /dev/null +++ b/libs/changes.patch @@ -0,0 +1,53 @@ +--- ./mruby/build_config/default.rb ++++ ./mruby/build_config/default.rb +@@ -1,6 +1,18 @@ + MRuby::Build.new do |conf| + # load specific toolchain settings +- conf.toolchain ++ conf.toolchain :gcc ++ ++ conf.cc do |cc| ++ cc.command = ENV['CC'] ++ end ++ ++ conf.cxx do |cxx| ++ cxx.command = ENV['CXX'] ++ end ++ ++ conf.linker do |linker| ++ linker.command = ENV['CXX'] ++ end + + # Use mrbgems + # conf.gem 'examples/mrbgems/ruby_extension_example' +@@ -16,6 +28,10 @@ + # include the GEM box + conf.gembox 'default' + ++ conf.gem '../mgems/mruby-env' ++ conf.gem '../mgems/mruby-process' ++ conf.gem '../mgems/mruby-marshal-c' ++ + # C compiler settings + # conf.cc do |cc| + # cc.command = ENV['CC'] || 'gcc' +@@ -79,5 +79,5 @@ + # Turn on `enable_debug` for better debugging + # conf.enable_debug +- conf.enable_bintest +- conf.enable_test ++ # conf.enable_bintest ++ # conf.enable_test + end +--- ./mgems/mruby-process/mrbgem.rake ++++ ./mgems/mruby-process/mrbgem.rake +@@ -54,4 +54,9 @@ + else + spec.objs.delete objfile("#{build_dir}/src/win32") + end ++ ++ spec.objs.delete objfile("#{build_dir}/src/internal") ++ spec.objs.delete objfile("#{build_dir}/src/dln") ++ spec.objs.delete objfile("#{build_dir}/src/signal") ++ spec.objs.delete objfile("#{build_dir}/src/status") + end diff --git a/libs/mgems/mruby-env b/libs/mgems/mruby-env new file mode 160000 index 0000000..056ae32 --- /dev/null +++ b/libs/mgems/mruby-env @@ -0,0 +1 @@ +Subproject commit 056ae324451ef16a50c7887e117f0ea30921b71b diff --git a/libs/mgems/mruby-marshal-c b/libs/mgems/mruby-marshal-c new file mode 160000 index 0000000..fc40e2e --- /dev/null +++ b/libs/mgems/mruby-marshal-c @@ -0,0 +1 @@ +Subproject commit fc40e2ec0f3647db3a5ebf38c46754fe697cceb4 diff --git a/libs/mgems/mruby-process b/libs/mgems/mruby-process new file mode 160000 index 0000000..715014b --- /dev/null +++ b/libs/mgems/mruby-process @@ -0,0 +1 @@ +Subproject commit 715014b1d9334ad6ff6fa3c55b87957ad1a6363a diff --git a/libs/mruby b/libs/mruby new file mode 160000 index 0000000..8ab5fc9 --- /dev/null +++ b/libs/mruby @@ -0,0 +1 @@ +Subproject commit 8ab5fc96d0121a8d187ab6d36cb2a1e102291cc3