mirror of
https://github.com/async-profiler/async-profiler.git
synced 2026-05-13 10:33:45 +00:00
163 lines
4.8 KiB
Makefile
163 lines
4.8 KiB
Makefile
PROFILER_VERSION=2.10
|
|
|
|
PACKAGE_NAME=async-profiler-$(PROFILER_VERSION)-$(OS_TAG)-$(ARCH_TAG)
|
|
PACKAGE_DIR=/tmp/$(PACKAGE_NAME)
|
|
|
|
LAUNCHER=bin/asprof
|
|
LIB_PROFILER=lib/libasyncProfiler.$(SOEXT)
|
|
API_JAR=lib/async-profiler.jar
|
|
CONVERTER_JAR=lib/converter.jar
|
|
|
|
CFLAGS=-O3 -fno-exceptions
|
|
CXXFLAGS=-O3 -fno-exceptions -fno-omit-frame-pointer -fvisibility=hidden
|
|
INCLUDES=-I$(JAVA_HOME)/include -Isrc/helper
|
|
LIBS=-ldl -lpthread
|
|
MERGE=true
|
|
|
|
JAVAC=$(JAVA_HOME)/bin/javac
|
|
JAR=$(JAVA_HOME)/bin/jar
|
|
JAVA_TARGET=7
|
|
JAVAC_OPTIONS=--release $(JAVA_TARGET) -Xlint:-options
|
|
|
|
SOURCES := $(wildcard src/*.cpp)
|
|
HEADERS := $(wildcard src/*.h)
|
|
RESOURCES := $(wildcard src/res/*)
|
|
JAVA_HELPER_CLASSES := $(wildcard src/helper/one/profiler/*.class)
|
|
API_SOURCES := $(wildcard src/api/one/profiler/*.java)
|
|
CONVERTER_SOURCES := $(shell find src/converter -name '*.java')
|
|
|
|
ifeq ($(JAVA_HOME),)
|
|
export JAVA_HOME:=$(shell java -cp . JavaHome)
|
|
endif
|
|
|
|
OS:=$(shell uname -s)
|
|
ifeq ($(OS),Darwin)
|
|
CXXFLAGS += -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -Wl,-rpath,@executable_path/../lib -Wl,-rpath,@executable_path/../lib/server
|
|
INCLUDES += -I$(JAVA_HOME)/include/darwin
|
|
SOEXT=dylib
|
|
PACKAGE_EXT=zip
|
|
OS_TAG=macos
|
|
ifeq ($(FAT_BINARY),true)
|
|
FAT_BINARY_FLAGS=-arch x86_64 -arch arm64 -mmacos-version-min=10.12
|
|
CFLAGS += $(FAT_BINARY_FLAGS)
|
|
CXXFLAGS += $(FAT_BINARY_FLAGS)
|
|
PACKAGE_NAME=async-profiler-$(PROFILER_VERSION)-$(OS_TAG)
|
|
MERGE=false
|
|
endif
|
|
else
|
|
CXXFLAGS += -Wl,-z,defs
|
|
ifeq ($(MERGE),true)
|
|
CXXFLAGS += -fwhole-program
|
|
endif
|
|
LIBS += -lrt
|
|
INCLUDES += -I$(JAVA_HOME)/include/linux
|
|
SOEXT=so
|
|
PACKAGE_EXT=tar.gz
|
|
ifeq ($(findstring musl,$(shell ldd /bin/ls)),musl)
|
|
OS_TAG=linux-musl
|
|
else
|
|
OS_TAG=linux
|
|
endif
|
|
endif
|
|
|
|
ARCH:=$(shell uname -m)
|
|
ifeq ($(ARCH),x86_64)
|
|
ARCH_TAG=x64
|
|
else
|
|
ifeq ($(findstring arm,$(ARCH)),arm)
|
|
ifeq ($(findstring 64,$(ARCH)),64)
|
|
ARCH_TAG=arm64
|
|
else
|
|
ARCH_TAG=arm32
|
|
endif
|
|
else
|
|
ifeq ($(findstring aarch64,$(ARCH)),aarch64)
|
|
ARCH_TAG=arm64
|
|
else
|
|
ifeq ($(ARCH),ppc64le)
|
|
ARCH_TAG=ppc64le
|
|
else
|
|
ARCH_TAG=x86
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(ARCH),ppc64le)
|
|
ifneq ($(ARCH_TAG),arm32)
|
|
CXXFLAGS += -momit-leaf-frame-pointer
|
|
endif
|
|
endif
|
|
|
|
|
|
.PHONY: all release test native clean
|
|
|
|
all: build/bin build/lib build/$(LIB_PROFILER) build/$(LAUNCHER) build/$(API_JAR) build/$(CONVERTER_JAR)
|
|
|
|
release: $(PACKAGE_NAME).$(PACKAGE_EXT)
|
|
|
|
$(PACKAGE_NAME).tar.gz: $(PACKAGE_DIR)
|
|
tar czf $@ -C $(PACKAGE_DIR)/.. $(PACKAGE_NAME)
|
|
rm -r $(PACKAGE_DIR)
|
|
|
|
$(PACKAGE_NAME).zip: $(PACKAGE_DIR)
|
|
codesign -s "Developer ID" -o runtime --timestamp -v $(PACKAGE_DIR)/$(LAUNCHER) $(PACKAGE_DIR)/$(LIB_PROFILER)
|
|
ditto -c -k --keepParent $(PACKAGE_DIR) $@
|
|
rm -r $(PACKAGE_DIR)
|
|
|
|
$(PACKAGE_DIR): build/bin build/lib \
|
|
build/$(LIB_PROFILER) build/$(LAUNCHER) \
|
|
build/$(API_JAR) build/$(CONVERTER_JAR) \
|
|
LICENSE *.md
|
|
mkdir -p $(PACKAGE_DIR)
|
|
cp -RP build/* LICENSE *.md $(PACKAGE_DIR)/
|
|
chmod -R 755 $(PACKAGE_DIR)
|
|
chmod 644 $(PACKAGE_DIR)/lib/* $(PACKAGE_DIR)/LICENSE $(PACKAGE_DIR)/*.md
|
|
|
|
build/%:
|
|
mkdir -p $@
|
|
|
|
build/$(LAUNCHER): src/launcher/* src/jattach/* src/fdtransfer.h
|
|
$(CC) $(CPPFLAGS) $(CFLAGS) -DPROFILER_VERSION=\"$(PROFILER_VERSION)\" -DSUPPRESS_OUTPUT -o $@ src/launcher/*.cpp src/jattach/*.c
|
|
strip $@
|
|
|
|
build/$(LIB_PROFILER): $(SOURCES) $(HEADERS) $(RESOURCES) $(JAVA_HELPER_CLASSES)
|
|
ifeq ($(MERGE),true)
|
|
for f in src/*.cpp; do echo '#include "'$$f'"'; done |\
|
|
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -DPROFILER_VERSION=\"$(PROFILER_VERSION)\" $(INCLUDES) -fPIC -shared -o $@ -xc++ - $(LIBS)
|
|
else
|
|
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -DPROFILER_VERSION=\"$(PROFILER_VERSION)\" $(INCLUDES) -fPIC -shared -o $@ $(SOURCES) $(LIBS)
|
|
endif
|
|
|
|
build/$(API_JAR): $(API_SOURCES)
|
|
mkdir -p build/api
|
|
$(JAVAC) $(JAVAC_OPTIONS) -d build/api $(API_SOURCES)
|
|
$(JAR) cf $@ -C build/api .
|
|
$(RM) -r build/api
|
|
|
|
build/$(CONVERTER_JAR): $(CONVERTER_SOURCES) $(RESOURCES)
|
|
mkdir -p build/converter
|
|
$(JAVAC) $(JAVAC_OPTIONS) -d build/converter $(CONVERTER_SOURCES)
|
|
$(JAR) cfe $@ Main -C build/converter . -C src/res .
|
|
$(RM) -r build/converter
|
|
|
|
%.class: %.java
|
|
$(JAVAC) --source $(JAVA_TARGET) -target $(JAVA_TARGET) -Xlint:-options -g:none $^
|
|
|
|
test: all
|
|
test/smoke-test.sh
|
|
test/thread-smoke-test.sh
|
|
test/alloc-smoke-test.sh
|
|
test/load-library-test.sh
|
|
test/fdtransfer-smoke-test.sh
|
|
echo "All tests passed"
|
|
|
|
native:
|
|
mkdir -p native/linux-x64 native/linux-arm64 native/macos
|
|
tar xfO async-profiler-$(PROFILER_VERSION)-linux-x64.tar.gz */build/libasyncProfiler.so > native/linux-x64/libasyncProfiler.so
|
|
tar xfO async-profiler-$(PROFILER_VERSION)-linux-arm64.tar.gz */build/libasyncProfiler.so > native/linux-arm64/libasyncProfiler.so
|
|
unzip -p async-profiler-$(PROFILER_VERSION)-macos.zip */build/libasyncProfiler.so > native/macos/libasyncProfiler.so
|
|
|
|
clean:
|
|
$(RM) -r build
|