From 3ceda03627469131ef92c9e8b0098d0c49adeaa4 Mon Sep 17 00:00:00 2001 From: Antranig Vartanian Date: Sun, 6 Dec 2015 21:38:43 +0400 Subject: [PATCH] changes AND makefile for OpenBSD -- antranigv --- makefile.openbsd.gcc.x86_64 | 309 ++++++++++++++++++ src/lib/ooc/openbsd/clang/x86_64/oocC.Mod | 71 ++++ src/lib/ooc2/openbsd/clang/oocwrapperlibc.Mod | 34 ++ 3 files changed, 414 insertions(+) create mode 100644 makefile.openbsd.gcc.x86_64 create mode 100644 src/lib/ooc/openbsd/clang/x86_64/oocC.Mod create mode 100644 src/lib/ooc2/openbsd/clang/oocwrapperlibc.Mod diff --git a/makefile.openbsd.gcc.x86_64 b/makefile.openbsd.gcc.x86_64 new file mode 100644 index 00000000..c44bc033 --- /dev/null +++ b/makefile.openbsd.gcc.x86_64 @@ -0,0 +1,309 @@ +#SHELL := /bin/bash +BUILDID=$(shell date +%Y/%m/%d) +TOS = openbsd +TARCH = x86_64 +#TARCH = x86 x86_64 armv6j armv6j_hardfp armv7a_hardfp powerpc +CCOMP = gcc +RELEASE = 1.1 + + +INCLUDEPATH = -Isrc/lib/system/$(TOS)/$(CCOMP)/$(TARCH) + +SETPATH = CFLAGS=$(INCLUDEPATH) PATH=.:/bin:/usr/bin MODULES=.:src/lib:src/lib/v4:src/lib/v4/$(TARCH):src/lib/v4_compat:src/lib/system/$(TOS)/$(CCOMP):src/lib/system/$(TOS)/$(CCOMP)/$(TARCH):src/lib/ulm:src/lib/ulm/$(TARCH):src/lib/ooc2:src/lib/ooc2/$(TOS)/$(CCOMP):src/lib/ooc:src/lib/ooc/$(TOS)/$(CCOMP)/$(TARCH):src/lib/pow:src/lib/misc:src/lib/s3:src/lib/s3/$(TARCH):src/voc:src/voc/$(TOS)/$(CCOMP):src/voc/$(TOS)/$(CCOMP)/$(TARCH):src/tools/ocat:src/tools/browser:src/tools/vocparam:src/tools/vmake:src/tools/coco:src/test + +VOC = voc +VERSION = $(TOS).$(CCOMP).$(TARCH) +VOCSTATIC0 = $(SETPATH) ./vocstatic.$(TOS).$(CCOMP).$(TARCH) +VOCSTATIC = $(SETPATH) ./voc +VOCPARAM = $(shell ./vocparam > voc.par) +LIBNAME = VishapOberon +LIBRARY = lib$(LIBNAME) + +ifndef PRF +PRF = "/opt" +endif +PREFIX = $(PRF)/voc-$(RELEASE) +PREFIXLN = $(PRF)/voc + +CCOPT = -fPIC $(INCLUDEPATH) -g +SHRLIBEXT = so +CC = $(CCOMP) $(CCOPT) -c +CL = $(CCOMP) $(CCOPT) +LD = $(CCOMP) -shared -o $(LIBRARY).$(SHRLIBEXT) +# s is necessary to create index inside a archive +ARCHIVE = ar rcs $(LIBRARY).a + +#%.c: %.Mod +#%.o: %.c +# $(CC) $(input) + +all: stage2 stage3 stage4 stage5 stage6 stage7 + +# when porting to new platform: +# * put corresponding .par file into current directory. it can be generated on the target platform by compiling vocparam (stage0) and running (stage1) +# * run make port0 - this will generate C source files for the target architecture +# * move the source tree to the target machine, and compile (or compile here via crosscompiler) (port1) +port0: stage2 stage3 stage4 + +# now compile C source files for voc, showdef and ocat on target machine (or by using crosscompiler) +port1: stage5 +# after you have "voc" compiled for target architecture. replace vocstatic with it and run make on target platform to get everything compiled + +# this builds binary which generates voc.par +stage0: src/tools/vocparam/vocparam.c + $(CL) -I src/lib/system/$(TOS)/$(CCOMP)/$(TARCH) -o vocparam src/tools/vocparam/vocparam.c + +# this creates voc.par for a host architecture. +# comment this out if you need to build a compiler for a different architecture. +stage1: + #rm voc.par + #$(shell "./vocparam > voc.par") + #./vocparam > voc.par + $(VOCPARAM) + +# this copies necessary voc.par to the current directory. +# skip this if you are building compiler for the host architecture. +stage2: + cp src/par/voc.par.$(CCOMP).$(TARCH) voc.par +# cp src/par/voc.par.gnu.x86_64 voc.par +# cp src/par/voc.par.gnu.x86 voc.par +# cp src/par/voc.par.gnu.armv6 voc.par +# cp src/par/voc.par.gnu.armv7 voc.par + cp src/voc/prf.Mod_default src/voc/prf.Mod + +# this prepares modules necessary to build the compiler itself +stage3: + + $(VOCSTATIC0) -siapxPS SYSTEM.Mod + $(VOCSTATIC0) -sPFS Args.Mod Console.Mod Unix.Mod + sed -i.tmp "s#/opt#$(PRF)#g" src/voc/prf.Mod + $(VOCSTATIC0) -sPFS prf.Mod + $(VOCSTATIC0) -sPFS Strings.Mod architecture.Mod version.Mod Kernel0.Mod Modules.Mod + $(VOCSTATIC0) -sxPFS Files0.Mod + $(VOCSTATIC0) -sPFS Reals.Mod Texts0.Mod + $(VOCSTATIC0) -sPFS vt100.Mod + +# build the compiler +stage4: + $(VOCSTATIC0) -sPFS errors.Mod + $(VOCSTATIC0) -sPFS extTools.Mod + $(VOCSTATIC0) -sPFS OPM.cmdln.Mod + $(VOCSTATIC0) -sxPFS OPS.Mod + $(VOCSTATIC0) -sPFS OPT.Mod OPC.Mod OPV.Mod OPB.Mod OPP.Mod + $(VOCSTATIC0) -smPS voc.Mod + $(VOCSTATIC0) -smPS BrowserCmd.Mod + $(VOCSTATIC0) -smPS OCatCmd.Mod + +#this is to build the compiler from C sources. +#this is a way to create a bootstrap binary. +stage5: + $(CC) SYSTEM.c Args.c Console.c Modules.c Unix.c \ + Strings.c architecture.c prf.c version.c Kernel0.c Files0.c Reals.c Texts0.c vt100.c \ + extTools.c \ + OPM.c OPS.c OPT.c OPC.c OPV.c OPB.c OPP.c errors.c + + $(CL) -static voc.c -o voc \ + SYSTEM.o Args.o Console.o Modules.o Unix.o \ + Strings.o architecture.o prf.o version.o Kernel0.o Files0.o Reals.o Texts0.o vt100.o \ + extTools.o \ + OPM.o OPS.o OPT.o OPC.o OPV.o OPB.o OPP.o errors.o + $(CL) BrowserCmd.c -o showdef \ + SYSTEM.o Args.o Console.o Modules.o Unix.o Strings.o architecture.o prf.o version.o Kernel0.o Files0.o Reals.o Texts0.o vt100.o \ + OPM.o OPS.o OPT.o OPV.o OPC.o errors.o + + $(CL) OCatCmd.c -o ocat \ + SYSTEM.o Args.o Console.o Modules.o Unix.o Strings.o architecture.o prf.o version.o Kernel0.o Files0.o Reals.o Texts0.o + +# build all library files +stage6: + #v4 libs + $(VOCSTATIC) -sPF Kernel.Mod + $(VOCSTATIC) -sPF Files.Mod + $(VOCSTATIC) -sPF Texts.Mod + $(VOCSTATIC) -sPF Printer.Mod + $(VOCSTATIC) -sPF Strings.Mod + $(VOCSTATIC) -sPF Sets.Mod + $(VOCSTATIC) -sPF Sets0.Mod + $(VOCSTATIC) -sPF Oberon.Mod + + #ooc libs + $(VOCSTATIC) -sPF oocAscii.Mod + $(VOCSTATIC) -sPF oocStrings.Mod + $(VOCSTATIC) -sPF oocStrings2.Mod + $(VOCSTATIC) -sPF oocOakStrings.Mod + $(VOCSTATIC) -sPF oocCharClass.Mod + $(VOCSTATIC) -sPF oocConvTypes.Mod + $(VOCSTATIC) -sPF oocIntConv.Mod + $(VOCSTATIC) -sPF oocIntStr.Mod + $(VOCSTATIC) -sPF oocSysClock.Mod + $(VOCSTATIC) -sPF oocTime.Mod + $(VOCSTATIC) -sPF oocRandomNumbers.Mod +# $(VOCSTATIC) -s oocLongStrings.Mod +# $(CC) oocLongStrings.c +# $(VOCSTATIC) -s oocMsg.Mod +# $(CC) oocMsg.c + + + #ooc2 libs + $(VOCSTATIC) -sPF ooc2Strings.Mod + $(VOCSTATIC) -sPF ooc2Ascii.Mod + $(VOCSTATIC) -sPF ooc2CharClass.Mod + $(VOCSTATIC) -sPF ooc2ConvTypes.Mod + $(VOCSTATIC) -sPF ooc2IntConv.Mod + $(VOCSTATIC) -sPF ooc2IntStr.Mod + $(VOCSTATIC) -sPF ooc2Real0.Mod + #ooc libs + $(VOCSTATIC) -sPF oocLowReal.Mod oocLowLReal.Mod + $(VOCSTATIC) -sPF oocRealMath.Mod oocOakMath.Mod + $(VOCSTATIC) -sPF oocLRealMath.Mod + $(VOCSTATIC) -sPF oocLongInts.Mod + $(VOCSTATIC) -sPF oocComplexMath.Mod oocLComplexMath.Mod + $(VOCSTATIC) -sPF oocLRealConv.Mod oocLRealStr.Mod + $(VOCSTATIC) -sPF oocRealConv.Mod oocRealStr.Mod + $(VOCSTATIC) -sPF oocMsg.Mod oocChannel.Mod + $(VOCSTATIC) -sPF oocStrings2.Mod oocRts.Mod oocFilenames.Mod + $(VOCSTATIC) -sPF oocTextRider.Mod oocBinaryRider.Mod oocJulianDay.Mod + $(VOCSTATIC) -sPF oocFilenames.Mod + $(VOCSTATIC) -sPF oocwrapperlibc.Mod + $(VOCSTATIC) -sPF oocC.Mod + + #Ulm's Oberon system libs + $(VOCSTATIC) -sPF ulmSys.Mod + $(VOCSTATIC) -sPF ulmSYSTEM.Mod + $(VOCSTATIC) -sPF ulmASCII.Mod + $(VOCSTATIC) -sPF ulmSets.Mod + $(VOCSTATIC) -sPF ulmObjects.Mod + $(VOCSTATIC) -sPF ulmDisciplines.Mod + $(VOCSTATIC) -sPF ulmPriorities.Mod + $(VOCSTATIC) -sPF ulmServices.Mod + $(VOCSTATIC) -sPF ulmEvents.Mod + $(VOCSTATIC) -sPF ulmResources.Mod + $(VOCSTATIC) -sPF ulmForwarders.Mod + $(VOCSTATIC) -sPF ulmRelatedEvents.Mod + $(VOCSTATIC) -sPF ulmIO.Mod + $(VOCSTATIC) -sPF ulmProcess.Mod + $(VOCSTATIC) -sPF ulmTypes.Mod + $(VOCSTATIC) -sPF ulmStreams.Mod + $(VOCSTATIC) -sPF ulmAssertions.Mod + $(VOCSTATIC) -sPF ulmIndirectDisciplines.Mod + $(VOCSTATIC) -sPF ulmStreamDisciplines.Mod + $(VOCSTATIC) -sPF ulmIEEE.Mod + $(VOCSTATIC) -sPF ulmMC68881.Mod + $(VOCSTATIC) -sPF ulmReals.Mod + $(VOCSTATIC) -sPF ulmPrint.Mod + $(VOCSTATIC) -sPF ulmWrite.Mod + $(VOCSTATIC) -sPF ulmTexts.Mod + $(VOCSTATIC) -sPF ulmStrings.Mod + $(VOCSTATIC) -sPF ulmConstStrings.Mod + $(VOCSTATIC) -sPF ulmPlotters.Mod + $(VOCSTATIC) -sPF ulmSysTypes.Mod + $(VOCSTATIC) -sPF ulmSysConversions.Mod + $(VOCSTATIC) -sPF ulmErrors.Mod + $(VOCSTATIC) -sPF ulmSysErrors.Mod + $(VOCSTATIC) -sPF ulmSysIO.Mod + $(VOCSTATIC) -sPF ulmLoader.Mod + $(VOCSTATIC) -sPF ulmNetIO.Mod + $(VOCSTATIC) -sPF ulmPersistentObjects.Mod + $(VOCSTATIC) -sPF ulmPersistentDisciplines.Mod + $(VOCSTATIC) -sPF ulmOperations.Mod + $(VOCSTATIC) -sPF ulmScales.Mod + $(VOCSTATIC) -sPF ulmTimes.Mod + $(VOCSTATIC) -sPF ulmClocks.Mod + $(VOCSTATIC) -sPF ulmTimers.Mod + $(VOCSTATIC) -sPF ulmConditions.Mod + $(VOCSTATIC) -sPF ulmStreamConditions.Mod + $(VOCSTATIC) -sPF ulmTimeConditions.Mod + $(VOCSTATIC) -sPF ulmSysConversions.Mod + $(VOCSTATIC) -sPF ulmSysStat.Mod + $(VOCSTATIC) -sPF ulmCiphers.Mod + $(VOCSTATIC) -sPF ulmCipherOps.Mod + $(VOCSTATIC) -sPF ulmBlockCiphers.Mod + $(VOCSTATIC) -sPF ulmAsymmetricCiphers.Mod + $(VOCSTATIC) -sPF ulmConclusions.Mod + $(VOCSTATIC) -sPF ulmRandomGenerators.Mod + $(VOCSTATIC) -sPF ulmTCrypt.Mod + $(VOCSTATIC) -sPF ulmIntOperations.Mod + + #pow32 libs + $(VOCSTATIC) -sPF powStrings.Mod + + #misc libs + $(VOCSTATIC) -sPF MultiArrays.Mod + $(VOCSTATIC) -sPF MultiArrayRiders.Mod + $(VOCSTATIC) -sPF MersenneTwister.Mod + $(VOCSTATIC) -sPF Listen.Mod + + #s3 libs + $(VOCSTATIC) -sPF ethBTrees.Mod + $(VOCSTATIC) -sPF ethMD5.Mod + $(VOCSTATIC) -sPF ethSets.Mod + $(VOCSTATIC) -sPF ethZlib.Mod + $(VOCSTATIC) -sPF ethZlibBuffers.Mod + $(VOCSTATIC) -sPF ethZlibInflate.Mod + $(VOCSTATIC) -sPF ethZlibDeflate.Mod + $(VOCSTATIC) -sPF ethZlibReaders.Mod + $(VOCSTATIC) -sPF ethZlibWriters.Mod + $(VOCSTATIC) -sPF ethZip.Mod + $(VOCSTATIC) -sPF ethRandomNumbers.Mod + $(VOCSTATIC) -sPF ethGZReaders.Mod + $(VOCSTATIC) -sPF ethGZWriters.Mod + $(VOCSTATIC) -sPF ethUnicode.Mod + $(VOCSTATIC) -sPF ethDates.Mod + $(VOCSTATIC) -sPF ethReals.Mod + $(VOCSTATIC) -sPF ethStrings.Mod + +# build remaining tools +# $(VOCSTATIC0) -sPFS compatIn.Mod +# $(VOCSTATIC0) -smPS vmake.Mod +# $(CC) compatIn.c +# $(CL) vmake.c -o vmake SYSTEM.o Args.o compatIn.o Texts.o Console.o Files.o Reals.o Modules.o Kernel.o Unix.o Strings.o oocIntStr.o oocConvTypes.o oocIntConv.o + + + +stage7: + #remove non library objects + rm -f Kernel0.o Files0.o Texts0.o architecture.o prf.o version.o extTools.o OPM.o OPS.o OPT.o OPC.o OPV.o OPB.o OPP.o errors.o + #objects := $(wildcard *.o) + #$(LD) objects + $(ARCHIVE) *.o + #$(ARCHIVE) objects + $(LD) *.o + echo "$(PREFIX)/lib" > 05vishap.conf + +clean: +# rm_objects := rm $(wildcard *.o) +# objects + rm *.h + rm *.c + rm *.sym + rm *.o + rm *.a + rm *.$(SHRLIBEXT) + +install: + test -d $(PREFIX)/bin | mkdir -p $(PREFIX)/bin + cp voc $(PREFIX)/bin/ + cp showdef $(PREFIX)/bin/ + cp ocat $(PREFIX)/bin/ + #cp vmake $(PREFIX)/bin/ + cp -RPp src $(PREFIX)/ + + test -d $(PREFIX)/lib/voc | mkdir -p $(PREFIX)/lib/voc + test -d $(PREFIX)/lib/voc/ | mkdir -p $(PREFIX)/lib/voc + test -d $(PREFIX)/lib/voc/obj | mkdir -p $(PREFIX)/lib/voc/obj + test -d $(PREFIX)/lib/voc/sym | mkdir -p $(PREFIX)/lib/voc/sym + + cp $(LIBRARY).$(SHRLIBEXT) $(PREFIX)/lib + cp $(LIBRARY).a $(PREFIX)/lib + cp *.c $(PREFIX)/lib/voc/obj/ + cp *.h $(PREFIX)/lib/voc/obj/ + cp *.sym $(PREFIX)/lib/voc/sym/ + + #cp 05vishap.conf /etc/ld.so.conf.d/ + ldconfig -m $(PREFIX)/lib + ln -s $(PREFIX) $(PREFIXLN) + +# cp *.o $(PREFIX)/lib/voc/$(RELEASE)/obj/ +uninstall: + rm -rf $(PREFIX) + rm -rf $(PREFIXLN) diff --git a/src/lib/ooc/openbsd/clang/x86_64/oocC.Mod b/src/lib/ooc/openbsd/clang/x86_64/oocC.Mod new file mode 100644 index 00000000..14638e75 --- /dev/null +++ b/src/lib/ooc/openbsd/clang/x86_64/oocC.Mod @@ -0,0 +1,71 @@ +(* $Id: C.Mod,v 1.9 1999/10/03 11:46:01 ooc-devel Exp $ *) +MODULE oocC; +(* Basic data types for interfacing to C code. + Copyright (C) 1997-1998 Michael van Acken + + This module is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + as published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This module is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with OOC. If not, write to the Free Software Foundation, + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*) + +IMPORT + SYSTEM; + +(* +These types are intended to be equivalent to their C counterparts. +They may vary depending on your system, but as long as you stick to a 32 Bit +Unix they should be fairly safe. +*) + +TYPE + char* = CHAR; + signedchar* = SHORTINT; (* signed char *) + shortint* = RECORD a,b : SYSTEM.BYTE END; (* 2 bytes on x64_64 *) (* short int *) + int* = INTEGER; + set* = INTEGER;(*SET;*) (* unsigned int, used as set *) + longint* = LONGINT; (* long int *) + longset* = SET; (*SYSTEM.SET64; *) (* unsigned long, used as set *) + address* = LONGINT; (*SYSTEM.ADDRESS;*) + float* = REAL; + double* = LONGREAL; + + enum1* = int; + enum2* = int; + enum4* = int; + + (* if your C compiler uses short enumerations, you'll have to replace the + declarations above with + enum1* = SHORTINT; + enum2* = INTEGER; + enum4* = LONGINT; + *) + + FILE* = address; (* this is acually a replacement for `FILE*', i.e., for a pointer type *) + sizet* = longint; + uidt* = int; + gidt* = int; + + +TYPE (* some commonly used C array types *) + charPtr1d* = POINTER TO ARRAY OF char; + charPtr2d* = POINTER TO ARRAY OF charPtr1d; + intPtr1d* = POINTER TO ARRAY OF int; + +TYPE (* C string type, assignment compatible with character arrays and + string constants *) + string* = POINTER (*[CSTRING]*) TO ARRAY OF char; + +TYPE + Proc* = PROCEDURE; + +END oocC. diff --git a/src/lib/ooc2/openbsd/clang/oocwrapperlibc.Mod b/src/lib/ooc2/openbsd/clang/oocwrapperlibc.Mod new file mode 100644 index 00000000..0d0cf9b6 --- /dev/null +++ b/src/lib/ooc2/openbsd/clang/oocwrapperlibc.Mod @@ -0,0 +1,34 @@ +MODULE oocwrapperlibc; +IMPORT SYSTEM; +PROCEDURE -includeStdio() + "#include "; + +PROCEDURE -sys(str: ARRAY OF CHAR): INTEGER + "system(str)"; + +PROCEDURE system*(cmd : ARRAY OF CHAR); +VAR r : INTEGER; +BEGIN +r := sys(cmd); +END system; +(* +PROCEDURE strtod* (string: C.address; + VAR tailptr: C.charPtr1d): C.double; +PROCEDURE strtof* (string: C.address; + VAR tailptr: C.charPtr1d): C.float; +PROCEDURE sscanf* (s: C.address; template: ARRAY OF CHAR; ...) : C.int; +*) + +PROCEDURE -sprntf(s, t0, t1, t2: ARRAY OF CHAR): INTEGER + "sprintf(s, t0, t1, t2)"; + +PROCEDURE sprintf* (VAR s: ARRAY OF CHAR; template0: ARRAY OF CHAR; template1: ARRAY OF CHAR; template2: ARRAY OF CHAR); +VAR r : INTEGER; +BEGIN + r := sprntf (s, template0, template1, template2); +END sprintf; + +BEGIN + + +END oocwrapperlibc.