| TARGET:=target |
| SRC:=src/main/java |
| SRC_NATIVE:=src/main/native |
| include $(SRC)/com/intel/chimera/VERSION |
| |
| ifndef JAVA_HOME |
| $(error Set JAVA_HOME environment variable) |
| endif |
| |
| |
| JAVA := "$$JAVA_HOME/bin/java" |
| JAVAC := "$$JAVA_HOME/bin/javac" |
| JAVAH := "$$JAVA_HOME/bin/javah" |
| |
| OSINFO_CLASS := com.intel.chimera.utils.OSInfo |
| OSINFO_PROG := lib/com/intel/chimera/utils/OSInfo.class |
| |
| ## building OSInfo.java |
| $(info compiling OSInfo.java) |
| $(shell mkdir -p lib) |
| $(shell $(JAVAC) src/main/java/com/intel/chimera/utils/OSInfo.java -d lib) |
| |
| OS_NAME := $(shell $(JAVA) -cp lib $(OSINFO_CLASS) --os) |
| OS_ARCH := $(shell $(JAVA) -cp lib $(OSINFO_CLASS) --arch) |
| LIB_FOLDER := $(shell $(JAVA) -cp lib $(OSINFO_CLASS)) |
| IBM_JDK_LIB := lib/inc_ibm |
| |
| # Windows uses different path separators |
| ifeq ($(OS_NAME),Windows) |
| sep := ; |
| else |
| sep := : |
| endif |
| |
| chimera := chimera-$(VERSION) |
| |
| |
| jni_md := $(shell find -L "$(JAVA_HOME)" -name jni_md.h | head -1) |
| ifneq ($(jni_md),) |
| jni_include := $(shell dirname "$(jni_md)") |
| endif |
| |
| |
| # os=Default is meant to be generic unix/linux |
| |
| known_os_archs := Linux-x86 Linux-x86_64 Linux-arm Linux-armhf Linux-ppc Linux-ppc64 Mac-x86 Mac-x86_64 FreeBSD-x86_64 Windows-x86 Windows-x86_64 SunOS-x86 SunOS-sparc SunOS-x86_64 AIX-ppc64 |
| os_arch := $(OS_NAME)-$(OS_ARCH) |
| IBM_JDK_7 := $(findstring IBM, $(shell $(JAVA) -version 2>&1 | grep IBM | grep "JRE 1.7")) |
| |
| ifeq (,$(findstring $(strip $(os_arch)),$(known_os_archs))) |
| os_arch := Default |
| endif |
| |
| os_folder := $(shell echo $(OS_NAME) | tr A-Z a-z) |
| |
| ifneq ($(IBM_JDK_7),) |
| $(shell mkdir -p $(IBM_JDK_LIB)) |
| $(shell cp $(JAVA_HOME)/include/jniport.h $(IBM_JDK_LIB)) |
| $(shell sed -i "s|#define JNIEXPORT *$$|#define JNIEXPORT __attribute__((__visibility__(\"default\")))|" $(IBM_JDK_LIB)/jniport.h) |
| $(shell sed -i "s|typedef long long jlong;.*|/*typedef long long jlong;*/|" $(IBM_JDK_LIB)/jniport.h) |
| $(shell cp $(JAVA_HOME)/include/$(os_folder)/jni_md.h $(IBM_JDK_LIB)) |
| $(shell sed -i "s|#define JNIEXPORT|#define JNIEXPORT __attribute__((__visibility__(\"default\")))|" $(IBM_JDK_LIB)/jni_md.h) |
| $(shell sed -i "s|typedef long long jlong;.*|/*typedef long long jlong;*/|" $(IBM_JDK_LIB)/jni_md.h) |
| endif |
| |
| # cross-compilation toolchain prefix (e.g. "arm-linux-gnueabi-") |
| CROSS_PREFIX := |
| |
| Default_CC := $(CROSS_PREFIX)gcc |
| Default_CXX := $(CROSS_PREFIX)g++ |
| Default_STRIP := $(CROSS_PREFIX)strip |
| Default_CFLAGS := -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden |
| Default_CXXFLAGS := -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden |
| Default_LINKFLAGS := -shared -static |
| Default_LIBNAME := libchimera.so |
| Default_CHIMERA_FLAGS := |
| |
| Linux-x86_CC := $(CROSS_PREFIX)gcc |
| Linux-x86_CXX := $(CROSS_PREFIX)g++ |
| Linux-x86_STRIP := $(CROSS_PREFIX)strip |
| ifeq ($(IBM_JDK_7),) |
| Linux-x86_CXXFLAGS := -include lib/inc_linux/jni_md.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -m32 |
| Linux-x86_CFLAGS := -include lib/inc_linux/jni_md.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -m32 |
| else |
| Linux-x86_CXXFLAGS := -include $(IBM_JDK_LIB)/jni_md.h -include $(IBM_JDK_LIB)/jniport.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -m32 |
| Linux-x86_CFLAGS := -include $(IBM_JDK_LIB)/jni_md.h -include $(IBM_JDK_LIB)/jniport.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -m32 |
| endif |
| Linux-x86_LINKFLAGS := -shared -static-libgcc -static-libstdc++ |
| Linux-x86_LIBNAME := libchimera.so |
| Linux-x86_CHIMERA_FLAGS:= |
| |
| Linux-x86_64_CC := $(CROSS_PREFIX)gcc |
| Linux-x86_64_CXX := $(CROSS_PREFIX)g++ |
| Linux-x86_64_STRIP := $(CROSS_PREFIX)strip |
| ifeq ($(IBM_JDK_7),) |
| Linux-x86_64_CXXFLAGS := -Ilib/inc_linux -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -m64 |
| Linux-x86_64_CFLAGS := -Ilib/inc_linux -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -m64 |
| else |
| Linux-x86_64_CXXFLAGS := -include $(IBM_JDK_LIB)/jni_md.h -include $(IBM_JDK_LIB)/jniport.h -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -m64 |
| Linux-x86_64_CFLAGS := -include $(IBM_JDK_LIB)/jni_md.h -include $(IBM_JDK_LIB)/jniport.h -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -m64 |
| endif |
| Linux-x86_64_LINKFLAGS := -shared -static-libgcc -static-libstdc++ |
| Linux-x86_64_LIBNAME := libchimera.so |
| Linux-x86_64_CHIMERA_FLAGS := |
| |
| Linux-ppc_CC := gcc |
| Linux-ppc_CXX := g++ |
| Linux-ppc_STRIP := strip |
| ifeq ($(IBM_JDK_7),) |
| Linux-ppc_CXXFLAGS := -DHAVE_CONFIG_H -Ilib/inc_linux -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -m32 |
| Linux-ppc_CFLAGS := -DHAVE_CONFIG_H -Ilib/inc_linux -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -m32 |
| else |
| Linux-ppc_CXXFLAGS := -DHAVE_CONFIG_H -include lib/inc_linux/jni_md.h -include $(IBM_JDK_LIB)/jniport.h -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux -O2 -fPIC -m32 |
| Linux-ppc_CFLAGS := -DHAVE_CONFIG_H -include lib/inc_linux/jni_md.h -include $(IBM_JDK_LIB)/jniport.h -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux -O2 -fPIC -m32 |
| endif |
| Linux-ppc_LINKFLAGS := -shared -static-libgcc -static-libstdc++ |
| Linux-ppc_LIBNAME := libchimera.so |
| Linux-ppc_CHIMERA_FLAGS := |
| |
| Linux-ppc64_CC := gcc |
| Linux-ppc64_CXX := g++ |
| Linux-ppc64_STRIP := strip |
| ifeq ($(IBM_JDK_7),) |
| Linux-ppc64_CXXFLAGS := -DHAVE_CONFIG_H -Ilib/inc_linux -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -m64 |
| Linux-ppc64_CFLAGS := -DHAVE_CONFIG_H -Ilib/inc_linux -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -m64 |
| else |
| Linux-ppc64_CXXFLAGS := -DHAVE_CONFIG_H -include $(IBM_JDK_LIB)/jni_md.h -include $(IBM_JDK_LIB)/jniport.h -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux -O2 -fPIC -m64 |
| Linux-ppc64_CFLAGS := -DHAVE_CONFIG_H -include $(IBM_JDK_LIB)/jni_md.h -include $(IBM_JDK_LIB)/jniport.h -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux -O2 -fPIC -m64 |
| endif |
| Linux-ppc64_LINKFLAGS := -shared -static-libgcc -static-libstdc++ |
| Linux-ppc64_LIBNAME := libchimera.so |
| Linux-ppc64_CHIMERA_FLAGS := |
| |
| AIX-ppc64_CC := gcc |
| AIX-ppc64_CXX := g++ |
| AIX-ppc64_STRIP := strip -X64 |
| AIX-ppc64_LIBNAME := libchimera.a |
| ifeq ($(IBM_JDK_7),) |
| AIX-ppc64_CXXFLAGS := -DHAVE_CONFIG_H -Ilib/inc_linux -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -m64 |
| AIX-ppc64_CFLAGS := -DHAVE_CONFIG_H -Ilib/inc_linux -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -m64 |
| else |
| AIX-ppc64_CXXFLAGS := -DHAVE_CONFIG_H -I$(JAVA_HOME)/include/aix -Ilib/inc_ibm -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -maix64 |
| AIX-ppc64_CFLAGS := -DHAVE_CONFIG_H -I$(JAVA_HOME)/include/aix -Ilib/inc_ibm -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -maix64 |
| endif |
| AIX-ppc64_LINKFLAGS := -shared -static-libgcc -static-libstdc++ -lcrypt |
| AIX-ppc64_CHIMERA_FLAGS := |
| |
| SunOS-x86_CC := gcc |
| SunOS-x86_CXX := g++ |
| SunOS-x86_STRIP := strip |
| SunOS-x86_CFLAGS := -include lib/inc_linux/jni_md.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden |
| SunOS-x86_CXXFLAGS := -include lib/inc_linux/jni_md.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden |
| SunOS-x86_LINKFLAGS := -shared -static-libgcc -static-libstdc++ |
| SunOS-x86_LIBNAME := libchimera.so |
| SunOS-x86_CHIMERA_FLAGS := |
| |
| SunOS-sparc_CC := gcc |
| SunOS-sparc_CXX := g++ |
| SunOS-sparc_STRIP := strip |
| SunOS-sparc_CFLAGS := -include lib/inc_linux/jni_md.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden |
| SunOS-sparc_CXXFLAGS := -include lib/inc_linux/jni_md.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden |
| SunOS-sparc_LINKFLAGS := -shared -static-libgcc -static-libstdc++ |
| SunOS-sparc_LIBNAME := libchimera.so |
| SunOS-sparc_CHIMERA_FLAGS := |
| |
| SunOS-x86_64_CC := gcc |
| SunOS-x86_64_CXX := g++ |
| SunOS-x86_64_STRIP := strip |
| SunOS-x86_64_CFLAGS := -include lib/inc_linux/jni_md.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -m64 |
| SunOS-x86_64_CXXFLAGS := -include lib/inc_linux/jni_md.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -m64 |
| SunOS-x86_64_LINKFLAGS := -shared -static-libgcc -static-libstdc++ |
| SunOS-x86_64_LIBNAME := libchimera.so |
| SunOS-x86_64_CHIMERA_FLAGS := |
| |
| # '-include lib/inc_linux/jni_md.h' is used to force the use of our version, |
| # which defines JNIEXPORT differently; otherwise, since OpenJDK includes |
| # jni_md.h in same directory as jni.h, the include path is ignored when |
| # jni_md.h is included from jni.h |
| |
| Linux-arm_CC := $(CROSS_PREFIX)gcc |
| Linux-arm_CXX := $(CROSS_PREFIX)g++ |
| Linux-arm_STRIP := $(CROSS_PREFIX)strip |
| Linux-arm_CFLAGS := -include lib/inc_linux/jni_md.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -mfloat-abi=softfp |
| Linux-arm_CXXFLAGS := -include lib/inc_linux/jni_md.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -mfloat-abi=softfp |
| Linux-arm_LINKFLAGS := -shared -static-libgcc |
| Linux-arm_LIBNAME := libchimera.so |
| Linux-arm_CHIMERA_FLAGS:= |
| |
| Linux-armhf_CC := $(CROSS_PREFIX)gcc |
| Linux-armhf_CXX := $(CROSS_PREFIX)g++ |
| Linux-armhf_STRIP := $(CROSS_PREFIX)strip |
| Linux-armhf_CFLAGS := -include lib/inc_linux/jni_md.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -mfloat-abi=hard |
| Linux-armhf_CXXFLAGS := -include lib/inc_linux/jni_md.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -mfloat-abi=hard |
| Linux-armhf_LINKFLAGS := -shared -static-libgcc |
| Linux-armhf_LIBNAME := libchimera.so |
| Linux-armhf_CHIMERA_FLAGS:= |
| |
| Mac-x86_CC := gcc -arch i386 |
| Mac-x86_CXX := g++ -arch i386 |
| Mac-x86_STRIP := strip -x |
| Mac-x86_CFLAGS := -Ilib/inc_mac -I$(JAVA_HOME)/include -O2 -fPIC -mmacosx-version-min=10.4 -fvisibility=hidden |
| Mac-x86_CXXFLAGS := -Ilib/inc_mac -I$(JAVA_HOME)/include -O2 -fPIC -mmacosx-version-min=10.4 -fvisibility=hidden |
| Mac-x86_LINKFLAGS := -dynamiclib -static-libgcc |
| Mac-x86_LIBNAME := libchimera.jnilib |
| Mac-x86_CHIMERA_FLAGS := |
| |
| Mac-x86_64_CC := gcc -arch $(OS_ARCH) |
| Mac-x86_64_CXX := g++ -arch $(OS_ARCH) |
| Mac-x86_64_STRIP := strip -x |
| Mac-x86_64_CFLAGS := -Ilib/inc_mac -I$(JAVA_HOME)/include -O2 -fPIC -mmacosx-version-min=10.5 -fvisibility=hidden |
| Mac-x86_64_CXXFLAGS := -Ilib/inc_mac -I$(JAVA_HOME)/include -O2 -fPIC -mmacosx-version-min=10.5 -fvisibility=hidden |
| Mac-x86_64_LINKFLAGS := -dynamiclib |
| Mac-x86_64_LIBNAME := libchimera.jnilib |
| Mac-x86_64_CHIMERA_FLAGS := |
| |
| FreeBSD-x86_64_CC := $(CROSS_PREFIX)gcc |
| FreeBSD-x86_64_CXX := $(CROSS_PREFIX)g++ |
| FreeBSD-x86_64_STRIP := $(CROSS_PREFIX)strip |
| FreeBSD-x86_64_CFLAGS := -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden |
| FreeBSD-x86_64_CXXFLAGS := -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden |
| FreeBSD-x86_64_LINKFLAGS := -shared -static-libgcc |
| FreeBSD-x86_64_LIBNAME := libchimera.so |
| FreeBSD-x86_64_CHIMERA_FLAGS := |
| |
| Windows-x86_CC := $(CROSS_PREFIX)gcc |
| Windows-x86_CXX := $(CROSS_PREFIX)g++ |
| Windows-x86_STRIP := $(CROSS_PREFIX)strip |
| Windows-x86_CFLAGS := -Ilib/inc_win -O2 |
| Windows-x86_CXXFLAGS := -Ilib/inc_win -O2 |
| Windows-x86_LINKFLAGS := -Wl,--kill-at -shared -static |
| Windows-x86_LIBNAME := chimera.dll |
| Windows-x86_CHIMERA_FLAGS := |
| |
| Windows-x86_64_CC := $(CROSS_PREFIX)gcc |
| Windows-x86_64_CXX := $(CROSS_PREFIX)g++ |
| Windows-x86_64_STRIP := $(CROSS_PREFIX)strip |
| Windows-x86_64_CFLAGS := -Ilib/inc_win -O2 |
| Windows-x86_64_CXXFLAGS := -Ilib/inc_win -O2 |
| Windows-x86_64_LINKFLAGS := -Wl,--kill-at -shared -static |
| Windows-x86_64_LIBNAME := chimera.dll |
| Windows-x86_64_CHIMERA_FLAGS := |
| |
| |
| STRIP := $($(os_arch)_STRIP) |
| CC := $($(os_arch)_CC) |
| CXX := $($(os_arch)_CXX) |
| STRIP := $($(os_arch)_STRIP) |
| CFLAGS := $($(os_arch)_CXXFLAGS) |
| CXXFLAGS := $($(os_arch)_CXXFLAGS) |
| LINKFLAGS := $($(os_arch)_LINKFLAGS) |
| LIBNAME := $($(os_arch)_LIBNAME) |
| CHIMERA_FLAGS := $($(os_arch)_CHIMERA_FLAGS) |
| |
| |
| CFLAGS := $(CFLAGS) -Ilib/include -I/usr/include -I"$(SRC_NATIVE)/com/intel/chimera/" |
| CXXFLAGS := $(CXXFLAGS) -Ilib/include -I/usr/include |
| ifneq ($(jni_include),) |
| CFLAGS := $(CFLAGS) -I"$(jni_include)" -I"$(TARGET)/jni-classes/com/intel/chimera/cipher" -I"$(TARGET)/jni-classes/com/intel/chimera/random" |
| CXXFLAGS := $(CXXFLAGS) -I"$(jni_include)" -I"$(TARGET)/jni-classes/com/intel/chimera/cipher" -I"$(TARGET)/jni-classes/com/intel/chimera/random" |
| endif |