Vishap Oberon Compiler http://oberon.vishap.am
Find a file
norayr bac3c2cb49 apparently, openbsd bootstrap binary was not added to the git. (:
Former-commit-id: 02a909696d0d60377099e957f56fa7fb9e51cf4c
2016-01-16 01:09:32 +04:00
src apparently, openbsd bootstrap binary was not added to the git. (: 2016-01-16 01:09:32 +04:00
05vishap.conf apparently, openbsd bootstrap binary was not added to the git. (: 2016-01-16 01:09:32 +04:00
CHANGES.md updated changelog 2014-09-19 00:49:41 +04:00
CHANGES0.md updated changelog - CHANGES file. 2014-09-18 19:05:40 +04:00
COMPILE updated documentation. 2016-01-13 15:48:37 +04:00
FAQ.md updated faq about fedora issues; -- noch 2015-07-18 19:09:43 +04:00
gen_changelog.sh improved changelog generation script to fix the email address to possibly prevent spambots to identify an email address. 2014-09-18 19:14:06 +04:00
hints changed branding of git version to 1.1 2015-01-29 11:57:57 +04:00
LICENSE Initial commit 2013-09-27 08:55:16 -07:00
makefile moved Oberon.Mod to v4_compat directory. -- noch; 2015-07-01 15:52:22 +04:00
makefile.darwin.clang.x86_64 fixed default prefix in darwin makefile 2016-01-13 14:35:10 +04:00
makefile.freebsd.clang.x86_64 moved Oberon.Mod to v4_compat directory. -- noch; 2015-07-01 15:52:22 +04:00
makefile.linux.clang.powerpc moved Oberon.Mod to v4_compat directory. -- noch; 2015-07-01 15:52:22 +04:00
makefile.linux.clang.x86_64 moved Oberon.Mod to v4_compat directory. -- noch; 2015-07-01 15:52:22 +04:00
makefile.linux.gcc.armv6j_hardfp moved Oberon.Mod to v4_compat directory. -- noch; 2015-07-01 15:52:22 +04:00
makefile.linux.gcc.powerpc moved Oberon.Mod to v4_compat directory. -- noch; 2015-07-01 15:52:22 +04:00
makefile.linux.gcc.x86 moved Oberon.Mod to v4_compat directory. -- noch; 2015-07-01 15:52:22 +04:00
makefile.linux.gcc.x86_64 moved Oberon.Mod to v4_compat directory. -- noch; 2015-07-01 15:52:22 +04:00
makefile.openbsd.gcc.x86_64 fixed home path 2016-01-13 14:34:16 +04:00
quick_start voc compiler first commit 2013-09-27 22:34:17 +04:00
README.md yet another readme fix. 2016-01-15 13:55:40 +04:00
voc.spec changed branding of git version to 1.1 2015-01-29 11:57:57 +04:00
vocstatic.darwin.clang.x86_64.REMOVED.git-id SetJmp fixed on darwin; -- noch 2015-05-20 23:12:28 +08:00
vocstatic.freebsd.clang.x86_64.REMOVED.git-id freebsd binary update. -- noch 2015-05-20 17:07:31 +00:00
vocstatic.linux.clang.powerpc.REMOVED.git-id small changes in OPC and OPM, updated powerpc bootstrap binaries. -- noch 2015-02-02 21:14:50 +04:00
vocstatic.linux.clang.x86_64.REMOVED.git-id unified makefiles; updated linux clang x86_64 bootstrap binary. -- noch 2015-03-17 13:49:31 +04:00
vocstatic.linux.gcc.armv6j_hardfp.REMOVED.git-id it seems that jmp_buf has some 4 bytes long field at the end, which is not described in header file. see http://hastebin.com/conujujeyu.pl for reference. i have also checked offsets. 2015-05-08 07:09:56 +00:00
vocstatic.linux.gcc.powerpc.REMOVED.git-id powerpc bootstrap binary update -- noch 2015-03-19 16:25:02 +04:00
vocstatic.linux.gcc.x86.REMOVED.git-id updated x86 linux bootstrap binary. -- noch. 2015-03-17 13:31:14 +04:00
vocstatic.linux.gcc.x86_64.REMOVED.git-id argc is INTEGER on 64bit; fixed. -- noch 2015-11-20 14:53:41 +04:00
vocstatic.openbsd.gcc.x86_64.REMOVED.git-id apparently, openbsd bootstrap binary was not added to the git. (: 2016-01-16 01:09:32 +04:00

Vishap oberon compiler

ⱱishap Oberon Compiler (voc) is a free (GPLv3) professional oberon-2 compiler.

Platforms:

voc produces x86_64, x86, ppc, armv{4-7} binaries and works on those platforms. On x86_64 it supports 64bit LONGINT and 64bit SET types. By using currently stable C backend voc is relatively easy to port to any platform for which C compiler exists.

Operating Systems:

Currently GNU/Linux, Mac OS X, FreeBSD and OpenBSD sources (with bootstrap binaries) are published.

Ports to Solaris, AIX will be made and published in case there is an interest from community. voc should work on MS Windows/ReactOS via Cygwin/gcc, however we did not test it on Windows compatible machine.

Backends:

voc has stable C backend, which generates human readable and easily debuggable C code. Generated C code is fairly efficient and does not cause a noticeable overhead. voc was used to generate code even for low end 8 bit devices like nmos6502 and AVR micros.

Work on native backends for arm and x86_64 is in progress.

Libraries:

voc comes with a useful set of libraries, in particular: Oberon V4 and S3 compatible library set. ooc (optimizing oberon-2 compiler) library port. Ulms Oberon system library port.

This makes it easier to compile/port software which was developed by using those compilers.

Work on other compatibility layers is in progress. voc team also works on bindings to existing C/Pascal libraries.

Some other freely redistributable libraries are available as a part of voc distribution.

Licensing:

vocs frontend and C backend engine is a fork of Josef Templs Ofront, which has been released under FreeBSD License. Unlike Ofront, it does not include Oberon v4 environment. Ulm Oberon Library is distributed under GPL. ooc library is distributed under GPL.

voc tools are distributed under GPLv3. most of the runtime in libVishapOberon is distributed under GPLv3 with runtime exception. ulm and ooc libraries were distributed under GPL, thus static linking to those modules from libVishapOberon.a to proprietary code is disallowed.

Naming:

Vishaps are dragons inhabited in Armenian Highlands. We decided to name the project “Vishap” because ties between compilers and dragons have ancient traditions.

Also, Vishaps are known in tales, fiction. This page refers to some technologies as “computer science fiction”. Among them to Oberon. This brings another meaning, Oberon is like aliens, ghosts. And Vishaps.

How to use

First you need to build it.

As it is stated in COMPILE page, voc is installed in /opt/voc/bin if you did not change the prefix. So, in order to run voc you need to type

/opt/voc/bin/voc

or add /opt/voc/bin to you PATH environment variable, and then just typing voc will execute it. For that you have to know how to work in Unix shell, and this knowledge is out of the scope of this document.

Type voc and it'll show you help.

Simple example

Let's write hello world file:

$ cat hey.Mod

MODULE hey;

IMPORT Console;

BEGIN

Console.String("hey there"); Console.Ln

END hey.

voc -M hey.Mod

will compile your module and link it statically to libVishapOberon.

voc -m hey.Mod

will link the module dynamically.

Example with two modules

If you have more than one module, and you want them to be compiled in to elf file then: Let's assume we have module M0 which imports M1;

voc -l M1.Mod -s M0.Mod -M

Here -l is a global option. Module M1 will be compiled with -s option, i. e. sym file will be generated.

Module M0 will be compiled and linked statically.

Example with many modules

In case you have modules in different directories, like "ui", "logic", "math", then you need to export MODULES environment variable like this:

export MODULES=".:ui:logic:math"

and after call voc

voc -s ui0.Mod

Otherwise you can use full path:

voc -s ui/ui0.Mod