NTMakefile   [plain text]


########################################################################
#
# Copyright (c) 2009, Secure Endpoints Inc.
# All rights reserved.
# 
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 
# - Redistributions of source code must retain the above copyright
#   notice, this list of conditions and the following disclaimer.
# 
# - Redistributions in binary form must reproduce the above copyright
#   notice, this list of conditions and the following disclaimer in
#   the documentation and/or other materials provided with the
#   distribution.
# 
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
# 

SUBDIRS=tomsfastmath

RELDIR=lib\hcrypto

AUXCFLAGS=$(AUXCFLAGS) -DKRB5 -I$(HCRYPTOINCLUDEDIR)

!include ../../windows/NTMakefile.w32

# Do dependencies first

all:: subdirs

clean:: clean-subdirs

test:: test-subdirs

# Include files

HCRYPTOINCLUDEDIR=$(INCDIR)\hcrypto

INCFILES=	\
	$(HCRYPTOINCLUDEDIR)\aes.h	\
	$(HCRYPTOINCLUDEDIR)\bn.h	\
	$(HCRYPTOINCLUDEDIR)\des.h	\
	$(HCRYPTOINCLUDEDIR)\dh.h	\
	$(HCRYPTOINCLUDEDIR)\dsa.h	\
	$(HCRYPTOINCLUDEDIR)\ec.h	\
	$(HCRYPTOINCLUDEDIR)\ecdh.h	\
	$(HCRYPTOINCLUDEDIR)\ecdsa.h	\
	$(HCRYPTOINCLUDEDIR)\engine.h	\
	$(HCRYPTOINCLUDEDIR)\evp.h	\
	$(HCRYPTOINCLUDEDIR)\evp-hcrypto.h	\
	$(HCRYPTOINCLUDEDIR)\evp-cc.h	\
	$(HCRYPTOINCLUDEDIR)\hmac.h	\
	$(HCRYPTOINCLUDEDIR)\md2.h	\
	$(HCRYPTOINCLUDEDIR)\md4.h	\
	$(HCRYPTOINCLUDEDIR)\md5.h	\
	$(HCRYPTOINCLUDEDIR)\pkcs12.h	\
	$(HCRYPTOINCLUDEDIR)\rand.h	\
	$(HCRYPTOINCLUDEDIR)\randi.h	\
	$(HCRYPTOINCLUDEDIR)\rc2.h	\
	$(HCRYPTOINCLUDEDIR)\rc4.h	\
	$(HCRYPTOINCLUDEDIR)\rsa.h	\
	$(HCRYPTOINCLUDEDIR)\sha.h	\
	$(HCRYPTOINCLUDEDIR)\ui.h

mkincdir:
!if !exist($(HCRYPTOINCLUDEDIR))
	$(MKDIR) $(HCRYPTOINCLUDEDIR)
!endif

{}.h{$(HCRYPTOINCLUDEDIR)}.h:
	$(CP) $** $@

all:: mkincdir

all:: $(INCFILES)

# libhcrypto

libhcrypto_OBJs = \
	$(OBJ)\imath.obj	\
	$(OBJ)\iprime.obj	\
	$(OBJ)\aes.obj		\
	$(OBJ)\bn.obj		\
	$(OBJ)\camellia.obj	\
	$(OBJ)\camellia-ntt.obj	\
	$(OBJ)\des.obj		\
	$(OBJ)\dh.obj		\
	$(OBJ)\dh-imath.obj	\
	$(OBJ)\dh-tfm.obj	\
	$(OBJ)\dsa.obj		\
	$(OBJ)\evp.obj		\
	$(OBJ)\evp-hcrypto.obj	\
	$(OBJ)\engine.obj	\
	$(OBJ)\hmac.obj		\
	$(OBJ)\md2.obj		\
	$(OBJ)\md4.obj		\
	$(OBJ)\md5.obj		\
	$(OBJ)\pkcs5.obj	\
	$(OBJ)\pkcs12.obj	\
	$(OBJ)\rand-w32.obj	\
	$(OBJ)\rand.obj		\
	$(OBJ)\rc2.obj		\
	$(OBJ)\rc4.obj		\
	$(OBJ)\rijndael-alg-fst.obj \
	$(OBJ)\rnd_keys.obj	\
	$(OBJ)\rsa.obj		\
	$(OBJ)\rsa-gmp.obj	\
	$(OBJ)\rsa-imath.obj	\
	$(OBJ)\rsa-tfm.obj	\
	$(OBJ)\sha.obj		\
	$(OBJ)\sha256.obj	\
	$(OBJ)\ui.obj

!ifndef STATICLIBS

$(LIBHCRYPTO): $(BINDIR)\libhcrypto.dll

$(BINDIR)\libhcrypto.dll: $(libhcrypto_OBJs) $(LIBROKEN) $(LIBASN1) $(LIBTFM)
	$(DLLGUILINK) -def:libhcrypto-exports.def -implib:$(LIBHCRYPTO)
	$(DLLPREP)

!else

$(LIBHCRYPTO): $(libhcrypto_OBJs)
	$(LIBCON)

!endif

{imath/}.c{$(OBJ)}.obj:
	$(C2OBJ)

all:: $(LIBHCRYPTO)

clean::
	-$(RM) $(LIBHCRYPTO)

# Tests

TESTLIB=$(OBJ)\libhctest.lib

$(TESTLIB):		    \
	$(OBJ)\imath.obj    \
	$(OBJ)\des.obj	    \
	$(OBJ)\ui.obj
	$(LIBCON)

test-binaries:				\
	$(OBJ)\destest.exe		\
	$(OBJ)\example_evp_cipher.exe	\
	$(OBJ)\mdtest.exe		\
	$(OBJ)\rc2test.exe		\
	$(OBJ)\rctest.exe		\
	$(OBJ)\test_bn.exe		\
	$(OBJ)\test_cipher.exe		\
	$(OBJ)\test_engine_dso.exe	\
	$(OBJ)\test_hmac.exe		\
	$(OBJ)\test_imath.exe		\
	$(OBJ)\test_pkcs5.exe		\
	$(OBJ)\test_pkcs12.exe		\
	$(OBJ)\test_rsa.exe		\
	$(OBJ)\test_dh.exe		\
	$(OBJ)\test_rand.exe		\
	$(OBJ)\test_crypto.sh

$(OBJ)\destest.exe: $(OBJ)\destest.obj $(TESTLIB) $(LIBROKEN)
	$(EXECONLINK)
	$(_VC_MANIFEST_EMBED_EXE)
	$(_VC_MANIFEST_CLEAN)


$(OBJ)\mdtest.exe: $(OBJ)\mdtest.obj $(LIBHCRYPTO) $(LIBROKEN)
	$(EXECONLINK)
	$(_VC_MANIFEST_EMBED_EXE)
	$(_VC_MANIFEST_CLEAN)

$(OBJ)\rc2test.exe: $(OBJ)\rc2test.obj $(LIBHCRYPTO) $(LIBROKEN)
	$(EXECONLINK)
	$(_VC_MANIFEST_EMBED_EXE)
	$(_VC_MANIFEST_CLEAN)

$(OBJ)\rctest.exe: $(OBJ)\rctest.obj $(LIBHCRYPTO) $(LIBROKEN)
	$(EXECONLINK)
	$(_VC_MANIFEST_EMBED_EXE)
	$(_VC_MANIFEST_CLEAN)

$(OBJ)\test_bn.exe: $(OBJ)\test_bn.obj $(LIBHCRYPTO) $(LIBROKEN) $(LIBASN1)
	$(EXECONLINK)
	$(_VC_MANIFEST_EMBED_EXE)
	$(_VC_MANIFEST_CLEAN)

$(OBJ)\test_cipher.exe: $(OBJ)\test_cipher.obj $(LIBHCRYPTO) $(LIBROKEN) $(LIBVERS)
	$(EXECONLINK)
	$(_VC_MANIFEST_EMBED_EXE)
	$(_VC_MANIFEST_CLEAN)

$(OBJ)\test_engine_dso.exe: $(OBJ)\test_engine_dso.obj $(LIBHCRYPTO) $(LIBROKEN) $(LIBASN1) $(LIBVERS)
	$(EXECONLINK)
	$(_VC_MANIFEST_EMBED_EXE)
	$(_VC_MANIFEST_CLEAN)

$(OBJ)\test_hmac.exe: $(OBJ)\test_hmac.obj $(LIBHCRYPTO)
	$(EXECONLINK)
	$(_VC_MANIFEST_EMBED_EXE)
	$(_VC_MANIFEST_CLEAN)

$(OBJ)\test_imath.exe: $(OBJ)\test_imath.obj $(TESTLIB) $(LIBROKEN)
	$(EXECONLINK)
	$(_VC_MANIFEST_EMBED_EXE)
	$(_VC_MANIFEST_CLEAN)

$(OBJ)\test_pkcs5.exe: $(OBJ)\test_pkcs5.obj $(LIBHCRYPTO) $(LIBROKEN)
	$(EXECONLINK)
	$(_VC_MANIFEST_EMBED_EXE)
	$(_VC_MANIFEST_CLEAN)

$(OBJ)\test_pkcs12.exe: $(OBJ)\test_pkcs12.obj $(LIBHCRYPTO) $(LIBASN1) $(LIBROKEN)
	$(EXECONLINK)
	$(_VC_MANIFEST_EMBED_EXE)
	$(_VC_MANIFEST_CLEAN)

$(OBJ)\test_rsa.exe: $(OBJ)\test_rsa.obj $(LIBHCRYPTO) $(LIBROKEN) $(LIBASN1) $(LIBVERS)
	$(EXECONLINK)
	$(_VC_MANIFEST_EMBED_EXE)
	$(_VC_MANIFEST_CLEAN)

$(OBJ)\test_dh.exe: $(OBJ)\test_dh.obj $(LIBHCRYPTO) $(LIBROKEN) $(LIBASN1) $(LIBVERS)
	$(EXECONLINK)
	$(_VC_MANIFEST_EMBED_EXE)
	$(_VC_MANIFEST_CLEAN)

$(OBJ)\test_rand.exe: $(OBJ)\test_rand.obj $(LIBHCRYPTO) $(LIBROKEN) $(LIBASN1) $(LIBVERS)
	$(EXECONLINK)
	$(_VC_MANIFEST_EMBED_EXE)
	$(_VC_MANIFEST_CLEAN)

$(OBJ)\test_crypto.sh: test_crypto.in NTMakefile
	$(SED) -e "s,[@]srcdir[@],$(SRCDIR),g" -e "s,[@]exeext[@],.exe,g" < test_crypto.in > $@

test-run:
	cd $(OBJ)
	destest.exe
	mdtest.exe
	rc2test.exe
	rctest.exe
	test_bn.exe
	test_cipher.exe
	test_engine_dso.exe
	test_hmac.exe
	test_imath.exe
	test_pkcs5.exe
	test_pkcs12.exe
#	test_rsa.exe
#	test_dh.exe
!ifdef SH
	$(SH) test_crypto.sh
!endif
	cd $(SRCDIR)

test:: $(TESTLIB) test-binaries test-run