mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-06 06:22:25 +00:00
Latter works for all systems, it's just more explicit. fixed problem in makefile (spaces instead of tabs, for old make command)
304 lines
9.8 KiB
Text
304 lines
9.8 KiB
Text
#SHELL := /bin/bash
|
|
BUILDID=$(shell date +%Y/%m/%d)
|
|
TOS = linux
|
|
TARCH = armv6j
|
|
#TARCH = x86 x86_64 armv6j armv6j_hardfp armv7a_hardfp powerpc
|
|
CCOMP = gcc
|
|
RELEASE = 1.0.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/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/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) -sPS Args.Mod Console.Mod Unix.Mod
|
|
sed -i.tmp "s#/opt#$(PRF)#g" src/voc/prf.Mod
|
|
$(VOCSTATIC0) -sPS prf.Mod
|
|
$(VOCSTATIC0) -sPS Strings.Mod architecture.Mod version.Mod Kernel0.Mod Modules.Mod
|
|
$(VOCSTATIC0) -sxPS Files0.Mod
|
|
$(VOCSTATIC0) -sPS Reals.Mod Texts0.Mod
|
|
$(VOCSTATIC0) -sPS vt100.Mod
|
|
|
|
# build the compiler
|
|
stage4:
|
|
$(VOCSTATIC0) -sPS errors.Mod
|
|
$(VOCSTATIC0) -sPS extTools.Mod
|
|
$(VOCSTATIC0) -sPS OPM.cmdln.Mod
|
|
$(VOCSTATIC0) -sxPS OPS.Mod
|
|
$(VOCSTATIC0) -sPS 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) -sP Kernel.Mod
|
|
$(VOCSTATIC) -sP Files.Mod
|
|
$(VOCSTATIC) -sP Texts.Mod
|
|
$(VOCSTATIC) -sP Printer.Mod
|
|
$(VOCSTATIC) -sP Strings.Mod
|
|
$(VOCSTATIC) -sP Sets.Mod
|
|
$(VOCSTATIC) -sP Sets0.Mod
|
|
|
|
#ooc libs
|
|
$(VOCSTATIC) -sP oocAscii.Mod
|
|
$(VOCSTATIC) -sP oocStrings.Mod
|
|
$(VOCSTATIC) -sP oocStrings2.Mod
|
|
$(VOCSTATIC) -sP oocOakStrings.Mod
|
|
$(VOCSTATIC) -sP oocCharClass.Mod
|
|
$(VOCSTATIC) -sP oocConvTypes.Mod
|
|
$(VOCSTATIC) -sP oocIntConv.Mod
|
|
$(VOCSTATIC) -sP oocIntStr.Mod
|
|
$(VOCSTATIC) -sP oocSysClock.Mod
|
|
$(VOCSTATIC) -sP oocTime.Mod
|
|
# $(VOCSTATIC) -s oocLongStrings.Mod
|
|
# $(CC) oocLongStrings.c
|
|
# $(VOCSTATIC) -s oocMsg.Mod
|
|
# $(CC) oocMsg.c
|
|
|
|
|
|
#ooc2 libs
|
|
$(VOCSTATIC) -sP ooc2Strings.Mod
|
|
$(VOCSTATIC) -sP ooc2Ascii.Mod
|
|
$(VOCSTATIC) -sP ooc2CharClass.Mod
|
|
$(VOCSTATIC) -sP ooc2ConvTypes.Mod
|
|
$(VOCSTATIC) -sP ooc2IntConv.Mod
|
|
$(VOCSTATIC) -sP ooc2IntStr.Mod
|
|
$(VOCSTATIC) -sP ooc2Real0.Mod
|
|
#ooc libs
|
|
$(VOCSTATIC) -sP oocLowReal.Mod oocLowLReal.Mod
|
|
$(VOCSTATIC) -sP oocRealMath.Mod oocOakMath.Mod
|
|
$(VOCSTATIC) -sP oocLRealMath.Mod
|
|
$(VOCSTATIC) -sP oocLongInts.Mod
|
|
$(VOCSTATIC) -sP oocComplexMath.Mod oocLComplexMath.Mod
|
|
$(VOCSTATIC) -sP oocLRealConv.Mod oocLRealStr.Mod
|
|
$(VOCSTATIC) -sP oocRealConv.Mod oocRealStr.Mod
|
|
$(VOCSTATIC) -sP oocMsg.Mod oocChannel.Mod
|
|
$(VOCSTATIC) -sP oocStrings2.Mod oocRts.Mod oocFilenames.Mod
|
|
$(VOCSTATIC) -sP oocTextRider.Mod oocBinaryRider.Mod oocJulianDay.Mod
|
|
$(VOCSTATIC) -sP oocFilenames.Mod
|
|
$(VOCSTATIC) -sP oocwrapperlibc.Mod
|
|
$(VOCSTATIC) -sP oocC.Mod
|
|
|
|
#Ulm's Oberon system libs
|
|
$(VOCSTATIC) -sP ulmSys.Mod
|
|
$(VOCSTATIC) -sP ulmSYSTEM.Mod
|
|
$(VOCSTATIC) -sP ulmASCII.Mod
|
|
$(VOCSTATIC) -sP ulmSets.Mod
|
|
$(VOCSTATIC) -sP ulmObjects.Mod
|
|
$(VOCSTATIC) -sP ulmDisciplines.Mod
|
|
$(VOCSTATIC) -sP ulmPriorities.Mod
|
|
$(VOCSTATIC) -sP ulmServices.Mod
|
|
$(VOCSTATIC) -sP ulmEvents.Mod
|
|
$(VOCSTATIC) -sP ulmResources.Mod
|
|
$(VOCSTATIC) -sP ulmForwarders.Mod
|
|
$(VOCSTATIC) -sP ulmRelatedEvents.Mod
|
|
$(VOCSTATIC) -sP ulmIO.Mod
|
|
$(VOCSTATIC) -sP ulmProcess.Mod
|
|
$(VOCSTATIC) -sP ulmTypes.Mod
|
|
$(VOCSTATIC) -sP ulmStreams.Mod
|
|
$(VOCSTATIC) -sP ulmAssertions.Mod
|
|
$(VOCSTATIC) -sP ulmIndirectDisciplines.Mod
|
|
$(VOCSTATIC) -sP ulmStreamDisciplines.Mod
|
|
$(VOCSTATIC) -sP ulmIEEE.Mod
|
|
$(VOCSTATIC) -sP ulmMC68881.Mod
|
|
$(VOCSTATIC) -sP ulmReals.Mod
|
|
$(VOCSTATIC) -sP ulmPrint.Mod
|
|
$(VOCSTATIC) -sP ulmWrite.Mod
|
|
$(VOCSTATIC) -sP ulmTexts.Mod
|
|
$(VOCSTATIC) -sP ulmStrings.Mod
|
|
$(VOCSTATIC) -sP ulmConstStrings.Mod
|
|
$(VOCSTATIC) -sP ulmPlotters.Mod
|
|
$(VOCSTATIC) -sP ulmSysTypes.Mod
|
|
$(VOCSTATIC) -sP ulmSysConversions.Mod
|
|
$(VOCSTATIC) -sP ulmErrors.Mod
|
|
$(VOCSTATIC) -sP ulmSysErrors.Mod
|
|
$(VOCSTATIC) -sP ulmSysIO.Mod
|
|
$(VOCSTATIC) -sP ulmLoader.Mod
|
|
$(VOCSTATIC) -sP ulmNetIO.Mod
|
|
$(VOCSTATIC) -sP ulmPersistentObjects.Mod
|
|
$(VOCSTATIC) -sP ulmPersistentDisciplines.Mod
|
|
$(VOCSTATIC) -sP ulmOperations.Mod
|
|
$(VOCSTATIC) -sP ulmScales.Mod
|
|
$(VOCSTATIC) -sP ulmTimes.Mod
|
|
$(VOCSTATIC) -sP ulmClocks.Mod
|
|
$(VOCSTATIC) -sP ulmTimers.Mod
|
|
$(VOCSTATIC) -sP ulmConditions.Mod
|
|
$(VOCSTATIC) -sP ulmStreamConditions.Mod
|
|
$(VOCSTATIC) -sP ulmTimeConditions.Mod
|
|
$(VOCSTATIC) -sP ulmSysConversions.Mod
|
|
$(VOCSTATIC) -sP ulmSysStat.Mod
|
|
$(VOCSTATIC) -sP ulmCiphers.Mod
|
|
$(VOCSTATIC) -sP ulmCipherOps.Mod
|
|
$(VOCSTATIC) -sP ulmBlockCiphers.Mod
|
|
$(VOCSTATIC) -sP ulmAsymmetricCiphers.Mod
|
|
$(VOCSTATIC) -sP ulmConclusions.Mod
|
|
$(VOCSTATIC) -sP ulmRandomGenerators.Mod
|
|
$(VOCSTATIC) -sP ulmTCrypt.Mod
|
|
$(VOCSTATIC) -sP ulmIntOperations.Mod
|
|
|
|
#pow32 libs
|
|
$(VOCSTATIC) -sP powStrings.Mod
|
|
|
|
#misc libs
|
|
$(VOCSTATIC) -sP MultiArrays.Mod
|
|
$(VOCSTATIC) -sP MultiArrayRiders.Mod
|
|
$(VOCSTATIC) -sP MersenneTwister.Mod
|
|
$(VOCSTATIC) -sP Listen.Mod
|
|
|
|
#s3 libs
|
|
$(VOCSTATIC) -sP ethBTrees.Mod
|
|
$(VOCSTATIC) -sP ethMD5.Mod
|
|
$(VOCSTATIC) -sP ethSets.Mod
|
|
$(VOCSTATIC) -sP ethZlib.Mod
|
|
$(VOCSTATIC) -sP ethZlibBuffers.Mod
|
|
$(VOCSTATIC) -sP ethZlibInflate.Mod
|
|
$(VOCSTATIC) -sP ethZlibDeflate.Mod
|
|
$(VOCSTATIC) -sP ethZlibReaders.Mod
|
|
$(VOCSTATIC) -sP ethZlibWriters.Mod
|
|
$(VOCSTATIC) -sP ethZip.Mod
|
|
$(VOCSTATIC) -sP ethRandomNumbers.Mod
|
|
$(VOCSTATIC) -sP ethGZReaders.Mod
|
|
$(VOCSTATIC) -sP ethGZWriters.Mod
|
|
$(VOCSTATIC) -sP ethUnicode.Mod
|
|
|
|
# build remaining tools
|
|
# $(VOCSTATIC0) -sPS 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 -a 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
|
|
ln -s $(PREFIX) $(PREFIXLN)
|
|
|
|
# cp *.o $(PREFIX)/lib/voc/$(RELEASE)/obj/
|
|
uninstall:
|
|
rm -rf $(PREFIX)
|
|
rm -rf $(PREFIXLN)
|