1#
2# Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
3# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4#
5# This code is free software; you can redistribute it and/or modify it
6# under the terms of the GNU General Public License version 2 only, as
7# published by the Free Software Foundation.
8#
9# This code is distributed in the hope that it will be useful, but WITHOUT
10# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12# version 2 for more details (a copy is included in the LICENSE file that
13# accompanied this code).
14#
15# You should have received a copy of the GNU General Public License version
16# 2 along with this work; if not, write to the Free Software Foundation,
17# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18#
19# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20# or visit www.oracle.com if you need additional information or have any
21# questions.
22#
23#
24include $(GAMMADIR)/make/defs.make
25include $(GAMMADIR)/make/altsrc.make
26
27# Rules to build serviceability agent library, used by vm.make
28
29# libsaproc.so: serviceability agent
30
31SAPROC = saproc
32LIBSAPROC = lib$(SAPROC).so
33
34LIBSAPROC_DEBUGINFO   = lib$(SAPROC).debuginfo
35LIBSAPROC_DIZ         = lib$(SAPROC).diz
36
37AGENT_DIR = $(GAMMADIR)/agent
38
39SASRCDIR = $(AGENT_DIR)/src/os/$(Platform_os_family)
40
41SASRCFILES = $(SASRCDIR)/salibelf.c                   \
42             $(SASRCDIR)/symtab.c                     \
43             $(SASRCDIR)/libproc_impl.c               \
44             $(SASRCDIR)/ps_proc.c                    \
45             $(SASRCDIR)/ps_core.c                    \
46             $(SASRCDIR)/LinuxDebuggerLocal.c         \
47             $(AGENT_DIR)/src/share/native/sadis.c
48
49-include $(HS_ALT_MAKE)/linux/makefiles/saproc.make
50
51SAMAPFILE = $(SASRCDIR)/mapfile
52
53DEST_SAPROC           = $(JDK_LIBDIR)/$(LIBSAPROC)
54DEST_SAPROC_DEBUGINFO = $(JDK_LIBDIR)/$(LIBSAPROC_DEBUGINFO)
55DEST_SAPROC_DIZ       = $(JDK_LIBDIR)/$(LIBSAPROC_DIZ)
56
57# DEBUG_BINARIES overrides everything, use full -g debug information
58ifeq ($(DEBUG_BINARIES), true)
59  SA_DEBUG_CFLAGS = -g
60endif
61
62# Optimize saproc lib at level -O3 unless it's a slowdebug build
63ifneq ($(BUILD_FLAVOR), debug)
64  SA_OPT_FLAGS = $(OPT_CFLAGS)
65endif
66
67# if $(AGENT_DIR) does not exist, we don't build SA
68# also, we don't build SA on Itanium or zero.
69
70ifneq ($(wildcard $(AGENT_DIR)),)
71ifneq ($(filter-out ia64 zero,$(SRCARCH)),)
72  BUILDLIBSAPROC = $(LIBSAPROC)
73endif
74endif
75
76ifneq ($(ALT_SASRCDIR),)
77ALT_SAINCDIR=-I$(ALT_SASRCDIR) -DALT_SASRCDIR
78else
79ALT_SAINCDIR=
80endif
81SA_LFLAGS = $(MAPFLAG:FILENAME=$(SAMAPFILE)) $(LDFLAGS_HASH_STYLE) \
82            $(LDFLAGS_NO_EXEC_STACK) $(EXTRA_LDFLAGS)
83
84SAARCH ?= $(BUILDARCH)
85
86$(LIBSAPROC): $(SASRCFILES) $(SAMAPFILE)
87	$(QUIETLY) if [ "$(BOOT_JAVA_HOME)" = "" ]; then \
88	  echo "ALT_BOOTDIR, BOOTDIR or JAVA_HOME needs to be defined to build SA"; \
89	  exit 1; \
90	fi
91	@echo Making SA debugger back-end...
92	$(QUIETLY) $(CC) -D$(SAARCH) -D_GNU_SOURCE                      \
93		   -D_FILE_OFFSET_BITS=64                               \
94                   $(SYMFLAG) $(ARCHFLAG) $(SHARED_FLAG) $(PICFLAG)     \
95	           -I$(SASRCDIR)                                        \
96	           -I$(GENERATED)                                       \
97	           -I$(BOOT_JAVA_HOME)/include                          \
98	           -I$(BOOT_JAVA_HOME)/include/$(Platform_os_family)    \
99			   $(ALT_SAINCDIR) 										\
100	           $(SASRCFILES)                                        \
101	           $(SA_LFLAGS)                                         \
102	           $(SA_DEBUG_CFLAGS)                                   \
103	           $(SA_OPT_FLAGS)                                      \
104	           $(EXTRA_CFLAGS)                                      \
105	           -o $@                                                \
106	           -lthread_db -ldl
107ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
108  ifneq ($(STRIP_POLICY),no_strip)
109	$(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBSAPROC_DEBUGINFO)
110	$(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBSAPROC_DEBUGINFO) $@
111  endif
112  ifeq ($(STRIP_POLICY),all_strip)
113	$(QUIETLY) $(STRIP) $@
114  else
115    ifeq ($(STRIP_POLICY),min_strip)
116	$(QUIETLY) $(STRIP) -g $@
117    endif
118    # implied else here is no stripping at all
119  endif
120  ifneq ($(STRIP_POLICY),no_strip)
121    ifeq ($(ZIP_DEBUGINFO_FILES),1)
122	$(ZIPEXE) -q -y $(LIBSAPROC_DIZ) $(LIBSAPROC_DEBUGINFO)
123	$(RM) $(LIBSAPROC_DEBUGINFO)
124    endif
125  endif
126endif
127
128install_saproc: $(BUILDLIBSAPROC)
129	$(QUIETLY) if [ -e $(LIBSAPROC) ] ; then             \
130	  echo "Copying $(LIBSAPROC) to $(DEST_SAPROC)";     \
131	  test -f $(LIBSAPROC_DEBUGINFO) &&                  \
132	    cp -f $(LIBSAPROC_DEBUGINFO) $(DEST_SAPROC_DEBUGINFO); \
133	  test -f $(LIBSAPROC_DIZ) &&                  \
134	    cp -f $(LIBSAPROC_DIZ) $(DEST_SAPROC_DIZ); \
135	  cp -f $(LIBSAPROC) $(DEST_SAPROC) && echo "Done";  \
136	fi
137
138.PHONY: install_saproc
139