Git Product home page Git Product logo

blissc's Introduction

README for the BLISS-M Compiler

This is the source package for the BLISS-M compiler, a portable cross-compiler for the BLISS programming language.

What is BLISS?

The BLISS language was developed at Carnegie-Mellon University in the 1970's for systems programming. It was adopted and used extensively by Digital Equipment Corporation for development of systems software across their 16-bit, 32-bit, 36-bit, and 64-bit systems. It is a typeless, block-structured, language with an extensive lexical processing (macro) facility. See the Wikipedia article on BLISS for more information about the language.

Current Status

Work in progress. The front-end is mostly complete, with a fully functioning parser and macro facility. Back-end support is currently limited to LLVM and x86 CPUs (32- or 64-bit), with a limited amount of machine-specific support.

Prerequisites

  • Recent-vintage C compiler
  • Recent version LLVM
  • CMake 3.13 or later, or a recent version of autotools

Recent development and testing has been on Ubuntu 22.04 with gcc 11 and LLVM 12.0.

Building the compiler

First, clone the repository.

Using Autotools

  1. cd to the top-level source directory and run autoreconf -i.
  2. If you want to build outside the source tree, cd to your build directory.
  3. Run the configure script that was generated in step 2. If llvm-config is not in your PATH, use the --with-llvm-config option on configure to specify its location.
  4. Run make to build the compiler.
  5. Run make check to test the built compiler.

Using CMake

  1. Create a directory for the build.
  2. Run cmake <path-to-sources> to generate the build files. CMake will attempt to locate a usable copy of LLVM automatically, but you can specify -DLLVM_CONFIG= to force it to use a particular installation of LLVM.
  3. Run make to build the compiler.

Running the compiler

The build will produce a program called blissc in your build directory. Run ./blissc --help for a description of the arguments and options.

License

All sources are released under the BSD 2-clause license. See the LICENSE.TXT file for the license text.

blissc's People

Contributors

madisongh avatar jleightcap avatar sergev avatar

Stargazers

Abhinav kumar avatar  avatar Nate avatar Mtv Europe avatar Serge avatar Derrell Piper avatar Schwäbisches Bauernbrot avatar Jeffrey H. Johnson avatar Backwoods Bob avatar Estevan Castilho avatar William Cox avatar White avatar Timothy Stark avatar C. Paul Bond avatar Benjamin Cline avatar  avatar Chris Pressey avatar Valentin Plotkin avatar Paul G avatar Noah Evans avatar Stephen W. avatar  avatar  avatar Brian Callahan avatar Konstantinos avatar  avatar Jeheon Yu avatar DiGiTAL_CuRSe avatar  avatar yc avatar Tim E. Sneddon avatar Ruslan R. Laishev avatar scvalencia avatar Mako avatar Stanislav Yaglo avatar Julian Squires avatar

Watchers

Tim E. Sneddon avatar Stanislav Yaglo avatar James Cloos avatar  avatar sts-q avatar Ruslan R. Laishev avatar Makoto Shimojima avatar  avatar

blissc's Issues

REF auto-fetch

Need to get a definitive answer on whether the automatic fetch of REF names is supposed to be done even in the absence of a structure reference.

For example

ROUTINE x (param : REF VECTOR) =
BEGIN
LOCAL y;
y = .param;
END;

Does 'y' get the address of the first element of the vector, or the contents?

Unable to Make

I'm having some trouble making bliss. I have LLVM 3.9 and unfortunately can't remove it to install llvm35 due to it being a dependency for other applications. I'm not sure if this is the reason why. I have llvm-config on my path. (arch linux (Antergos)

make
Making all in tests
make[1]: Entering directory '/home/drifter/dev/blissc'
  CCLD     blissc
libllvmgen.a(libllvmgen_a-llvm_machines.o): In function `machine_init':
/home/drifter/dev/blissc/lib/llvmgen/llvm_machines.c:54: undefined reference to `LLVM_NATIVE_ASMPARSER'
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:735: blissc] Error 1
make[1]: Leaving directory '/home/drifter/dev/blissc'
make: *** [Makefile:948: all-recursive] Error 1
[drifter@drifterpc blissc]$ 

Main routine not recognized

On OS X systems, specifying a main routine with the MAIN= switch on a MODULE declaration has no effect. Instead, you have to specify the main entry point when linking the object.

This may also be true on ELF systems; need to check.

Possible heap corruption

On Ubuntu 12.10 i386, compilation of the controlexp.bli and structures.bli test sources produce reports from glibc of 'invalid next size(fast):...'.

Fail on make test

The compiler seems to build ok, but fails on tests:

make check
Making check in tests
make[1]: Entering directory '/home/drifter/dev/blissc/tests'
../blissc --library -o testharness.lib ../tests/testharness.req
python "../tests/runtests.py" --blissc="../blissc" --cc="cc" "../tests"
  File "../tests/runtests.py", line 29
    **print "Processing: {}".format(testfile)
                         ^
SyntaxError: invalid syntax**
make[1]: *** [Makefile:17: check] Error 1
make[1]: Leaving directory '/home/drifter/dev/blissc/tests'
make: *** [Makefile:948: check-recursive] Error 1

BINDs to structures may be incorrect

Example:

OWN
vec : VECTOR [4,LONG];

BIND
firstlong = vec : LONG;
...
x = .firstlong;

'x' ends up with the address of 'vec', rather than the contents.

Field handling

Field stores involving bit shifting are using fullword stores when the target data segment may not be a fullword in size.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.