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