1 #
   2 # Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved.
   3 #
   4 # Redistribution and use in source and binary forms, with or without
   5 # modification, are permitted provided that the following conditions
   6 # are met:
   7 #
   8 #   - Redistributions of source code must retain the above copyright
   9 #     notice, this list of conditions and the following disclaimer.
  10 #
  11 #   - Redistributions in binary form must reproduce the above copyright
  12 #     notice, this list of conditions and the following disclaimer in the
  13 #     documentation and/or other materials provided with the distribution.
  14 #
  15 #   - Neither the name of Oracle nor the names of its
  16 #     contributors may be used to endorse or promote products derived
  17 #     from this software without specific prior written permission.
  18 #
  19 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
  20 # IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  21 # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  22 # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  23 # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  24 # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  25 # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  26 # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  27 # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  28 # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  29 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30 #
  31 
  32 ########################################################################
  33 #
  34 # Sample GNU Makefile for building JVMTI Demo waiters
  35 #
  36 #  Example uses:    
  37 #       gnumake JDK=<java_home> OSNAME=solaris [OPT=true] [LIBARCH=sparc]
  38 #       gnumake JDK=<java_home> OSNAME=solaris [OPT=true] [LIBARCH=sparcv9]
  39 #       gnumake JDK=<java_home> OSNAME=linux   [OPT=true]
  40 #       gnumake JDK=<java_home> OSNAME=win32   [OPT=true]
  41 #
  42 ########################################################################
  43 
  44 # Source lists
  45 LIBNAME=waiters
  46 SOURCES=waiters.cpp Agent.cpp Thread.cpp Monitor.cpp ../agent_util/agent_util.c
  47 
  48 # Solaris Sun C Compiler Version 5.5
  49 ifeq ($(OSNAME), solaris)
  50     # Tell gnumake which compilers to use
  51     CC=cc
  52     CXX=CC
  53     # Sun Solaris Compiler options needed
  54     COMMON_FLAGS=-mt -KPIC
  55     # Check LIBARCH for any special compiler options
  56     LIBARCH=$(shell uname -p)
  57     ifeq ($(LIBARCH), sparc)
  58         COMMON_FLAGS+=-xarch=v8 -xregs=no%appl
  59     endif
  60     ifeq ($(LIBARCH), sparcv9)
  61         COMMON_FLAGS+=-xarch=v9 -xregs=no%appl
  62     endif
  63     ifeq ($(OPT), true)
  64         CXXFLAGS=-xO2 $(COMMON_FLAGS) 
  65     else
  66         CXXFLAGS=-g $(COMMON_FLAGS)
  67     endif
  68     # Object files needed to create library
  69     OBJECTS=$(SOURCES:%.cpp=%.o)
  70     # Library name and options needed to build it
  71     LIBRARY=lib$(LIBNAME).so
  72     LDFLAGS=-z defs -ztext
  73     # Libraries we are dependent on
  74     LIBRARIES= -lc
  75     # Building a shared library
  76     LINK_SHARED=$(LINK.cc) -G -o $@
  77 endif
  78 
  79 # Linux GNU C Compiler
  80 ifeq ($(OSNAME), linux)
  81     # GNU Compiler options needed to build it
  82     COMMON_FLAGS=-fno-strict-aliasing -fPIC -fno-omit-frame-pointer
  83     # Options that help find errors
  84     COMMON_FLAGS+= -W -Wall  -Wno-unused -Wno-parentheses
  85     ifeq ($(OPT), true)
  86         CXXFLAGS=-O2 $(COMMON_FLAGS) 
  87     else
  88         CXXFLAGS=-g $(COMMON_FLAGS) 
  89     endif
  90     # Object files needed to create library
  91     OBJECTS=$(SOURCES:%.cpp=%.o)
  92     # Library name and options needed to build it
  93     LIBRARY=lib$(LIBNAME).so
  94     LDFLAGS=-Wl,-soname=$(LIBRARY) -static-libgcc
  95     # Libraries we are dependent on
  96     LIBRARIES=
  97     # Building a shared library
  98     LINK_SHARED=$(LINK.cc) -shared -o $@
  99 endif
 100 
 101 # Windows Microsoft C/C++ Optimizing Compiler Version 12
 102 ifeq ($(OSNAME), win32)
 103     CC=cl
 104     # Compiler options needed to build it
 105     COMMON_FLAGS=-Gy -DWIN32
 106     # Options that help find errors
 107     COMMON_FLAGS+=-W0 -WX
 108     ifeq ($(OPT), true)
 109         CXXFLAGS= -Ox -Op -Zi $(COMMON_FLAGS) 
 110     else
 111         CXXFLAGS= -Od -Zi $(COMMON_FLAGS) 
 112     endif
 113     # Object files needed to create library
 114     OBJECTS=$(SOURCES:%.cpp=%.obj)
 115     # Library name and options needed to build it
 116     LIBRARY=$(LIBNAME).dll
 117     LDFLAGS=
 118     # Libraries we are dependent on
 119     LIBRARIES=
 120     # Building a shared library
 121     LINK_SHARED=link -dll -out:$@
 122 endif
 123 
 124 # Common -I options
 125 CXXFLAGS += -I.
 126 CXXFLAGS += -I../agent_util
 127 CXXFLAGS += -I$(JDK)/include -I$(JDK)/include/$(OSNAME)
 128 
 129 # Default rule
 130 all: $(LIBRARY)
 131 
 132 # Build native library
 133 $(LIBRARY): $(OBJECTS)
 134         $(LINK_SHARED) $(OBJECTS) $(LIBRARIES)
 135 
 136 # Cleanup the built bits
 137 clean:
 138         rm -f $(LIBRARY) $(OBJECTS)
 139 
 140 # Simple tester
 141 test: all
 142         LD_LIBRARY_PATH=`pwd` $(JDK)/bin/java -agentlib:$(LIBNAME) -version
 143 
 144 # Compilation rule only needed on Windows
 145 ifeq ($(OSNAME), win32)
 146 %.obj: %.cpp
 147         $(COMPILE.cc) $<
 148 endif
 149