-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmakefile
More file actions
102 lines (86 loc) · 2.92 KB
/
makefile
File metadata and controls
102 lines (86 loc) · 2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# Set JAVA_HOME path, you can modify this to point to your specific Java version
# JAVA_HOME=/root/.sdkman/candidates/java/11.0.24-amzn
# Determine if the OS is Windows or Linux
UNAME_S := $(shell uname -s)
CC_ARCH =
RM=rm -f
ifeq ($(OS),Windows_NT)
CXX=g++
TARGET_LIB=$(fileName_jvmLocalsAgentSo).dll
JAVA_INCLUDE_PLATFORM=win32
LDFLAGS=
RM=del /F /Q
RMR=del /S /Q
PLATFORM=Windows
else ifeq ($(UNAME_S),Darwin)
CXX=g++
TARGET_LIB=lib$(fileName_jvmLocalsAgentSo).dylib
JAVA_INCLUDE_PLATFORM=darwin
LDFLAGS=
CCFLAGS += -D OSX
CC_ARCH = -arch x86_64
PLATFORM=MacOs
else
CXX=g++
TARGET_LIB=lib$(fileName_jvmLocalsAgentSo).so
JAVA_INCLUDE_PLATFORM=linux
LDFLAGS=-lrt -lpthread
PLATFORM=Linux
endif
# C++ compiler and compile options
CXXFLAGS=-shared -fPIC -O2 -std=c++11 -I${JAVA_HOME}/include -I${JAVA_HOME}/include/$(JAVA_INCLUDE_PLATFORM)
# Variables
fileName_javaJvmLocals=JvmLocals
fileName_jvmLocalsAgentSo=JvmLocalsAgent
dir_javaSrc=src/main/java
packageName_javaPackage=github.elroy93.jvmlocals
dir_javaFile=$(dir_javaSrc)/$(subst .,/,$(packageName_javaPackage))
path_javaFile=$(dir_javaFile)/$(fileName_javaJvmLocals).java
path_javaHeaderClass = $(dir_javaFile)/$(fileName_javaJvmLocals).class
fileName_agentCpp=$(fileName_jvmLocalsAgentSo).cpp
# Generated files
fileName_targetAgentLib=$(TARGET_LIB)
fileName_targetJavaHeader=github_elroy93_jvmlocals_${fileName_javaJvmLocals}.h
# Java compiler and options
JAVAC=javac
JAVA=java
JAVACFLAGS= -g:lines,vars,source -encoding UTF-8
JAVAFLAGS=-agentpath:./$(TARGET_LIB) -Djava.library.path=./ -XX:+ShowMessageBoxOnError -Xint -XX:-UseCompressedOops -XX:-TieredCompilation
##################################################################################
# Default target, compile the C++ library
all: $(TARGET_LIB)
@echo "😜 === Compilation Complete on platform=${PLATFORM} uname=${UNAME_S}==="
# Compile the C++ shared library
$(TARGET_LIB): $(fileName_agentCpp) $(fileName_targetJavaHeader)
$(CXX) $(CXXFLAGS) $(fileName_agentCpp) -o $(TARGET_LIB) $(LDFLAGS) ${CC_ARCH}
@echo "😜 === Agent C++ Compilation Complete ==="
# Generate JNI header file
$(fileName_targetJavaHeader): $(path_javaFile)
$(JAVAC) -h . $(path_javaFile)
$(RM) $(path_javaHeaderClass)
@echo "😜 === JNI Header Generation Complete ==="
##################################################################################
# Test
test: $(TARGET_LIB)
gradle test
@echo "😜 === JNI Program Test Complete ==="
genjni: $(fileName_targetJavaHeader)
@echo "😜 === JNI Header Generation Complete ==="
# Clean generated files
clean:
-$(RM) *.so *.dll *.log *.dylib
-$(RM) $(path_javaHeaderClass)
-gradle clean --warning-mode all
@echo "😜 === Clean Complete ==="
# Check ldd
check_ldd: $(TARGET_LIB)
ifeq ($(OS),Windows_NT)
@echo "😜 ldd command is not available on Windows"
else
# 😜 ldd version
ldd --version
# 😜 gcc version
$(CXX) --version
# 😜 Show dynamic library dependencies
ldd $(TARGET_LIB)
endif