From 00e7898154152984327ec9ba3237c1906cef38ec Mon Sep 17 00:00:00 2001 From: "Chris West (Faux)" Date: Wed, 8 Aug 2012 17:11:43 +0100 Subject: [PATCH 1/4] use javac to locate java home, to find the jdk --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index cbb27b2..6e1a019 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ SSE2 := yes TARGET ?= $(shell uname -s 2>/dev/null || echo unknown) override TARGET := $(shell echo $(TARGET) | tr A-Z a-z) -JAVA_HOME ?= $(realpath $(dir $(realpath $(shell which java)))../) +JAVA_HOME ?= $(realpath $(dir $(realpath $(shell which javac)))../) ifeq ($(TARGET), darwin) DYLIB := dylib From d12fbb17ae4136e88741dc643b1648ca1e70760a Mon Sep 17 00:00:00 2001 From: "Chris West (Faux)" Date: Wed, 8 Aug 2012 17:39:30 +0100 Subject: [PATCH 2/4] win32 and win64 binaries, from Debian's mingw $ acp mingw32 mingw32-binutils mingw32-runtime mingw-w64 mingw-w64-tools \ | egrep '(^[a-z])|(\*\*\*)' \ | sed -n 'N;s/\n//;s/\*\*\* //p'; \ uname -a; \ cat /etc/debian_version mingw32: 4.2.1.dfsg-2 0 mingw32-binutils: 2.20-0.2 0 mingw32-runtime: 3.13-1 0 mingw-w64: 2.0.3-1 0 Linux deb 3.2.0-3-amd64 #1 SMP Thu Jun 28 09:07:26 UTC 2012 x86_64 GNU/Linux wheezy/sid --- Makefile | 11 +++++++++++ src/main/c/crypto_scrypt-nosse.c | 3 +++ src/main/c/crypto_scrypt-sse.c | 2 ++ src/main/include/config.h | 2 ++ .../resources/lib/x86/windows/libscrypt.dll | Bin 0 -> 27892 bytes .../resources/lib/x86_64/windows/libscrypt.dll | Bin 0 -> 120262 bytes 6 files changed, 18 insertions(+) create mode 100755 src/main/resources/lib/x86/windows/libscrypt.dll create mode 100755 src/main/resources/lib/x86_64/windows/libscrypt.dll diff --git a/Makefile b/Makefile index 6e1a019..c59283a 100644 --- a/Makefile +++ b/Makefile @@ -10,6 +10,17 @@ ifeq ($(TARGET), darwin) DYLIB := dylib LDFLAGS := -dynamiclib -Wl,-undefined -Wl,dynamic_lookup -Wl,-single_module CFLAGS += -I $(JAVA_HOME)/Headers/ +else ifeq ($(TARGET), win32) + DYLIB := dll + LDFLAGS := -shared + CC := i586-mingw32msvc-cc + SSE2 := + CFLAGS += -I $(JAVA_HOME)/include -I $(JAVA_HOME)/include/$(TARGET) -DNO_HAVE_POSIX_MEMALIGN +else ifeq ($(TARGET), win64) + DYLIB := dll + LDFLAGS := -shared + CC := x86_64-w64-mingw32-gcc + CFLAGS += -I $(JAVA_HOME)/include -I $(JAVA_HOME)/include/$(TARGET) -DNO_HAVE_POSIX_MEMALIGN else DYLIB := so LDFLAGS := -shared diff --git a/src/main/c/crypto_scrypt-nosse.c b/src/main/c/crypto_scrypt-nosse.c index 5f6690b..edf83d8 100644 --- a/src/main/c/crypto_scrypt-nosse.c +++ b/src/main/c/crypto_scrypt-nosse.c @@ -29,7 +29,10 @@ #include "scrypt_platform.h" #include + +#ifdef HAVE_POSIX_MEMALIGN #include +#endif #include #include diff --git a/src/main/c/crypto_scrypt-sse.c b/src/main/c/crypto_scrypt-sse.c index 3da4903..348002d 100644 --- a/src/main/c/crypto_scrypt-sse.c +++ b/src/main/c/crypto_scrypt-sse.c @@ -29,7 +29,9 @@ #include "scrypt_platform.h" #include +#ifdef HAVE_POSIX_MEMALIGN #include +#endif #include #include diff --git a/src/main/include/config.h b/src/main/include/config.h index 1f0dc1e..ba7d8d5 100644 --- a/src/main/include/config.h +++ b/src/main/include/config.h @@ -2,8 +2,10 @@ #define HAVE_MMAP 1 #ifndef __ANDROID__ +#ifndef NO_HAVE_POSIX_MEMALIGN #define HAVE_POSIX_MEMALIGN 1 #endif +#endif #ifdef __ANDROID__ #include diff --git a/src/main/resources/lib/x86/windows/libscrypt.dll b/src/main/resources/lib/x86/windows/libscrypt.dll new file mode 100755 index 0000000000000000000000000000000000000000..cf1ac6b55fb7a9641aaf230d1c34cc0cea2f0979 GIT binary patch literal 27892 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/lib/x86_64/windows/libscrypt.dll b/src/main/resources/lib/x86_64/windows/libscrypt.dll new file mode 100755 index 0000000000000000000000000000000000000000..a4dc08f37466d1fe5b2be1c14a5771b81dde9855 GIT binary patch literal 120262 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 literal 0 HcmV?d00001 From 799a94bd7457b30ccaced4f57cb5d69797d03e6e Mon Sep 17 00:00:00 2001 From: Tom Fitzhenry Date: Wed, 11 Jun 2014 00:54:49 +0100 Subject: [PATCH 3/4] Load the libs under Windows --- src/main/java/com/lambdaworks/jni/JarLibraryLoader.java | 3 +++ src/main/java/com/lambdaworks/jni/Platform.java | 1 + 2 files changed, 4 insertions(+) diff --git a/src/main/java/com/lambdaworks/jni/JarLibraryLoader.java b/src/main/java/com/lambdaworks/jni/JarLibraryLoader.java index fd9d3ab..892b656 100644 --- a/src/main/java/com/lambdaworks/jni/JarLibraryLoader.java +++ b/src/main/java/com/lambdaworks/jni/JarLibraryLoader.java @@ -134,6 +134,9 @@ private List libCandidates(Platform platform, String name) { candidates.add(sb + ".dylib"); candidates.add(sb + ".jnilib"); break; + case windows: + candidates.add(sb + ".dll"); + break; case linux: case freebsd: candidates.add(sb + ".so"); diff --git a/src/main/java/com/lambdaworks/jni/Platform.java b/src/main/java/com/lambdaworks/jni/Platform.java index 953d593..e9df619 100644 --- a/src/main/java/com/lambdaworks/jni/Platform.java +++ b/src/main/java/com/lambdaworks/jni/Platform.java @@ -27,6 +27,7 @@ public enum Arch { } public enum OS { + windows ("windows .*"), darwin ("darwin|mac os x"), freebsd("freebsd"), linux ("linux"); From 57da24d4743c96b7521710b438e9e8135567fe06 Mon Sep 17 00:00:00 2001 From: Tom Fitzhenry Date: Tue, 15 Jul 2014 17:11:31 +0100 Subject: [PATCH 4/4] Add prerequisties for building Windows DLL --- README | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README b/README index 873c303..565c338 100644 --- a/README +++ b/README @@ -82,3 +82,10 @@ Building Native Implementation A precompiled native library for Android 2.3 running on ARM is located in src/android/resources/lib/arm5/libscrypt.so. If placed in an .apk file's lib/armeabi directory it will be automatically loaded. + + To build the Windows shared library, you need MinGW. On Ubuntu, this is: + * mingw32 + * mingw32-binutils + * mingw32-runtime + * mingw-w64 + * mingw-w64-tools