SHLIBOBJ= libafshcrypto.${SHLIB_SUFFIX}.${LIBMAJOR}.${LIBMINOR}
-all: ${HEADERS} ${TOP_LIBDIR}/${SHLIBOBJ} ${TOP_LIBDIR}/libafshcrypto.a
+all: ${HEADERS} ${TOP_LIBDIR}/${SHLIBOBJ} \
+ ${TOP_LIBDIR}/libafshcrypto.a \
+ ${TOP_LIBDIR}/libafshcrypto_lwp.a
install: libafshcrypto.a ${SHLIBOBJ}
${TOP_OBJDIR}/src/config/shlib-install -d ${DESTDIR}${libdir} \
$(RM) -f ${OBJECTS} ${SHLIBOBJ} libafshcrypto.a libafshcrypto.exp \
test_cipher test_cipher.o hex.o
-# Ignore for now : rand-egd.o
+COMMON_OBJS= aes.o camellia.o camellia-ntt.o des.o engine.o evp.o \
+ evp-hcrypto.o evp-cc.o hmac.o md2.o md4.o md5.o pkcs5.o \
+ rand-egd.o rand-timer.o rand-unix.o rand.o \
+ rc2.o rc4.o rijndael-alg-fst.o rnd_keys.o sha.o sha256.o ui.o \
+ cloexec.o ct.o issuid.o net_read.o net_write.o strlcpy.o
-OBJECTS= aes.o camellia.o camellia-ntt.o des.o engine.o evp.o \
- evp-hcrypto.o evp-cc.o hmac.o md2.o md4.o md5.o pkcs5.o \
- rand-egd.o rand-fortuna.o rand-timer.o rand-unix.o rand.o \
- rc2.o rc4.o rijndael-alg-fst.o rnd_keys.o sha.o sha256.o ui.o \
- cloexec.o ct.o issuid.o net_read.o net_write.o strlcpy.o
+OBJECTS = $(COMMON_OBJS) rand-fortuna.o
+
+LWP_OBJS = $(COMMON_OBJS) rand-fortuna_lwp.o
UPSTREAM= ${TOP_SRCDIR}/external/heimdal
-CCRULE = ${CC} -I${TOP_INCDIR}/hcrypto ${CFLAGS} -I${UPSTREAM}/hcrypto -c $?
+CFLAGS=$(COMMON_CFLAGS) $(MT_CFLAGS) $(SHLIB_CFLAGS)
+CCRULE = $(MT_CC) -I${TOP_INCDIR}/hcrypto ${CFLAGS} -I${UPSTREAM}/hcrypto -c $?
+
+LWPRULE=$(CC) $(COMMON_CFLAGS) $(XCFLAGS) $(ARCHFLAGS) \
+ -I$(TOP_INCDIR)/hcrypto -I$(UPSTREAM)/hcrypto -c $?
${TOP_LIBDIR}/${SHLIBOBJ}: ${SHLIBOBJ}
${TOP_OBJDIR}/src/config/shlib-install -d ${TOP_LIBDIR} \
$(AR) crv $@ ${OBJECTS}
$(RANLIB) $@
+libafshcrypto_lwp.a: $(LWP_OBJS)
+ $(RM) -f $@
+ $(AR) crv $@ $(LWP_OBJS)
+ $(RANLIB) $@
+
test_cipher: test_cipher.o hex.o libafshcrypto.a
${CC} ${LDFLAGS} -o test_cipher test_cipher.o hex.o libafshcrypto.a
${TOP_LIBDIR}/libafshcrypto.a: libafshcrypto.a
${INSTALL_DATA} $? $@
+${TOP_LIBDIR}/libafshcrypto_lwp.a: libafshcrypto_lwp.a
+ ${INSTALL_DATA} $? $@
+
+
aes.o: ${UPSTREAM}/hcrypto/aes.c
${CCRULE}
rand-fortuna.o: ${UPSTREAM}/hcrypto/rand-fortuna.c
${CCRULE}
+rand-fortuna_lwp.o: ${UPSTREAM}/hcrypto/rand-fortuna.c
+ ${LWPRULE} -o rand-fortuna_lwp.o
+
rand-timer.o: ${UPSTREAM}/hcrypto/rand-timer.c
${CCRULE}
+#ifdef AFS_PTHREAD_ENV
#include <pthread.h>
#define HEIMDAL_MUTEX pthread_mutex_t
#define HEIMDAL_MUTEX_lock(m) pthread_mutex_lock(m)
#define HEIMDAL_MUTEX_unlock(m) pthread_mutex_unlock(m)
#define HEIMDAL_MUTEX_destroy(m) pthread_mutex_destroy(m)
+#else
+/* The one location in hcrypto which uses mutexes is the PRNG
+ * code. As this code takes no locks, never yields, and does no
+ * I/O through the LWP IO Manager, it cannot be pre-empted, so
+ * it is safe to simply remove the locks in this case
+ */
+#define HEIMDAL_MUTEX int
+#define HEIMDAL_MUTEX_INITIALIZER 0
+#define HEIMDAL_MUTEX_init(m) do { (void)(m); } while(0)
+#define HEIMDAL_MUTEX_lock(m) do { (void)(m); } while(0)
+#define HEIMDAL_MUTEX_unlock(m) do { (void)(m); } while(0)
+#define HEIMDAL_MUTEX_destroy(m) do { (void)(m); } while(0)
+#endif
+