#####################################################################
#
# Makefile for compiling StormLib with MINGW 3.0
#
# Author: Ladislav Zezula
# Tested: Feb 03 2015
# System: Windows 8.1 64-bit
#    
#####################################################################

CC        = @gcc
CPP       = @g++
CFLAGS    = -Wall
DFLAGS    = -D_7ZIP_ST
EXELFLAGS = -s -Wl,--subsystem,console -lwininet
DLLLFLAGS = -shared -lwininet
AR        = ar
ARFLAGS   = rcs

LIBRARY   = StormLib.dll
TESTEXE   = StormLib_test.exe

OBJS =  src/adpcm/adpcm.o \
	src/huffman/huff.o \
	src/sparse/sparse.o \
	src/FileStream.o \
	src/SBaseCommon.o \
        src/SBaseDumpData.o \
	src/SBaseFileTable.o \
	src/SBaseSubTypes.o \
	src/SCompression.o \
	src/SFileAddFile.o \
	src/SFileAttributes.o \
	src/SFileCompactArchive.o \
	src/SFileCreateArchive.o \
	src/SFileExtractFile.o \
	src/SFileFindFile.o \
	src/SFileGetFileInfo.o \
	src/SFileListFile.o \
	src/SFileOpenArchive.o \
	src/SFileOpenFileEx.o \
	src/SFilePatchArchives.o \
	src/SFileReadFile.o \
	src/SFileVerify.o

COBJS = src/libtomcrypt/src/hashes/sha1.o \
	src/libtomcrypt/src/hashes/hash_memory.o \
	src/libtomcrypt/src/hashes/md5.o \
	src/libtomcrypt/src/misc/crypt_hash_is_valid.o \
	src/libtomcrypt/src/misc/crypt_prng_descriptor.o \
	src/libtomcrypt/src/misc/crypt_register_prng.o \
	src/libtomcrypt/src/misc/crypt_ltc_mp_descriptor.o \
	src/libtomcrypt/src/misc/crypt_find_hash.o \
	src/libtomcrypt/src/misc/zeromem.o \
	src/libtomcrypt/src/misc/base64_decode.o \
	src/libtomcrypt/src/misc/crypt_register_hash.o \
	src/libtomcrypt/src/misc/crypt_find_prng.o \
	src/libtomcrypt/src/misc/crypt_prng_is_valid.o \
	src/libtomcrypt/src/misc/crypt_hash_descriptor.o \
	src/libtomcrypt/src/misc/crypt_libc.o \
	src/libtomcrypt/src/misc/crypt_argchk.o \
	src/libtomcrypt/src/math/multi.o \
	src/libtomcrypt/src/math/ltm_desc.o \
	src/libtomcrypt/src/math/rand_prime.o \
	src/libtomcrypt/src/pk/asn1/der_decode_bit_string.o \
	src/libtomcrypt/src/pk/asn1/der_decode_boolean.o \
        src/libtomcrypt/src/pk/asn1/der_decode_choice.o \
        src/libtomcrypt/src/pk/asn1/der_decode_ia5_string.o \
        src/libtomcrypt/src/pk/asn1/der_decode_integer.o \
        src/libtomcrypt/src/pk/asn1/der_decode_object_identifier.o \
        src/libtomcrypt/src/pk/asn1/der_decode_octet_string.o \
        src/libtomcrypt/src/pk/asn1/der_decode_printable_string.o \
        src/libtomcrypt/src/pk/asn1/der_decode_sequence_ex.o \
        src/libtomcrypt/src/pk/asn1/der_decode_sequence_flexi.o \
        src/libtomcrypt/src/pk/asn1/der_decode_sequence_multi.o \
        src/libtomcrypt/src/pk/asn1/der_decode_short_integer.o \
        src/libtomcrypt/src/pk/asn1/der_decode_utctime.o \
        src/libtomcrypt/src/pk/asn1/der_decode_utf8_string.o \
        src/libtomcrypt/src/pk/asn1/der_encode_bit_string.o \
        src/libtomcrypt/src/pk/asn1/der_encode_boolean.o \
        src/libtomcrypt/src/pk/asn1/der_encode_ia5_string.o \
        src/libtomcrypt/src/pk/asn1/der_encode_integer.o \
        src/libtomcrypt/src/pk/asn1/der_encode_object_identifier.o \
        src/libtomcrypt/src/pk/asn1/der_encode_octet_string.o \
        src/libtomcrypt/src/pk/asn1/der_encode_printable_string.o \
        src/libtomcrypt/src/pk/asn1/der_encode_sequence_ex.o \
        src/libtomcrypt/src/pk/asn1/der_encode_sequence_multi.o \
        src/libtomcrypt/src/pk/asn1/der_encode_set.o \
        src/libtomcrypt/src/pk/asn1/der_encode_setof.o \
        src/libtomcrypt/src/pk/asn1/der_encode_short_integer.o \
        src/libtomcrypt/src/pk/asn1/der_encode_utctime.o \
        src/libtomcrypt/src/pk/asn1/der_encode_utf8_string.o \
        src/libtomcrypt/src/pk/asn1/der_length_bit_string.o \
        src/libtomcrypt/src/pk/asn1/der_length_boolean.o \
        src/libtomcrypt/src/pk/asn1/der_length_ia5_string.o \
        src/libtomcrypt/src/pk/asn1/der_length_integer.o \
        src/libtomcrypt/src/pk/asn1/der_length_object_identifier.o \
        src/libtomcrypt/src/pk/asn1/der_length_octet_string.o \
        src/libtomcrypt/src/pk/asn1/der_length_printable_string.o \
        src/libtomcrypt/src/pk/asn1/der_length_sequence.o \
        src/libtomcrypt/src/pk/asn1/der_length_utctime.o \
        src/libtomcrypt/src/pk/asn1/der_sequence_free.o \
        src/libtomcrypt/src/pk/asn1/der_length_utf8_string.o \
        src/libtomcrypt/src/pk/asn1/der_length_short_integer.o \
	src/libtomcrypt/src/pk/ecc/ltc_ecc_projective_dbl_point.o \
	src/libtomcrypt/src/pk/ecc/ltc_ecc_mulmod.o \
	src/libtomcrypt/src/pk/ecc/ltc_ecc_projective_add_point.o \
	src/libtomcrypt/src/pk/ecc/ltc_ecc_map.o \
	src/libtomcrypt/src/pk/ecc/ltc_ecc_points.o \
	src/libtomcrypt/src/pk/ecc/ltc_ecc_mul2add.o \
	src/libtomcrypt/src/pk/pkcs1/pkcs_1_v1_5_decode.o \
	src/libtomcrypt/src/pk/pkcs1/pkcs_1_v1_5_encode.o \
	src/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_decode.o \
	src/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_encode.o \
	src/libtomcrypt/src/pk/pkcs1/pkcs_1_mgf1.o \
	src/libtomcrypt/src/pk/pkcs1/pkcs_1_oaep_decode.o \
	src/libtomcrypt/src/pk/rsa/rsa_make_key.o \
	src/libtomcrypt/src/pk/rsa/rsa_free.o \
	src/libtomcrypt/src/pk/rsa/rsa_verify_simple.o \
	src/libtomcrypt/src/pk/rsa/rsa_import.o \
	src/libtomcrypt/src/pk/rsa/rsa_verify_hash.o \
	src/libtomcrypt/src/pk/rsa/rsa_sign_hash.o \
	src/libtomcrypt/src/pk/rsa/rsa_exptmod.o \
	src/libtommath/bn_mp_exptmod_fast.o \
	src/libtommath/bn_mp_jacobi.o \
	src/libtommath/bn_mp_mod.o \
	src/libtommath/bn_mp_signed_bin_size.o \
	src/libtommath/bn_mp_invmod.o \
	src/libtommath/bn_mp_is_square.o \
	src/libtommath/bn_mp_neg.o \
	src/libtommath/bn_mp_reduce_2k.o \
	src/libtommath/bn_mp_xor.o \
	src/libtommath/bn_mp_karatsuba_mul.o \
	src/libtommath/bn_mp_dr_setup.o \
	src/libtommath/bn_mp_mul.o \
	src/libtommath/bn_mp_init_multi.o \
	src/libtommath/bn_mp_clear.o \
	src/libtommath/bn_s_mp_sqr.o \
	src/libtommath/bn_mp_rshd.o \
	src/libtommath/bn_s_mp_sub.o \
	src/libtommath/bn_mp_sub.o \
	src/libtommath/bn_mp_toradix.o \
	src/libtommath/bn_mp_reduce.o \
	src/libtommath/bn_mp_prime_is_prime.o \
	src/libtommath/bn_mp_prime_next_prime.o \
	src/libtommath/bn_mp_exptmod.o \
	src/libtommath/bn_mp_mod_2d.o \
	src/libtommath/bn_reverse.o \
	src/libtommath/bn_mp_init.o \
	src/libtommath/bn_fast_s_mp_sqr.o \
	src/libtommath/bn_mp_sqr.o \
	src/libtommath/bn_mp_cnt_lsb.o \
	src/libtommath/bn_mp_clear_multi.o \
	src/libtommath/bn_mp_exch.o \
	src/libtommath/bn_fast_s_mp_mul_digs.o \
	src/libtommath/bn_mp_grow.o \
	src/libtommath/bn_mp_read_radix.o \
	src/libtommath/bn_mp_mul_2.o \
	src/libtommath/bn_mp_shrink.o \
	src/libtommath/bn_mp_div_2.o \
	src/libtommath/bn_fast_mp_invmod.o \
	src/libtommath/bn_mp_prime_miller_rabin.o \
	src/libtommath/bn_mp_to_unsigned_bin.o \
	src/libtommath/bn_mp_prime_rabin_miller_trials.o \
	src/libtommath/bn_mp_2expt.o \
	src/libtommath/bn_mp_cmp_mag.o \
	src/libtommath/bn_mp_to_signed_bin.o \
	src/libtommath/bn_mp_get_int.o \
	src/libtommath/bn_mp_montgomery_reduce.o \
	src/libtommath/bn_mp_dr_reduce.o \
	src/libtommath/bn_mp_fwrite.o \
	src/libtommath/bn_mp_and.o \
	src/libtommath/bn_mp_exteuclid.o \
	src/libtommath/bn_fast_mp_montgomery_reduce.o \
	src/libtommath/bn_s_mp_mul_high_digs.o \
	src/libtommath/bn_mp_reduce_setup.o \
	src/libtommath/bn_mp_lcm.o \
	src/libtommath/bn_mp_abs.o \
	src/libtommath/bn_mp_cmp.o \
	src/libtommath/bn_mp_submod.o \
	src/libtommath/bn_mp_div_d.o \
	src/libtommath/bn_s_mp_mul_digs.o \
	src/libtommath/bn_mp_mul_d.o \
	src/libtommath/bn_mp_to_unsigned_bin_n.o \
	src/libtommath/bn_mp_prime_random_ex.o \
	src/libtommath/bn_mp_rand.o \
	src/libtommath/bn_mp_div_2d.o \
	src/libtommath/bn_mp_addmod.o \
	src/libtommath/bn_mp_init_copy.o \
	src/libtommath/bn_mp_read_unsigned_bin.o \
	src/libtommath/bn_mp_toradix_n.o \
	src/libtommath/bn_fast_s_mp_mul_high_digs.o \
	src/libtommath/bn_mp_toom_sqr.o \
	src/libtommath/bn_mp_to_signed_bin_n.o \
	src/libtommath/bn_mp_reduce_2k_setup_l.o \
	src/libtommath/bn_mp_div.o \
	src/libtommath/bn_prime_tab.o \
	src/libtommath/bn_mp_karatsuba_sqr.o \
	src/libtommath/bn_mp_gcd.o \
	src/libtommath/bn_mp_prime_is_divisible.o \
	src/libtommath/bn_mp_set_int.o \
	src/libtommath/bn_mp_prime_fermat.o \
	src/libtommath/bn_mp_cmp_d.o \
	src/libtommath/bn_mp_add.o \
	src/libtommath/bn_mp_sub_d.o \
	src/libtommath/bn_s_mp_exptmod.o \
	src/libtommath/bn_mp_init_size.o \
	src/libtommath/bncore.o \
	src/libtommath/bn_mp_radix_smap.o \
	src/libtommath/bn_mp_reduce_2k_l.o \
	src/libtommath/bn_mp_montgomery_calc_normalization.o \
	src/libtommath/bn_mp_mod_d.o \
	src/libtommath/bn_mp_set.o \
	src/libtommath/bn_mp_or.o \
	src/libtommath/bn_mp_sqrt.o \
	src/libtommath/bn_mp_invmod_slow.o \
	src/libtommath/bn_mp_count_bits.o \
	src/libtommath/bn_mp_read_signed_bin.o \
	src/libtommath/bn_mp_div_3.o \
	src/libtommath/bn_mp_unsigned_bin_size.o \
	src/libtommath/bn_mp_mulmod.o \
	src/libtommath/bn_mp_clamp.o \
	src/libtommath/bn_mp_reduce_2k_setup.o \
	src/libtommath/bn_mp_toom_mul.o \
	src/libtommath/bn_mp_montgomery_setup.o \
	src/libtommath/bn_mp_expt_d.o \
	src/libtommath/bn_mp_copy.o \
	src/libtommath/bn_mp_dr_is_modulus.o \
	src/libtommath/bn_mp_sqrmod.o \
	src/libtommath/bn_mp_reduce_is_2k_l.o \
	src/libtommath/bn_mp_mul_2d.o \
	src/libtommath/bn_mp_fread.o \
	src/libtommath/bn_mp_init_set.o \
	src/libtommath/bn_mp_add_d.o \
	src/libtommath/bn_mp_zero.o \
	src/libtommath/bn_s_mp_add.o \
	src/libtommath/bn_mp_radix_size.o \
	src/libtommath/bn_mp_init_set_int.o \
	src/libtommath/bn_mp_n_root.o \
	src/libtommath/bn_mp_lshd.o \
	src/libtommath/bn_mp_reduce_is_2k.o \
	src/bzip2/blocksort.o \
	src/bzip2/bzlib.o \
	src/bzip2/compress.o \
	src/bzip2/crctable.o \
	src/bzip2/decompress.o \
	src/bzip2/huffman.o \
	src/bzip2/randtable.o \
	src/pklib/implode.o \
	src/pklib/crc32.o \
	src/pklib/explode.o \
	src/zlib/crc32.o \
	src/zlib/trees.o \
	src/zlib/compress.o \
	src/zlib/adler32.o \
	src/zlib/inftrees.o \
	src/zlib/inffast.o \
	src/zlib/deflate.o \
	src/zlib/inflate.o \
	src/zlib/zutil.o \
	src/lzma/C/LzFind.o \
	src/lzma/C/LzmaEnc.o \
	src/lzma/C/LzmaDec.o \
	src/jenkins/lookup3.o
            
OBJS_DLL  = stormlib_dll/DllMain.o

OBJS_TEST = test/StormTest.o

all: $(LIBRARY) $(TESTEXE)

#clean:
#   rm -f $(COBJS) $(LIBRARY)

#install: $(LIBRARY)
#   install $(LIBRARY) /usr/local/lib
#   mkdir -p /usr/local/include/StormLib
#   cp src/StormLib.h /usr/local/include/StormLib
#   cp src/StormPort.h /usr/local/include/StormLib

$(LIBRARY): $(COBJS) $(OBJS) $(OBJS_DLL)
	$(CPP) $(CFLAGS) $(DFLAGS) -o $(LIBRARY) $(COBJS) $(OBJS) $(OBJS_DLL) $(DLLLFLAGS)

$(TESTEXE): $(COBJS) $(OBJS) $(OBJS_TEST)
	$(CPP) $(CFLAGS) $(DFLAGS) -o "$@" $(COBJS) $(OBJS) $(OBJS_TEST) $(EXELFLAGS)

$(COBJS): %.o: %.c
	$(CC) -o $@ $(CFLAGS) $(DFLAGS) -c $<

$(OBJS): %.o: %.cpp
	$(CC) -o $@ $(CFLAGS) $(DFLAGS) -c $<

$(OBJS_DLL): %.o: %.c
	$(CC) -o $@ $(CFLAGS) $(DFLAGS) -c $<

$(OBJS_TEST): %.o: %.cpp
	$(CPP) -o $@ $(CFLAGS) $(DFLAGS) -c $<

