# =============================================================================
#	Makefile for bcc32
# =============================================================================

all: qcompiler

# Binary file name
BINNAME = qcompiler_test.exe

# Normal compiler
#CC = c++
CC = bcc32

# Where to install
INSTDIR = ~/bin

# Compile options
PATH_ROOT = ..
PATH_UNITS = ../calcunits
IFLAGS = -I. -I${PATH_ROOT} -I${PATH_UNITS}
#CFLAGS = -Wall -ansi -O2
LFLAGS = -lm

# -----------------------------------------------------------------------------
#	CalcUnits
# -----------------------------------------------------------------------------
QC_UNITS_H = ${PATH_UNITS}/QC_not.h ${PATH_UNITS}/QC_hadamard.h ${PATH_UNITS}/QC_cnot.h ${PATH_UNITS}/QC_crot.h
QC_UNITS_O = QC_not.obj QC_hadamard.obj QC_cnot.obj QC_crot.obj

QCalcUnit.obj: ${PATH_UNITS}/QCalcUnit.cpp ${PATH_UNITS}/QCalcUnit.h
	${CC} ${IFLAGS} ${CFLAGS} -c ${PATH_UNITS}/QCalcUnit.cpp -o QCalcUnit.obj

QC_not.obj: ${PATH_UNITS}/QC_not.cpp ${PATH_UNITS}/QC_not.h ${PATH_UNITS}/QCalcUnit.h ${PATH_ROOT}/QBits.h
	${CC} ${IFLAGS} ${CFLAGS} -c ${PATH_UNITS}/QC_not.cpp -o QC_not.obj

QC_cnot.obj: ${PATH_UNITS}/QC_cnot.cpp ${PATH_UNITS}/QC_cnot.h ${PATH_UNITS}/QCalcUnit.h ${PATH_ROOT}/QBits.h
	${CC} ${IFLAGS} ${CFLAGS} -c ${PATH_UNITS}/QC_cnot.cpp -o QC_cnot.obj

QC_crot.obj: ${PATH_UNITS}/QC_crot.cpp ${PATH_UNITS}/QC_crot.h ${PATH_UNITS}/QCalcUnit.h ${PATH_ROOT}/QBits.h
	${CC} ${IFLAGS} ${CFLAGS} -c ${PATH_UNITS}/QC_crot.cpp -o QC_crot.obj

QC_hadamard.obj: ${PATH_UNITS}/QC_hadamard.cpp ${PATH_UNITS}/QC_hadamard.h ${PATH_UNITS}/QCalcUnit.h ${PATH_ROOT}/QBits.h
	${CC} ${IFLAGS} ${CFLAGS} -c ${PATH_UNITS}/QC_hadamard.cpp -o QC_hadamard.obj

# -----------------------------------------------------------------------------
#	Compiler
# -----------------------------------------------------------------------------
QCompiler.obj: QCompiler.cpp QCompiler.h QParseInfo.h
	${CC} ${IFLAGS} ${CFLAGS} -c QCompiler.cpp -o QCompiler.obj

QCompilerCntl.obj: QCompilerCntl.cpp QCompilerCntl.h QCompiler.h QParseInfo.h ${PATH_UNITS}/QCalcUnit.h ${QC_UNITS_H}
	${CC} ${IFLAGS} ${CFLAGS} -c QCompilerCntl.cpp -o QCompilerCntl.obj

QParseInfo.obj: QParseInfo.h
	${CC} ${IFLAGS} ${CFLAGS} -c QParseInfo.cpp -o QParseInfo.obj

QBits.obj: ${PATH_ROOT}/QBits.cpp ${PATH_ROOT}/QBits.h
	${CC} ${IFLAGS} ${CFLAGS} -c ${PATH_ROOT}/QBits.cpp -o QBits.obj

QCalcManager.obj: ${PATH_ROOT}/QCalcManager.cpp ${PATH_ROOT}/QCalcManager.h QCompilerCntl.h ${PATH_ROOT}/QBits.h ${PATH_UNITS}/QCalcUnit.h
	${CC} ${IFLAGS} ${CFLAGS} -c ${PATH_ROOT}/QCalcManager.cpp -o QCalcManager.obj

compiler_main.obj: compiler_main.cpp ${PATH_ROOT}/QBits.h ${PATH_ROOT}/QCalcManager.h
	${CC} ${IFLAGS} ${CFLAGS} -c compiler_main.cpp -o compiler_main.obj

# -----------------------------------------------------------------------------
qcompiler: compiler_main.obj QBits.obj QCalcManager.obj QCompiler.obj QCompilerCntl.obj QParseInfo.obj QCalcUnit.obj ${QC_UNITS_O}
	${CC} ${IFLAGS} -o ${BINNAME} compiler_main.obj QBits.obj QCalcManager.obj QCompiler.obj QCompilerCntl.obj QParseInfo.obj QCalcUnit.obj ${QC_UNITS_O} ${CFLAGS} ${LFLAGS}


# -----------------------------------------------------------------------------
#	Other functions
# -----------------------------------------------------------------------------
clean:
	-rm -f *.obj ${BINNAME}

# -----------------------------------------------------------------------------
install: qcompiler
	@if [ -d ${INSTDIR} ]; \
	then \
		cp ${OPT_BINNAME} ${INSTDIR}; \
		chmod 711 ${INSTDIR}/${OPT_BINNAME}; \
		echo "Installed in ${INSTDIR}"; \
	else \
		echo "Sorry, ${INSTDIR} does not exist."; \
	fi

# -----------------------------------------------------------------------------
uninstall:
	@if [ -e ${INSTDIR}/${OPT_BINNAME} ]; \
	then \
		-rm ${INSTDIR}/${OPT_BINNAME}; \
		echo "unnstalled successfully."; \
	else \
		echo "Sorry, ${INSTDIR}/${OPT_BINNAME} does not exist."; \
	fi

