/cbc

Cb (C flat) compiler. Cb is simplified C.

Primary LanguageJava

CbC - Cflat Compiler (the ubuntu 64bit version)

The ubuntu 64-bit version of the cbc compiler implemented in the book "Homemade Compilers.". This project mainly solves the problem of unable to compile and run cbc on 64-bit machines.

Direct installation use (on ubuntu 64-bits systems)

Installation dependencies

Note: Different ubuntu distributions may rely on inconsistent library names. The code here is the installation command on ubuntu 16.04

apt-get update && apt-get install -y \
        gcc-multilib g++-multilib libc6-i386 lib32ncurses5 lib32stdc++6 \
        openjdk-8-jre \
        git

Download & Install cbc

git clone https://github.com/leungwensen/cbc-ubuntu-64bit.git
cd cbc-ubuntu-64bit && ./install.sh

Usage

Unlike the original cbc, the -Wa,"--32" -Wl,"-melf_i386" execution parameters need to be added to the 64-bit system.

cbc -Wa,"--32" -Wl,"-melf_i386" test/hello.cb
./hello
> Hello, World!

Use docker image (on any 64-bit host environment)

The general principle is to build an environment for cbc compilation and execution based on the 64-bit system of Ubuntu 16.04. Users only need to download the packaged image locally to get the executable cbc, eliminating the need to configure and compile cbc.

Install docker

Start the docker daemon process

eval $(docker-machine env default)

Download the mirror leungwensen/cbc-ubuntu-64bit

docker pull leungwensen/cbc-ubuntu-64bit

Perform mirroring

docker run -t -i leungwensen/cbc-ubuntu-64bit

Execute cbc

The cbc command in the image is an alias of cbc -Wa,--32 -Wl,-melf_i386 and can be executed directly.

cbc cbc-ubuntu-64bit/test/hello.cb

Original descrition

This is the CbC, Cflat programming language compiler.

Requirements

To compile cbc itself:

    * JDK 1.5 or later
    * JavaCC 4.0 or later
    * ant
    * make

To run cbc and compiled program:

    * Linux 2.4 or later
    * util-linux (ld-linux.so.2)
    * GNU libc 2.3 or later
    * GNU binutils (as, ld)

Installation

To install all files under /usr/local/cbc:

    # sudo ./install.sh
    # sudo ln -s ../cbc/bin/cbc /usr/local/bin/cbc

To install all files under $HOME/cbc:

    $ ./install.sh $HOME/cbc
    $ ln -s ../cbc/bin/cbc $HOME/bin/cbc

Build

Edit build.properties for your environment and invoke make:

    $ vi build.properties
    $ make

Test

Invoke "make test":

    $ make test

Note that you need bash (not bourne sh) to run test scripts.
ksh or zsh may work.

Usage

$ cbc --help

License

Modified BSD license.
For details of modified BSD license, see following:

Copyright (c) 2007-2009  Minero Aoki.  All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
      copyright notice, this list of conditions and the following
      disclaimer in the documentation and/or other materials provided
      with the distribution.
    * Neither the name of the Minero Aoki nor the names of its
      contributors may be used to endorse or promote products
      derived from this software without specific prior written
      permission.

THIS SOFTWARE IS PROVIDED BY MINERO AOKI ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Contact

CbC produced by Minero Aoki <aamine@loveruby.net>.