1
include ../../../../build.mak
2
include ../../../../build/common.mak
4
ifneq ($(findstring android,$(TARGET_NAME)),)
6
ifeq ("$(JAVA_HOME)","")
7
# Set dummy JAVA_HOME as JNI is bundled in Android NDK, only need javac here
8
JAVA_HOME := $(dir $(shell which javac))
11
ifneq ($(findstring darwin,$(TARGET_NAME)),)
17
ifeq ($(OS),Windows_NT)
18
LIBPJSUA2_SO=$(OUT_DIR)/pjsua2.dll
21
LIBPJSUA2_SO=$(OUT_DIR)/libpjsua2.jnilib
24
LIBPJSUA2_SO=android/libs/armeabi/libpjsua2.so
26
LIBPJSUA2_SO=$(OUT_DIR)/libpjsua2.so
32
ifeq ("$(JAVA_HOME)","")
34
verify_jdk = $(shell test -d $(1)/include && test -d $(1)/lib && \
36
$(shell test -d $(1)/Headers && test -d $(1)/Libraries && \
38
$(shell test -x $(1)/bin/javac && echo bin1) \
39
$(shell test -x $(1)/Commands/javac && echo bin2) \
40
$(shell test -x $(1)/javac && echo bin3)
42
get_java_inc = $(if $(findstring inclib1,$(1)),$(2)/include,\
43
$(if $(findstring inclib2,$(1)),$(2)/Headers,))
44
get_java_lib = $(if $(findstring inclib1,$(1)),$(2)/lib,\
45
$(if $(findstring inclib2,$(1)),$(2)/Libraries,))
46
get_java_bin = $(if $(findstring bin1,$(1)),$(2)/bin,\
47
$(if $(findstring bin2,$(1)),$(2)/Commands,\
48
$(if $(findstring bin3,$(1)),$(2),)))
51
# Check with 'which javac'
52
WHICH_JAVAC := $(shell which javac)
53
ifneq ($(WHICH_JAVAC),)
54
WHICH_JAVAC := $(dir $(realpath $(WHICH_JAVAC)))
55
WHICH_JAVAC := $(patsubst %/bin/,%,$(WHICH_JAVAC))
56
TMP_RES := $(call verify_jdk,$(WHICH_JAVAC))
57
ifneq ($(findstring inclib,$(TMP_RES)),)
58
JAVA_HOME := $(WHICH_JAVAC)
59
JAVA_INC := $(call get_java_inc,$(TMP_RES),$(JAVA_HOME))
60
JAVA_LIB := $(call get_java_lib,$(TMP_RES),$(JAVA_HOME))
65
ifeq ($(OS)$(JAVA_HOME),darwin)
67
# Check with '/usr/libexec/java_home'
68
# (see https://developer.apple.com/library/mac/qa/qa1170/_index.html)
69
TMP_PATH := $(shell /usr/libexec/java_home)
70
ifneq ("$(TMP_PATH)","")
71
TMP_RES := $(call verify_jdk,$(TMP_PATH))
72
ifneq ($(findstring inclib,$(TMP_RES)),)
73
JAVA_HOME := $(TMP_PATH)
74
JAVA_INC := $(call get_java_inc,$(TMP_RES),$(JAVA_HOME))
75
JAVA_LIB := $(call get_java_lib,$(TMP_RES),$(JAVA_HOME))
80
# Check '/System/Library/Frameworks/JavaVM.framework'
81
FIXED_PATH := /System/Library/Frameworks/JavaVM.framework
82
TMP_RES := $(call verify_jdk,$(FIXED_PATH))
83
ifneq ($(findstring inclib,$(TMP_RES)),)
84
JAVA_HOME := $(FIXED_PATH)
85
JAVA_INC := $(call get_java_inc,$(TMP_RES),$(JAVA_HOME))
86
JAVA_LIB := $(call get_java_lib,$(TMP_RES),$(JAVA_HOME))
92
ifneq ($(findstring bin,$(TMP_RES)),)
93
JAVA_BIN := $(call get_java_bin,$(TMP_RES),$(JAVA_HOME))
96
# $(info TMP_RES = $(TMP_RES))
97
# $(info JAVA_HOME = $(JAVA_HOME))
98
# $(info JAVA_INC = $(JAVA_INC))
99
# $(info JAVA_LIB = $(JAVA_LIB))
100
# $(info JAVA_BIN = $(JAVA_BIN))
103
ifeq ("$(JAVA_HOME)","")
104
$(error Cannot determine JDK include/library path. \
105
Please define JAVA_HOME envvar)
108
ifeq ("$(JAVA_BIN)","")
109
JAVA_BIN := $(JAVA_HOME)/bin
110
$(warning Cannot determine JDK binary path. Set to $(JAVA_BIN))
115
JAVA_INC := $(JAVA_HOME)/include
116
JAVA_LIB := $(JAVA_HOME)/lib
117
ifeq (exists,$(shell test -d "$(JAVA_HOME)/bin" && echo exists))
118
JAVA_BIN := $(JAVA_HOME)/bin
120
JAVA_BIN := $(JAVA_HOME)
125
# Env settings, e.g: path to SWIG, JDK, java(.exe), javac(.exe)
127
MY_JAVA := "$(JAVA_BIN)/java"
128
MY_JAVAC := "$(JAVA_BIN)/javac"
129
MY_JNI_CFLAGS := -I"$(JAVA_INC)" -I"$(JAVA_INC)/win32" \
130
-I"$(JAVA_INC)/linux" -I"$(JAVA_INC)/darwin" -I.
131
MY_JNI_LDFLAGS := -L"$(JAVA_LIB)"
134
ifeq ($(OS),Windows_NT)
135
MY_JNI_LDFLAGS += -Wl,--kill-at
137
MY_JNI_CFLAGS += -fPIC
139
MY_JNI_CFLAGS+= -D__ANDROID__
144
MY_CFLAGS := $(PJ_CXXFLAGS) $(MY_JNI_CFLAGS) $(CFLAGS)
145
MY_LDFLAGS := $(PJ_LDXXFLAGS) $(PJ_LDXXLIBS) $(MY_JNI_LDFLAGS) $(LDFLAGS)
146
MY_PACKAGE_NAME := org.pjsip.pjsua2
148
MY_PACKAGE_PATH := android/src/$(subst .,/,$(MY_PACKAGE_NAME))
150
MY_PACKAGE_PATH := $(OUT_DIR)/$(subst .,/,$(MY_PACKAGE_NAME))
153
MY_APP_JAVA := android/src/$(subst .,/,$(MY_PACKAGE_NAME))/app/MyApp.java
155
.PHONY: all java install uninstall
157
all: $(LIBPJSUA2_SO) java
159
$(LIBPJSUA2_SO): $(OUT_DIR)/pjsua2_wrap.o
160
$(PJ_CXX) -shared -o $(LIBPJSUA2_SO) $(OUT_DIR)/pjsua2_wrap.o \
161
$(MY_CFLAGS) $(MY_LDFLAGS)
163
$(OUT_DIR)/pjsua2_wrap.o: $(OUT_DIR)/pjsua2_wrap.cpp Makefile
164
$(PJ_CXX) -c $(OUT_DIR)/pjsua2_wrap.cpp -o $(OUT_DIR)/pjsua2_wrap.o \
167
$(OUT_DIR)/pjsua2_wrap.cpp: ../pjsua2.i ../symbols.i $(SRCS)
168
mkdir -p $(MY_PACKAGE_PATH)
169
swig $(SWIG_FLAGS) -java -package $(MY_PACKAGE_NAME) \
170
-outdir $(MY_PACKAGE_PATH) \
171
-o $(OUT_DIR)/pjsua2_wrap.cpp ../pjsua2.i
173
clean distclean realclean:
174
rm -rf $(LIBPJSUA2_SO) $(OUT_DIR)/* \
175
$(MY_PACKAGE_PATH)/*.java $(MY_PACKAGE_PATH)/*.class
177
java: $(MY_PACKAGE_PATH)/Error.class $(MY_PACKAGE_PATH)/test.class $(MY_PACKAGE_PATH)/sample.class
179
$(MY_PACKAGE_PATH)/Error.class: $(MY_PACKAGE_PATH)/Error.java
180
$(MY_JAVAC) -d $(OUT_DIR) $(MY_PACKAGE_PATH)/*.java $(MY_APP_JAVA)
182
$(MY_PACKAGE_PATH)/test.class: test.java
183
$(MY_JAVAC) -d $(OUT_DIR) -classpath "$(OUT_DIR)" test.java
185
$(MY_PACKAGE_PATH)/sample.class: sample.java
186
$(MY_JAVAC) -d $(OUT_DIR) -classpath "$(OUT_DIR)" sample.java
189
@# Need to specify classpath and library path, alternatively,
190
@# they can be set via CLASSPATH and java.library.path env settings
191
$(MY_JAVA) -cp "$(OUT_DIR)" -Djava.library.path="$(OUT_DIR)" test
194
@# Need to specify classpath and library path, alternatively,
195
@# they can be set via CLASSPATH and java.library.path env settings
196
$(MY_JAVA) -cp "$(OUT_DIR)" -Djava.library.path="$(OUT_DIR)" \
197
org.pjsip.pjsua2.app.sample