| # |
| # Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. |
| # |
| # Redistribution and use in source and binary forms, with or without |
| # modification, are permitted provided that the following conditions |
| # are met: |
| # |
| # - Redistributions of source code must retain the above copyright |
| # notice, this list of conditions and the following disclaimer. |
| # |
| # - Redistributions in binary form must reproduce the above copyright |
| # notice, this list of conditions and the following disclaimer in the |
| # documentation and/or other materials provided with the distribution. |
| # |
| # - Neither the name of Oracle nor the names of its |
| # contributors may be used to endorse or promote products derived |
| # from this software without specific prior written permission. |
| # |
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS |
| # IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
| # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
| # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
| # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
| # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| # |
| |
| ######################################################################## |
| # |
| # Sample GNU Makefile for building |
| # |
| # Example uses: |
| # gnumake JDK=<java_home> OSNAME=solaris [OPT=true] [LIBARCH=sparc] |
| # gnumake JDK=<java_home> OSNAME=solaris [OPT=true] [LIBARCH=sparcv9] |
| # gnumake JDK=<java_home> OSNAME=linux [OPT=true] |
| # gnumake JDK=<java_home> OSNAME=win32 [OPT=true] |
| # |
| ######################################################################## |
| |
| # Source lists |
| LIBNAME=java_crw_demo |
| SOURCES=java_crw_demo.c |
| |
| # Solaris Studio C Compiler Version 12.4 |
| ifeq ($(OSNAME), solaris) |
| # Sun Solaris Compiler options needed |
| COMMON_FLAGS=-mt -KPIC |
| # Options that help find errors |
| COMMON_FLAGS+= -Xa -v -xc99=%none |
| # Check LIBARCH for any special compiler options |
| LIBARCH=$(shell uname -p) |
| ifeq ($(LIBARCH), sparc) |
| COMMON_FLAGS+=-xarch=v8 -xregs=no%appl |
| endif |
| ifeq ($(LIBARCH), sparcv9) |
| COMMON_FLAGS+=-xarch=v9 -xregs=no%appl |
| endif |
| ifeq ($(OPT), true) |
| CFLAGS=-xO2 $(COMMON_FLAGS) |
| else |
| CFLAGS=-g $(COMMON_FLAGS) |
| endif |
| # Object files needed to create library |
| OBJECTS=$(SOURCES:%.c=%.o) |
| # Library name and options needed to build it |
| LIBRARY=lib$(LIBNAME).so |
| LDFLAGS=-z defs -ztext |
| # Libraries we are dependent on |
| LIBRARIES=-lc |
| # Building a shared library |
| LINK_SHARED=$(LINK.c) -G -o $@ |
| endif |
| |
| # Linux GNU C Compiler |
| ifeq ($(OSNAME), linux) |
| # GNU Compiler options needed to build it |
| COMMON_FLAGS=-fno-strict-aliasing -fPIC -fno-omit-frame-pointer |
| # Options that help find errors |
| COMMON_FLAGS+= -W -Wall -Wno-unused -Wno-parentheses |
| ifeq ($(OPT), true) |
| CFLAGS=-O2 $(COMMON_FLAGS) |
| else |
| CFLAGS=-g $(COMMON_FLAGS) |
| endif |
| # Object files needed to create library |
| OBJECTS=$(SOURCES:%.c=%.o) |
| # Library name and options needed to build it |
| LIBRARY=lib$(LIBNAME).so |
| LDFLAGS=-Wl,-soname=$(LIBRARY) -static-libgcc |
| # Libraries we are dependent on |
| LIBRARIES=-lc |
| # Building a shared library |
| LINK_SHARED=$(LINK.c) -shared -o $@ |
| endif |
| |
| # Windows Microsoft C/C++ Optimizing Compiler Version 12 |
| ifeq ($(OSNAME), win32) |
| CC=cl |
| # Compiler options needed to build it |
| COMMON_FLAGS=-Gy -DWIN32 |
| # Options that help find errors |
| COMMON_FLAGS+=-W0 -WX |
| ifeq ($(OPT), true) |
| CFLAGS= -Ox -Op -Zi $(COMMON_FLAGS) |
| else |
| CFLAGS= -Od -Zi $(COMMON_FLAGS) |
| endif |
| # Object files needed to create library |
| OBJECTS=$(SOURCES:%.c=%.obj) |
| # Library name and options needed to build it |
| LIBRARY=$(LIBNAME).dll |
| LDFLAGS= |
| # Libraries we are dependent on |
| LIBRARIES= |
| # Building a shared library |
| LINK_SHARED=link -dll -out:$@ |
| endif |
| |
| # Common -I options |
| CFLAGS += -I. |
| CFLAGS += -I$(JDK)/include -I$(JDK)/include/$(OSNAME) |
| |
| # Default rule (build both native library and jar file) |
| all: $(LIBRARY) |
| |
| # Build native library |
| $(LIBRARY): $(OBJECTS) |
| $(LINK_SHARED) $(OBJECTS) $(LIBRARIES) |
| |
| # Cleanup the built bits |
| clean: |
| rm -f -r classes |
| rm -f $(LIBRARY) $(OBJECTS) |
| |
| # Compilation rule only needed on Windows |
| ifeq ($(OSNAME), win32) |
| %.obj: %.c |
| $(COMPILE.c) $< |
| endif |
| |