PROG = lzma
CXX = g++ -O2 -Wall
CXX_C = gcc -O2 -Wall
LIB = -lm
RM = rm -f
CFLAGS = -c

ifdef SystemDrive
IS_MINGW = 1
endif

ifdef IS_MINGW
FILE_IO =FileIO
FILE_IO_2 =Windows/$(FILE_IO)
LIB2 = -luuid 
else
FILE_IO =C_FileIO
FILE_IO_2 =Common/$(FILE_IO)
endif

OBJS = \
  LzmaAlone.o \
  LzmaBench.o \
  LzmaBenchCon.o \
  LzmaRam.o \
  LZMADecoder.o \
  LZMAEncoder.o \
  LZOutWindow.o \
  RangeCoderBit.o \
  InBuffer.o \
  OutBuffer.o \
  FileStreams.o \
  StreamUtils.o \
  $(FILE_IO).o \
  CommandLineParser.o \
  CRC.o \
  IntToString.o \
  MyString.o \
  StringConvert.o \
  StringToInt.o \
  MyVector.o \
  7zCrc.o \
  Alloc.o \
  BranchX86.o \
  MatchFinder.o \
  LzmaDecode.o \
  LzmaRamDecode.o \


all: $(PROG)

$(PROG): $(OBJS)
	$(CXX) -o $(PROG) $(LDFLAGS) $(OBJS) $(LIB) $(LIB2)

LzmaAlone.o: LzmaAlone.cpp
	$(CXX) $(CFLAGS) LzmaAlone.cpp

LzmaBench.o: LzmaBench.cpp
	$(CXX) $(CFLAGS) LzmaBench.cpp

LzmaBenchCon.o: LzmaBenchCon.cpp
	$(CXX) $(CFLAGS) LzmaBenchCon.cpp

LzmaRam.o: LzmaRam.cpp
	$(CXX) $(CFLAGS) LzmaRam.cpp

LZMADecoder.o: ../LZMA/LZMADecoder.cpp
	$(CXX) $(CFLAGS) ../LZMA/LZMADecoder.cpp

LZMAEncoder.o: ../LZMA/LZMAEncoder.cpp
	$(CXX) $(CFLAGS) ../LZMA/LZMAEncoder.cpp

LZOutWindow.o: ../LZ/LZOutWindow.cpp
	$(CXX) $(CFLAGS) ../LZ/LZOutWindow.cpp

RangeCoderBit.o: ../RangeCoder/RangeCoderBit.cpp
	$(CXX) $(CFLAGS) ../RangeCoder/RangeCoderBit.cpp

InBuffer.o: ../../Common/InBuffer.cpp
	$(CXX) $(CFLAGS) ../../Common/InBuffer.cpp

OutBuffer.o: ../../Common/OutBuffer.cpp
	$(CXX) $(CFLAGS) ../../Common/OutBuffer.cpp

FileStreams.o: ../../Common/FileStreams.cpp
	$(CXX) $(CFLAGS) ../../Common/FileStreams.cpp

StreamUtils.o: ../../Common/StreamUtils.cpp
	$(CXX) $(CFLAGS) ../../Common/StreamUtils.cpp

$(FILE_IO).o: ../../../$(FILE_IO_2).cpp
	$(CXX) $(CFLAGS) ../../../$(FILE_IO_2).cpp


CommandLineParser.o: ../../../Common/CommandLineParser.cpp
	$(CXX) $(CFLAGS) ../../../Common/CommandLineParser.cpp

CRC.o: ../../../Common/CRC.cpp
	$(CXX) $(CFLAGS) ../../../Common/CRC.cpp

MyWindows.o: ../../../Common/MyWindows.cpp
	$(CXX) $(CFLAGS) ../../../Common/MyWindows.cpp

IntToString.o: ../../../Common/IntToString.cpp
	$(CXX) $(CFLAGS) ../../../Common/IntToString.cpp

MyString.o: ../../../Common/MyString.cpp
	$(CXX) $(CFLAGS) ../../../Common/MyString.cpp

StringConvert.o: ../../../Common/StringConvert.cpp
	$(CXX) $(CFLAGS) ../../../Common/StringConvert.cpp

StringToInt.o: ../../../Common/StringToInt.cpp
	$(CXX) $(CFLAGS) ../../../Common/StringToInt.cpp

MyVector.o: ../../../Common/MyVector.cpp
	$(CXX) $(CFLAGS) ../../../Common/MyVector.cpp

7zCrc.o: ../../../../C/7zCrc.c
	$(CXX_C) $(CFLAGS) ../../../../C/7zCrc.c

Alloc.o: ../../../../C/Alloc.c
	$(CXX_C) $(CFLAGS) ../../../../C/Alloc.c

BranchX86.o: ../../../../C/Compress/Branch/BranchX86.c
	$(CXX_C) $(CFLAGS) ../../../../C/Compress/Branch/BranchX86.c

MatchFinder.o: ../../../../C/Compress/Lz/MatchFinder.c
	$(CXX_C) $(CFLAGS) ../../../../C/Compress/Lz/MatchFinder.c

LzmaDecode.o: ../../../../C/Compress/Lzma/LzmaDecode.c
	$(CXX_C) $(CFLAGS) ../../../../C/Compress/Lzma/LzmaDecode.c

LzmaRamDecode.o: LzmaRamDecode.c
	$(CXX_C) $(CFLAGS) LzmaRamDecode.c

clean:
	-$(RM) $(PROG) $(OBJS)

