diff -Naur old/Makefile new/Makefile
--- old/Makefile	2010-01-15 23:19:25.000000000 -0800
+++ new/Makefile	2010-01-15 23:19:51.000000000 -0800
@@ -10,7 +10,13 @@
 VERSION_BUILD  := $(shell date +"%s")
 VERSION_SUFFIX := 
 
+OSNAME := $(shell uname)
+
+ifeq ($(OSNAME), Darwin)
+SUBDIRS := tpmd tddl
+else
 SUBDIRS := tpmd tpmd_dev tddl
+endif
 
 all: version all-recursive
 
diff -Naur old/tddl/Makefile new/tddl/Makefile
--- old/tddl/Makefile	2010-01-15 23:19:25.000000000 -0800
+++ new/tddl/Makefile	2010-01-15 23:22:31.000000000 -0800
@@ -9,21 +9,40 @@
            -Wwrite-strings -Wsign-compare -Wno-multichar
 #WFLAGS += -Wextra -Wcast-qual -Wmissing-prototypes -Wmissing-declarations -Wstrict-aliasing
 CFLAGS += $(WFLAGS) -O2
+OSNAME := $(shell uname)
 
+ifeq ($(OSNAME), Darwin)
+TDDL_NAME := libtddl
+TDDL    := $(TDDL_NAME).dylib
+TDDLSO1 := $(TDDL_NAME).1.2.dylib
+TDDLSO2 := $(TDDL_NAME).1.2.0.dylib
+
+LIBDIR := /usr/local/lib/
+INCDIR := /usr/local/include/
+else
 TDDL    := libtddl.so
 TDDLSO1 := $(TDDL).1.2
 TDDLSO2 := $(TDDL).1.2.0
 
-LIBDIR := /usr/lib/
-INCDIR := /usr/include/
+LIBDIR := /usr/local/lib/
+INCDIR := /usr/local/include/
+endif
 
 all: $(TDDL)
 
+ifeq ($(OSNAME), Darwin)
+$(TDDL): tddl.c tddl.h
+	$(CC) $(CFLAGS) -c -o tddl.o tddl.c
+	$(CC) -dynamiclib -o $(TDDLSO2) -install_name $(LIBDIR)/$(TDDLSO1) tddl.o
+	test -s $(TDDLSO1) || ln -s $(TDDLSO2) $(TDDLSO1)
+	test -s $(TDDL) || ln -s $(TDDLSO1) $(TDDL)
+else
 $(TDDL): tddl.c tddl.h
 	$(CC) $(CFLAGS) -fPIC -c -o tddl.o tddl.c
 	$(CC) -shared -o $(TDDLSO2) -Wl,-soname,$(TDDLSO1) tddl.o
 	test -s $(TDDLSO1) || ln -s $(TDDLSO2) $(TDDLSO1)
 	test -s $(TDDL) || ln -s $(TDDLSO1) $(TDDL)
+endif
 
 test_tddl: test_tddl.c
 	$(CC) $(CFLAGS) -I. -L. test_tddl.c -ltddl -o test_tddl
@@ -32,16 +51,31 @@
 	rm -rf $(TDDL) $(TDDLSO1) $(TDDLSO2) *.o test_tddl
 
 INSTALL ?= install
+MKDIR ?= mkdir
 
+ifeq ($(OSNAME), Darwin)
+install: $(TDDL)
+	$(MKDIR) -p $(DESTDIR)/$(INCDIR)
+	$(INSTALL) -m 644 tddl.h $(DESTDIR)/$(INCDIR)
+	$(MKDIR) -p $(DESTDIR)/$(LIBDIR)
+	$(INSTALL) -m 644 $(TDDLSO2) $(DESTDIR)/$(LIBDIR)
+	cd $(DESTDIR)/$(LIBDIR); ln -s $(TDDLSO2) $(TDDLSO1); ln -s $(TDDLSO1) $(TDDL); cd -
+else
 install: $(TDDL)
 	$(INSTALL) -D -d $(DESTDIR)/$(INCDIR)
 	$(INSTALL) -m 644 tddl.h $(DESTDIR)/$(INCDIR)
 	$(INSTALL) -D -d $(DESTDIR)/$(LIBDIR)
 	$(INSTALL) -m 644 $(TDDLSO2) $(DESTDIR)/$(LIBDIR)
 	cd $(DESTDIR)/$(LIBDIR); ln -s $(TDDLSO2) $(TDDLSO1); ln -s $(TDDLSO1) $(TDDL); cd -
+endif
 
+ifeq ($(OSNAME), Darwin)
+test: test_tddl
+	DYLD_LIBRARY_PATH=. ./test_tddl
+else
 test: test_tddl
 	LD_LIBRARY_PATH=. ./test_tddl
+endif
 
 .PHONY: all clean install test
 
diff -Naur old/tddl/tddl.c new/tddl/tddl.c
--- old/tddl/tddl.c	2010-01-15 23:19:25.000000000 -0800
+++ new/tddl/tddl.c	2010-01-15 23:19:51.000000000 -0800
@@ -27,7 +27,11 @@
 
 /* device and socket names */
 static const char *tpm_device_name = "/dev/tpm";
+#if __APPLE__
+static const char *tpmd_socket_name = "/tmp/tpm/tpmd_socket:0";
+#else
 static const char *tpmd_socket_name = "/var/run/tpm/tpmd_socket:0";
+#endif
 
 /* TPM device handle */
 static int tddli_dh = -1;
diff -Naur old/tpm/tpm_deprecated.c new/tpm/tpm_deprecated.c
--- old/tpm/tpm_deprecated.c	2010-01-15 23:19:25.000000000 -0800
+++ new/tpm/tpm_deprecated.c	2010-01-15 23:19:51.000000000 -0800
@@ -416,7 +416,7 @@
   buf = ptr = tpm_malloc(len);
   if (buf == NULL) return TPM_NOSPACE;
   if (tpm_rsa_decrypt(&ephKey->key, scheme, encNewAuth, newAuthSize, 
-    buf, &size)
+    buf, (size_t*)&size)
     || (len = size) == 0
     || tpm_unmarshal_TPM_CHANGEAUTH_VALIDATE(&ptr, &len, &a1)) {
     debug("TPM_ChangeAuthAsymFinish(): tpm_rsa_decrypt() failed.");
diff -Naur old/tpmd/Makefile new/tpmd/Makefile
--- old/tpmd/Makefile	2010-01-15 23:19:25.000000000 -0800
+++ new/tpmd/Makefile	2010-01-15 23:19:51.000000000 -0800
@@ -10,7 +10,8 @@
 CFLAGS  += $(WFLAGS) -g -I.. -I. -O2 -fno-strict-aliasing
 LDFLAGS += -lgmp
 
-BINDIR  := /usr/sbin/
+DESTTOP := /usr/local/
+BINDIR  := $(DESTTOP)/sbin
 
 TPMD    := tpmd
 DIRS    := ../tpm ../crypto
@@ -30,11 +31,13 @@
 TPMD_USER  ?= tss
 TPMD_GROUP ?= tss
 INSTALL    ?= install
+MKDIR      ?= mkdir
 
 install: $(TPMD)
-	$(INSTALL) -m 755 -o $(TPMD_USER) -g $(TPMD_GROUP) -d $(DESTDIR)/var/lib/tpm
-	$(INSTALL) -m 755 -o $(TPMD_USER) -g $(TPMD_GROUP) -d $(DESTDIR)/var/run/tpm
-	$(INSTALL) -D -d $(DESTDIR)/$(BINDIR)
+	/bin/sh ./platform_useradd_tss
+	$(INSTALL) -m 755 -o $(TPMD_USER) -g $(TPMD_GROUP) -d $(DESTDIR)/$(DESTTOP)/var/lib/tpm
+	$(INSTALL) -m 755 -o $(TPMD_USER) -g $(TPMD_GROUP) -d $(DESTDIR)/$(DESTTOP)/var/run/tpm
+	$(MKDIR) -p $(DESTDIR)/$(BINDIR)
 	$(INSTALL) -m 755 $(TPMD) $(DESTDIR)/$(BINDIR)
 
 .PHONY: all clean install
diff -Naur old/tpmd/platform_useradd_tss new/tpmd/platform_useradd_tss
--- old/tpmd/platform_useradd_tss	1969-12-31 16:00:00.000000000 -0800
+++ new/tpmd/platform_useradd_tss	2010-01-15 23:19:51.000000000 -0800
@@ -0,0 +1,42 @@
+#! /bin/bash
+
+PATH=/bin:/sbin:/usr/bin:/usr/sbin:
+
+OSNAME=`uname`
+if [ "$OSNAME" == "Darwin" ] 
+then
+
+    LAST_USED_UID=`sudo dscl . -list /Users UniqueID | sort -n  -k2 | tail -1 | awk '{print $2}'`
+    if [ "$?" != 0 ]
+    then
+        exit 1
+    fi
+    NEXT_UID=$[$LAST_USED_UID + 1000]
+
+    LAST_USED_GID=`sudo dscl . -list /Groups PrimaryGroupID | sort -n  -k2 | tail -1 | awk '{print $2}'`
+    if [ "$?" != 0 ]
+    then
+        exit 1
+    fi
+    NEXT_GID=$[$LAST_USED_GID + 1000]
+
+    sudo dscl . -create /Groups/tss PrimaryGroupID $NEXT_GID || exit 1
+
+    sudo dscl . -create /Users/tss UniqueID $NEXT_UID
+    if [ "$?" != 0 ]
+    then
+        sudo dscl . -delete /Groups/tss
+        exit 1
+    fi
+
+    sudo dscl . -append /Users/tss PrimaryGroupID $NEXT_GID
+    if [ "$?" != 0 ]
+    then
+        sudo dscl . -delete /Groups/tss
+        sudo dscl . -delete /Users/tss
+        exit 1
+    fi
+
+else
+    useradd -r -U tss || true # hope that failure means tss already exists
+fi
diff -Naur old/tpmd/tpm_emulator_config.h new/tpmd/tpm_emulator_config.h
--- old/tpmd/tpm_emulator_config.h	2010-01-15 23:19:25.000000000 -0800
+++ new/tpmd/tpm_emulator_config.h	2010-01-15 23:19:51.000000000 -0800
@@ -131,6 +131,24 @@
 #define BE16_TO_CPU(x) be16toh(x)
 #define LE16_TO_CPU(x) le16toh(x)
 
+#elif defined (__APPLE__)
+
+#include <libkern/OSByteOrder.h>
+
+#define CPU_TO_BE64(x) OSSwapHostToBigInt64(x)
+#define CPU_TO_LE64(x) OSSwapHostToLittleInt64(x)
+#define CPU_TO_BE32(x) OSSwapHostToBigInt32(x)
+#define CPU_TO_LE32(x) OSSwapHostToLittleInt32(x)
+#define CPU_TO_BE16(x) OSSwapHostToBigInt16(x)
+#define CPU_TO_LE16(x) OSSwapHostToLittleInt16(x)
+
+#define BE64_TO_CPU(x) OSSwapBigToHostInt64(x)
+#define LE64_TO_CPU(x) OSSwapLittleToHostInt64(x)
+#define BE32_TO_CPU(x) OSSwapBigToHostInt32(x)
+#define LE32_TO_CPU(x) OSSwapLittleToHostInt32(x)
+#define BE16_TO_CPU(x) OSSwapBigToHostInt16(x)
+#define LE16_TO_CPU(x) OSSwapLittleToHostInt16(x)
+
 #endif
 
 #endif /* _TPM_EMULATOR_CONFIG_H_ */
diff -Naur old/tpmd/tpmd.c new/tpmd/tpmd.c
--- old/tpmd/tpmd.c	2010-01-15 23:19:25.000000000 -0800
+++ new/tpmd/tpmd.c	2010-01-15 23:19:51.000000000 -0800
@@ -42,9 +42,15 @@
 static int is_daemon = 0;
 static int opt_debug = 0;
 static int opt_foreground = 0;
+#if defined (__APPLE__)
+static const char *opt_socket_name = "/tmp/tpm/" TPM_DAEMON_NAME "_socket:0";
+static const char *opt_storage_file = "/tmp/tpm/tpm_emulator-1.2."
+                                      TPM_STR(VERSION_MAJOR) "." TPM_STR(VERSION_MINOR);
+#else
 static const char *opt_socket_name = "/var/run/tpm/" TPM_DAEMON_NAME "_socket:0";
-static const char *opt_storage_file = "/var/lib/tpm/tpm_emulator-1.2."
+static const char *opt_storage_file = "/var/run/tpm/tpm_emulator-1.2."
                                       TPM_STR(VERSION_MAJOR) "." TPM_STR(VERSION_MINOR);
+#endif
 static uid_t opt_uid = 0;
 static gid_t opt_gid = 0;
 static int tpm_startup = 2;
