Browse Source

Merge branch 'master' of github.com:synrc/mad

Namdak Tonpa 10 years ago
parent
commit
49040185a5
1 changed files with 106 additions and 5 deletions
  1. 106 5
      README.md

+ 106 - 5
README.md

@@ -1,7 +1,7 @@
 MAD
 MAD
 ===
 ===
 
 
-A simple rebar-compatible dependency manager.
+A simple rebar-compatible dependency manager and developer tool with plugins.
 
 
 ![MAD](http://synrc.com/lj/mad.png)
 ![MAD](http://synrc.com/lj/mad.png)
 
 
@@ -13,26 +13,123 @@ It shall:
 * be compatible with rebar configuration.
 * be compatible with rebar configuration.
 * be as small and fast as possible.
 * be as small and fast as possible.
 
 
+Features
+--------
+
+* Colorful REPL
+* Support rebar.config
+* Support OTP releases and directory structure
+* Fast deps resolving and cycles detecting
+* Fast compilation
+* DTL/YECC/LEEX/PORT/SCRIPT/APP/ERL compilation
+* BEAM bundles (single-file escriptized app)
+* LING bundles (single-file with built-in LING)
+* RELX release (relx dependency should be discarded)
+* Start/Stop/Attach
+* Static files generation with node.js tools
+* 9p server for remote access
+
 Build
 Build
 -----
 -----
 
 
+```sh
     $ make
     $ make
+```
 
 
-And put 'mad' to PATH.
+And put `mad` to PATH.
 
 
-Unikernel Bundle
-----------------
+BEAM Lightweight Unikernel Bundle
+---------------------------------
 
 
 Bundle is a gzipped archive of erlang beams of all dependecies
 Bundle is a gzipped archive of erlang beams of all dependecies
 along with directory structure of OTP-applications with priv directories.
 along with directory structure of OTP-applications with priv directories.
 This allows you to pack all site inside single portable escript package able
 This allows you to pack all site inside single portable escript package able
 to run under Windows, Linux and Mac. Releases includes all current
 to run under Windows, Linux and Mac. Releases includes all current
-directory exept sources both code and data with all dependencies.
+directory exept sources both code and data with all dependencies. You may think of BEAM 
+Lightweight Unikernel Bundle as of fixed Erlang releases.
 
 
+```sh
     $ mad app "sample"
     $ mad app "sample"
     $ cd sample
     $ cd sample
     $ mad deps compile plan bundle "web_app"
     $ mad deps compile plan bundle "web_app"
     $ ./web_app
     $ ./web_app
+```
+
+LING Unikernel
+--------------
+
+Sample rebar.config for your application you want to go unikernel:
+
+```erlang
+{deps_dir,"deps"}.
+{deps, [{ling, ".*", {git, "git://github.com/proger/ling", {tag, "osx-again"}}},
+        {sh, ".*",   {git, "git://github.com/synrc/sh",       {tag, "1.4"}}}]}.
+```
+
+Now you should build LING/posix:
+
+```sh
+    $ ./mad dep
+    $ cd deps/ling
+    $ ARCH=posix_x86 make
+```
+
+Now pack vmling.o, your OTP apps and rest static to single-file LING bundle with VM inside.
+
+```sh
+    $ ./mad lin
+Ling Params: []
+ARCH: posix_x86
+Bundle Name: mad
+System: [compiler,syntax_tools,sasl,tools,mnesia,reltool,xmerl,crypto,kernel,
+         stdlib,wx,webtool,ssl,runtime_tools,public_key,observer,inets,asn1,
+         et,eunit,hipe,os_mon]
+Apps: [kernel,stdlib,sh,mad]
+Overlay: ["crypto.beam","9p.beam","9p_auth.beam","9p_info.beam",
+          "9p_mounter.beam","9p_server.beam","9p_tcp.beam","9p_zero.beam",
+          "disk.beam","disk_server.beam","embedded_export.beam",
+          "goo_export.beam","goofs.beam","hipe_unified_loader.beam",
+          "inet_config.beam","kernel.beam","ling_bifs.beam","ling_code.beam",
+          "ling_disasm.beam","ling_iops.beam","ling_iopvars.beam",
+          "ling_lib.beam","net_vif.beam","os.beam","prim_file.beam",
+          "user_drv.beam","os_mon.beam","dets.beam","filename.beam",
+          "maps.beam","unicode.beam","zlib.beam"]
+Bucks: [{boot,"/boot",2},
+        {os_mon,"/erlang/lib/os_mon/ebin",1},
+        {crypto,"/erlang/lib/crypto/ebin",1},
+        {kernel,"/erlang/lib/kernel/ebin",90},
+        {stdlib,"/erlang/lib/stdlib/ebin",85},
+        {sh,"/erlang/lib/sh/ebin",6},
+        {mad,"/erlang/lib/mad/ebin",43}]
+Initializing EMBED.FS:
+Mount View:
+ /boot /boot
+/erlang/lib/os_mon/ebin /os_mon
+/erlang/lib/crypto/ebin /crypto
+/erlang/lib/kernel/ebin /kernel
+/erlang/lib/stdlib/ebin /stdlib
+/erlang/lib/sh/ebin /sh
+/erlang/lib/mad/ebin /mad
+Creating EMBED.FS C file: ...ok
+Compilation of Filesystem object: ...ok
+Linking Image: ok
+```
+
+Run it:
+
+```sh
+$ rlwrap ./image.img
+Erlang [ling-0.3.2]
+
+Eshell V6.3  (abort with ^G)
+1> application:which_applications().
+[{mad,"MAD VXZ Build Tool","2.2"},
+ {sh,"VXZ SH Executor","0.9"},
+ {stdlib,"ERTS  CXC 138 10","2.2"},
+ {kernel,"ERTS  CXC 138 10","3.0.3"}]
+```
+
+See details in [http://maxim.livejournal.com/458016.html](http://maxim.livejournal.com/458016.html) 
 
 
 Building OTP Release
 Building OTP Release
 --------------------
 --------------------
@@ -42,15 +139,19 @@ It has it own fat bootstripts along with erlang runtime included.
 This allows you to distribute you applications with copy deploy
 This allows you to distribute you applications with copy deploy
 without Erlang prerequisite.
 without Erlang prerequisite.
 
 
+```sh
     $ mad app sample
     $ mad app sample
     $ cd sample
     $ cd sample
     $ mad dep com pla release
     $ mad dep com pla release
     $ _rel/sample/bin/sample console
     $ _rel/sample/bin/sample console
+```
 
 
 Note: [relx](https://github.com/erlware/relx) must be installed
 Note: [relx](https://github.com/erlware/relx) must be installed
 LINUX NOTE: if you want to have online recompilation you should do at first:
 LINUX NOTE: if you want to have online recompilation you should do at first:
 
 
+```sh
     $ sudo apt-get install inotify-tools
     $ sudo apt-get install inotify-tools
+```
 
 
 Support
 Support
 -------
 -------