export LD_LIBRARY_PATH = ../lib/
CC = gcc
ECP = ../bootstrap/bin/ecp
ECC = ../bootstrap/bin/ecc
ECS = ../bootstrap/bin/ecs
ECFLAGS =
CFLAGS = -fmessage-length=0 -O2 -ffast-math -fvisibility=hidden -w -fPIC -DYYTOKENTYPE -I../bootstrap/include
_CFLAGS = -fmessage-length=0 -O2 -ffast-math -w
OFLAGS = -L../ecere/release
LIBS = -lecere -shared
OBJECTS = \
	release/ast.o release/copy.o release/dbpass.o release/ecdefs.o release/expression.o \
	release/firstPass.o release/freeAst.o release/grammar.o release/lexer.o release/loadSymbols.o \
	release/output.o release/pass0.o release/pass1.o release/pass15.o release/pass16.o release/pass2.o \
	release/pass3.o release/shortcuts.o release/type.o release/ec.main.o release/bsl.o

COBJECTS = \
	release/ast.c release/copy.c release/dbpass.c release/ecdefs.c \
	release/firstPass.c release/freeAst.c release/lexer.c release/loadSymbols.c \
	release/output.c release/pass0.c release/pass1.c release/pass15.c release/pass16.c release/pass2.c \
	release/pass3.c release/shortcuts.c 

SYMBOLS = \
	release/ast.sym release/copy.sym release/dbpass.sym release/ecdefs.sym release/expression.sym \
	release/firstPass.sym release/freeAst.sym release/grammar.sym release/lexer.sym \
	release/loadSymbols.sym release/output.sym release/pass0.sym release/pass1.sym \
	release/pass15.sym release/pass16.sym release/pass2.sym release/pass3.sym \
	release/shortcuts.sym release/type.sym 

IMPORTS = \
	release/ast.imp release/copy.imp release/dbpass.imp release/ecdefs.imp release/expression.imp \
	release/firstPass.imp release/freeAst.imp release/grammar.imp release/lexer.imp \
	release/loadSymbols.imp release/output.imp release/pass0.imp release/pass1.imp \
	release/pass15.imp release/pass16.imp release/pass2.imp release/pass3.imp \
	release/shortcuts.imp release/type.imp 

RESOURCES = \
	

all: release/libec.so

release/ec.main.ec: $(SYMBOLS) $(COBJECTS) release/expression.c release/grammar.c release/type.c
	$(ECS) -dynamiclib $(SYMBOLS) $(IMPORTS) -symbols release -o release/ec.main.ec

release/ec.main.c: release/ec.main.ec
	$(ECP) $(ECFLAGS) $(CFLAGS) -c release/ec.main.ec -o release/ec.main.sym -symbols release
	$(ECC) $(ECFLAGS) $(CFLAGS) -c release/ec.main.ec -o release/ec.main.c -symbols release

release/libec.so:  $(SYMBOLS) $(OBJECTS) $(RESOURCES)
	$(CC) $(OFLAGS) $(OBJECTS) $(LIBS) -o release/libec.so
	strip release/libec.so
	cp release/libec.so ../lib/

# SYMBOL RULES

release/ast.sym: src/ast.ec
	$(ECP) $(ECFLAGS) $(CFLAGS) -c src/ast.ec -o release/ast.sym

release/copy.sym: src/copy.ec
	$(ECP) $(ECFLAGS) $(CFLAGS) -c src/copy.ec -o release/copy.sym

release/dbpass.sym: src/dbpass.ec
	$(ECP) $(ECFLAGS) $(CFLAGS) -c src/dbpass.ec -o release/dbpass.sym

release/ecdefs.sym: src/ecdefs.ec
	$(ECP) $(ECFLAGS) $(CFLAGS) -c src/ecdefs.ec -o release/ecdefs.sym

release/expression.sym: src/expression.ec
	$(ECP) $(ECFLAGS) $(CFLAGS) -c src/expression.ec -o release/expression.sym

release/firstPass.sym: src/firstPass.ec
	$(ECP) $(ECFLAGS) $(CFLAGS) -c src/firstPass.ec -o release/firstPass.sym

release/freeAst.sym: src/freeAst.ec
	$(ECP) $(ECFLAGS) $(CFLAGS) -c src/freeAst.ec -o release/freeAst.sym

release/grammar.sym: src/grammar.ec
	$(ECP) $(ECFLAGS) $(CFLAGS) -c src/grammar.ec -o release/grammar.sym

release/lexer.sym: src/lexer.ec
	$(ECP) $(ECFLAGS) $(CFLAGS) -c src/lexer.ec -o release/lexer.sym

release/loadSymbols.sym: src/loadSymbols.ec
	$(ECP) $(ECFLAGS) $(CFLAGS) -c src/loadSymbols.ec -o release/loadSymbols.sym

release/output.sym: src/output.ec
	$(ECP) $(ECFLAGS) $(CFLAGS) -c src/output.ec -o release/output.sym

release/pass0.sym: src/pass0.ec
	$(ECP) $(ECFLAGS) $(CFLAGS) -c src/pass0.ec -o release/pass0.sym

release/pass1.sym: src/pass1.ec
	$(ECP) $(ECFLAGS) $(CFLAGS) -c src/pass1.ec -o release/pass1.sym

release/pass15.sym: src/pass15.ec
	$(ECP) $(ECFLAGS) $(CFLAGS) -c src/pass15.ec -o release/pass15.sym

release/pass16.sym: src/pass16.ec
	$(ECP) $(ECFLAGS) $(CFLAGS) -c src/pass16.ec -o release/pass16.sym

release/pass2.sym: src/pass2.ec
	$(ECP) $(ECFLAGS) $(CFLAGS) -c src/pass2.ec -o release/pass2.sym

release/pass3.sym: src/pass3.ec
	$(ECP) $(ECFLAGS) $(CFLAGS) -c src/pass3.ec -o release/pass3.sym

release/shortcuts.sym: src/shortcuts.ec
	$(ECP) $(ECFLAGS) $(CFLAGS) -c src/shortcuts.ec -o release/shortcuts.sym

release/type.sym: src/type.ec
	$(ECP) $(ECFLAGS) $(CFLAGS) -c src/type.ec -o release/type.sym

# C OBJECT RULES

release/ast.c: src/ast.ec release/ast.sym | $(SYMBOLS)
	$(ECC) $(ECFLAGS) $(CFLAGS) -c src/ast.ec -o release/ast.c -symbols release

release/copy.c: src/copy.ec release/copy.sym | $(SYMBOLS)
	$(ECC) $(ECFLAGS) $(CFLAGS) -c src/copy.ec -o release/copy.c -symbols release

release/dbpass.c: src/dbpass.ec release/dbpass.sym | $(SYMBOLS)
	$(ECC) $(ECFLAGS) $(CFLAGS) -c src/dbpass.ec -o release/dbpass.c -symbols release

release/ecdefs.c: src/ecdefs.ec release/ecdefs.sym | $(SYMBOLS)
	$(ECC) $(ECFLAGS) $(CFLAGS) -c src/ecdefs.ec -o release/ecdefs.c -symbols release

release/expression.c: src/expression.ec | $(SYMBOLS)
	$(ECC) $(ECFLAGS) $(CFLAGS) -nolinenumbers -c src/expression.ec -o release/expression.c -symbols release

release/firstPass.c: src/firstPass.ec release/firstPass.sym | $(SYMBOLS)
	$(ECC) $(ECFLAGS) $(CFLAGS) -c src/firstPass.ec -o release/firstPass.c -symbols release

release/freeAst.c: src/freeAst.ec release/freeAst.sym | $(SYMBOLS)
	$(ECC) $(ECFLAGS) $(CFLAGS) -c src/freeAst.ec -o release/freeAst.c -symbols release

release/grammar.c: src/grammar.ec | $(SYMBOLS)
	$(ECC) $(ECFLAGS) $(CFLAGS) -nolinenumbers -c src/grammar.ec -o release/grammar.c -symbols release

release/lexer.c: src/lexer.ec release/lexer.sym | $(SYMBOLS)
	$(ECC) $(ECFLAGS) $(CFLAGS) -c src/lexer.ec -o release/lexer.c -symbols release

release/loadSymbols.c: src/loadSymbols.ec release/loadSymbols.sym | $(SYMBOLS)
	$(ECC) $(ECFLAGS) $(CFLAGS) -c src/loadSymbols.ec -o release/loadSymbols.c -symbols release

release/output.c: src/output.ec release/output.sym | $(SYMBOLS)
	$(ECC) $(ECFLAGS) $(CFLAGS) -c src/output.ec -o release/output.c -symbols release

release/pass0.c: src/pass0.ec release/pass0.sym | $(SYMBOLS)
	$(ECC) $(ECFLAGS) $(CFLAGS) -c src/pass0.ec -o release/pass0.c -symbols release

release/pass1.c: src/pass1.ec release/pass1.sym | $(SYMBOLS)
	$(ECC) $(ECFLAGS) $(CFLAGS) -c src/pass1.ec -o release/pass1.c -symbols release

release/pass15.c: src/pass15.ec release/pass15.sym | $(SYMBOLS)
	$(ECC) $(ECFLAGS) $(CFLAGS) -c src/pass15.ec -o release/pass15.c -symbols release

release/pass16.c: src/pass16.ec release/pass16.sym | $(SYMBOLS)
	$(ECC) $(ECFLAGS) $(CFLAGS) -c src/pass16.ec -o release/pass16.c -symbols release

release/pass2.c: src/pass2.ec release/pass2.sym | $(SYMBOLS)
	$(ECC) $(ECFLAGS) $(CFLAGS) -c src/pass2.ec -o release/pass2.c -symbols release

release/pass3.c: src/pass3.ec release/pass3.sym | $(SYMBOLS)
	$(ECC) $(ECFLAGS) $(CFLAGS) -c src/pass3.ec -o release/pass3.c -symbols release

release/shortcuts.c: src/shortcuts.ec release/shortcuts.sym | $(SYMBOLS)
	$(ECC) $(ECFLAGS) $(CFLAGS) -c src/shortcuts.ec -o release/shortcuts.c -symbols release

release/type.c: src/type.ec | $(SYMBOLS)
	$(ECC) $(ECFLAGS) $(CFLAGS) -nolinenumbers -c src/type.ec -o release/type.c -symbols release

# OBJECT RULES

release/bsl.o: ../bootstrap/bsl.c
	$(CC) $(_CFLAGS) -c ../bootstrap/bsl.c -o release/bsl.o

release/ast.o: release/ast.c
	$(CC) $(CFLAGS) -c release/ast.c -o release/ast.o

release/copy.o: release/copy.c
	$(CC) $(CFLAGS) -c release/copy.c -o release/copy.o

release/dbpass.o: release/dbpass.c
	$(CC) $(CFLAGS) -c release/dbpass.c -o release/dbpass.o

release/ecdefs.o: release/ecdefs.c
	$(CC) $(CFLAGS) -c release/ecdefs.c -o release/ecdefs.o

release/expression.o: release/expression.c
	$(CC) $(CFLAGS) -c release/expression.c -o release/expression.o

release/firstPass.o: release/firstPass.c
	$(CC) $(CFLAGS) -c release/firstPass.c -o release/firstPass.o

release/freeAst.o: release/freeAst.c
	$(CC) $(CFLAGS) -c release/freeAst.c -o release/freeAst.o

release/grammar.o: release/grammar.c
	$(CC) $(CFLAGS) -c release/grammar.c -o release/grammar.o

release/lexer.o: release/lexer.c
	$(CC) $(CFLAGS) -c release/lexer.c -o release/lexer.o

release/loadSymbols.o: release/loadSymbols.c
	$(CC) $(CFLAGS) -c release/loadSymbols.c -o release/loadSymbols.o

release/output.o: release/output.c
	$(CC) $(CFLAGS) -c release/output.c -o release/output.o

release/pass0.o: release/pass0.c
	$(CC) $(CFLAGS) -c release/pass0.c -o release/pass0.o

release/pass1.o: release/pass1.c
	$(CC) $(CFLAGS) -c release/pass1.c -o release/pass1.o

release/pass15.o: release/pass15.c
	$(CC) $(CFLAGS) -c release/pass15.c -o release/pass15.o

release/pass16.o: release/pass16.c
	$(CC) $(CFLAGS) -c release/pass16.c -o release/pass16.o

release/pass2.o: release/pass2.c
	$(CC) $(CFLAGS) -c release/pass2.c -o release/pass2.o

release/pass3.o: release/pass3.c
	$(CC) $(CFLAGS) -c release/pass3.c -o release/pass3.o

release/shortcuts.o: release/shortcuts.c
	$(CC) $(CFLAGS) -c release/shortcuts.c -o release/shortcuts.o

release/type.o: release/type.c
	$(CC) $(CFLAGS) -c release/type.c -o release/type.o

release/ec.main.o: release/ec.main.c
	$(CC) $(CFLAGS) -c release/ec.main.c -o release/ec.main.o

clean:
	rm -f release/libec.so $(OBJECTS) $(IMPORTS) $(SYMBOLS) $(COBJECTS) release/ec.main.c release/ec.main.ec release/ec.main.imp release/ec.main.sym

