#
# Copyright (c) 1999, 2009, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

#
# Makefile to specify compiler flags for programs and libraries
# targeted to Linux.  Should not contain any rules.
#
# WARNING: This file is shared with other workspaces. 
#          So when it includes other files, it must use JDK_TOPDIR.
#

# Warning: the following variables are overriden by Defs.gmk. Set
# values will be silently ignored:
#   CFLAGS        (set $(OTHER_CFLAGS) instead)
#   CPPFLAGS      (set $(OTHER_CPPFLAGS) instead)
#   CXXFLAGS      (set $(OTHER_CXXFLAGS) instead)
#   LDFLAGS       (set $(OTHER_LDFAGS) instead)
#   LDLIBS        (set $(EXTRA_LIBS) instead)
#   LDLIBS_COMMON (set $(EXTRA_LIBS) instead)

# Get shared JDK settings
include $(JDK_MAKE_SHARED_DIR)/Defs.gmk

# Part of INCREMENTAL_BUILD mechanism.
#   Compiler emits things like:  path/file.o: file.h
#   We want something like: relative_path/file.o relative_path/file.d: file.h
CC_DEPEND	 = -MM
CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)& $(dir $@)$*.$(DEPEND_SUFFIX)!g'

ifndef PLATFORM_SRC
  PLATFORM_SRC = $(BUILDDIR)/../src/solaris
endif # PLATFORM_SRC

# Platform specific closed sources
ifndef OPENJDK
  ifndef CLOSED_PLATFORM_SRC
    CLOSED_PLATFORM_SRC = $(BUILDDIR)/../src/closed/solaris
  endif
endif

# platform specific include files
PLATFORM_INCLUDE_NAME = $(PLATFORM)
PLATFORM_INCLUDE      = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME)

# suffix used for make dependencies files.
DEPEND_SUFFIX = d
# The suffix applied to the library name for FDLIBM
FDDLIBM_SUFFIX = a
# The suffix applied to scripts (.bat for windows, nothing for unix)
SCRIPT_SUFFIX =
# CC compiler object code output directive flag value
CC_OBJECT_OUTPUT_FLAG = -o #trailing blank required!
CC_PROGRAM_OUTPUT_FLAG = -o #trailing blank required!

#
# Default HPI libraries. Build will build only native, unless
# overriden at the make command line. This makes it convenient for
# people doing, say, a pthreads port -- they can create a posix
# directory here, and say "gnumake HPIS=posix" at the top
# level.
#
HPIS = native

#
# Default optimization
#

ifndef OPTIMIZATION_LEVEL
  ifeq ($(PRODUCT), java)
    OPTIMIZATION_LEVEL = HIGHER
  else
    OPTIMIZATION_LEVEL = LOWER
  endif
endif
ifndef FASTDEBUG_OPTIMIZATION_LEVEL
  FASTDEBUG_OPTIMIZATION_LEVEL = LOWER
endif

CC_OPT/NONE     = 
CC_OPT/LOWER    = -O2
CC_OPT/HIGHER   = -O3
CC_OPT/HIGHEST  = -O3

CC_OPT          = $(CC_OPT/$(OPTIMIZATION_LEVEL))

# For all platforms, do not omit the frame pointer register usage. 
#    We need this frame pointer to make it easy to walk the stacks.
#    This should be the default on X86, but ia64 and amd64 may not have this
#    as the default.
CFLAGS_REQUIRED_amd64   += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
CFLAGS_REQUIRED_i586    += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
CFLAGS_REQUIRED_ia64    += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9
LDFLAGS_COMMON_sparcv9  += -m64 -mcpu=v9
CFLAGS_REQUIRED_sparc   += -m32 -mcpu=v9
LDFLAGS_COMMON_sparc    += -m32 -mcpu=v9
ifeq ($(ZERO_BUILD), true)
  CFLAGS_REQUIRED       =  $(ZERO_ARCHFLAG)
  ifeq ($(ZERO_ENDIANNESS), little)
    CFLAGS_REQUIRED     += -D_LITTLE_ENDIAN
  endif
  LDFLAGS_COMMON        += $(ZERO_ARCHFLAG)
else
  CFLAGS_REQUIRED       =  $(CFLAGS_REQUIRED_$(ARCH))
  LDFLAGS_COMMON        += $(LDFLAGS_COMMON_$(ARCH))
endif

# If this is a --hash-style=gnu system, use --hash-style=both
#   The gnu .hash section won't work on some Linux systems like SuSE 10.
_HAS_HASH_STYLE_GNU:=$(shell $(CC) -dumpspecs | $(GREP) -- '--hash-style=gnu')
ifneq ($(_HAS_HASH_STYLE_GNU),)
  LDFLAGS_HASH_STYLE = -Wl,--hash-style=both
endif
LDFLAGS_COMMON          += $(LDFLAGS_HASH_STYLE)

#
# Selection of warning messages
#
GCC_INHIBIT	= -Wno-unused -Wno-parentheses
GCC_STYLE	= 
GCC_WARNINGS	= -W -Wall $(GCC_STYLE) $(GCC_INHIBIT)

#
# Treat compiler warnings as errors, if warnings not allowed
#
ifeq ($(COMPILER_WARNINGS_FATAL),true)
  GCC_WARNINGS += -Werror
endif

#
# Misc compiler options
#
ifeq ($(ARCH),ppc)
  CFLAGS_COMMON   = -fsigned-char
else # ARCH
  CFLAGS_COMMON   = -fno-strict-aliasing
endif # ARCH
PIC_CODE_LARGE = -fPIC
PIC_CODE_SMALL = -fpic
GLOBAL_KPIC = $(PIC_CODE_LARGE)
CFLAGS_COMMON   += $(GLOBAL_KPIC) $(GCC_WARNINGS)
ifeq ($(ARCH), amd64)
 CFLAGS_COMMON += -pipe
endif

# Linux 64bit machines use Dwarf2, which can be HUGE, have fastdebug use -g1
DEBUG_FLAG = -g
ifeq ($(FASTDEBUG), true)
  ifeq ($(ARCH_DATA_MODEL), 64)
    DEBUG_FLAG = -g1
  endif
endif

# DEBUG_BINARIES overrides everything, use full -g debug information
ifeq ($(DEBUG_BINARIES), true)
  DEBUG_FLAG = -g
  CFLAGS_REQUIRED += $(DEBUG_FLAG)
endif

CFLAGS_OPT      = $(CC_OPT)
CFLAGS_DBG      = $(DEBUG_FLAG)
CFLAGS_COMMON += $(CFLAGS_REQUIRED)

CXXFLAGS_COMMON = $(GLOBAL_KPIC) -DCC_NOEX $(GCC_WARNINGS)
CXXFLAGS_OPT	= $(CC_OPT)
CXXFLAGS_DBG	= $(DEBUG_FLAG)
CXXFLAGS_COMMON += $(CFLAGS_REQUIRED)

# FASTDEBUG: Optimize the code in the -g versions, gives us a faster debug java
ifeq ($(FASTDEBUG), true)
  CFLAGS_DBG    += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL))
  CXXFLAGS_DBG	+= $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL))
endif

CPPFLAGS_COMMON = -D$(ARCH) -DARCH='"$(ARCH)"' -DLINUX $(VERSION_DEFINES) \
		  -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -D_REENTRANT

ifeq ($(ARCH_DATA_MODEL), 64)
CPPFLAGS_COMMON += -D_LP64=1
endif

CPPFLAGS_OPT    = -DNDEBUG
CPPFLAGS_DBG    = -DDEBUG
ifneq ($(PRODUCT), java)
  CPPFLAGS_DBG    += -DLOGGING 
endif

ifdef LIBRARY
  # Libraries need to locate other libraries at runtime, and you can tell
  #   a library where to look by way of the dynamic runpaths (RPATH or RUNPATH)
  #   buried inside the .so. The $ORIGIN says to look relative to where
  #   the library itself is and it can be followed with relative paths from
  #   that. By default we always look in $ORIGIN, optionally we add relative
  #   paths if the Makefile sets LD_RUNPATH_EXTRAS to those relative paths.
  #   On Linux we add a flag -z origin, not sure if this is necessary, but 
  #   doesn't seem to hurt.
  #   The environment variable LD_LIBRARY_PATH will over-ride these runpaths.
  #   Try: 'readelf -d lib*.so' to see these settings in a library.
  #
  LDFLAGS_COMMON += -Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$ORIGIN
  LDFLAGS_COMMON += $(LD_RUNPATH_EXTRAS:%=-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$ORIGIN/%)
endif

EXTRA_LIBS += -lc

LDFLAGS_DEFS_OPTION  = -Xlinker -z -Xlinker defs
LDFLAGS_COMMON  += $(LDFLAGS_DEFS_OPTION)

#
# -L paths for finding and -ljava
#
LDFLAGS_OPT     = -Xlinker -O1
LDFLAGS_COMMON += -L$(LIBDIR)/$(LIBARCH)
LDFLAGS_COMMON += -Wl,-soname=$(LIB_PREFIX)$(LIBRARY).$(LIBRARY_SUFFIX)

#
# -static-libgcc is a gcc-3 flag to statically link libgcc, gcc-2.9x always
# statically link libgcc but will print a warning with the flag. We don't 
# want the warning, so check gcc version first.
#
CC_VER_MAJOR := $(shell $(CC) -dumpversion | $(SED) 's/egcs-//' | $(CUT) -d'.' -f1)
ifeq ("$(CC_VER_MAJOR)", "3")
OTHER_LDFLAGS  += -static-libgcc
endif

# Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
#   (See Rules.gmk) The gcc 5 compiler might have an option for this?
AUTOMATIC_PCH_OPTION = 

#
# Post Processing of libraries/executables
#
ifeq ($(VARIANT), OPT)
  ifneq ($(NO_STRIP), true)
    ifneq ($(DEBUG_BINARIES), true)
      # Debug 'strip -g' leaves local function Elf symbols (better stack
      # traces)
      POST_STRIP_PROCESS = $(STRIP) -g
    endif
  endif
endif

#
# Use: ld $(LD_MAPFILE_FLAG) mapfile *.o
#
LD_MAPFILE_FLAG = -Xlinker --version-script -Xlinker

#
# Support for Quantify.
#
ifdef QUANTIFY
QUANTIFY_CMD = quantify
QUANTIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes
LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS)
endif

#
# Path and option to link against the VM, if you have to.  Note that
# there are libraries that link against only -ljava, but they do get
# -L to the -ljvm, this is because -ljava depends on -ljvm, whereas
# the library itself should not.
#
VM_NAME         = server
JVMLIB          = -L$(LIBDIR)/$(LIBARCH)/$(VM_NAME) -ljvm
JAVALIB         = -ljava $(JVMLIB)

#
# We want to privatize JVM symbols on Solaris. This is so the user can
# write a function called FindClass and this should not override the 
# FindClass that is inside the JVM. At this point in time we are not
# concerned with other JNI libraries because we hope that there will
# not be as many clashes there.
#
PRIVATIZE_JVM_SYMBOLS = false

USE_PTHREADS = true
override ALT_CODESET_KEY         = _NL_CTYPE_CODESET_NAME
override AWT_RUNPATH             =
override HAVE_ALTZONE            = false
override HAVE_FILIOH             = false
override HAVE_GETHRTIME          = false
override HAVE_GETHRVTIME         = false
override HAVE_SIGIGNORE          = true
override LEX_LIBRARY             = -lfl
ifeq ($(STATIC_CXX),true)
override LIBCXX                  = -Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic
else
override LIBCXX                  = -lstdc++
endif
override LIBPOSIX4               =
override LIBSOCKET               =
override LIBTHREAD               =
override MOOT_PRIORITIES         = true
override NO_INTERRUPTIBLE_IO     = true
override OPENWIN_HOME            = /usr/X11R6
ifeq ($(ARCH), amd64)
override OPENWIN_LIB             = $(OPENWIN_HOME)/lib64
else
override OPENWIN_LIB             = $(OPENWIN_HOME)/lib
endif
override OTHER_M4FLAGS           = -D__GLIBC__ -DGNU_ASSEMBLER
override SUN_CMM_SUBDIR          =
override THREADS_FLAG            = native
override USE_GNU_M4              = true
override USING_GNU_TAR           = true
override WRITE_LIBVERSION        = false

# USE_EXECNAME forces the launcher to look up argv[0] on $PATH, and put the
# resulting resolved absolute name of the executable in the environment
# variable EXECNAME.  That executable name is then used that to locate the
# installation area.
override USE_EXECNAME            = true

# If your platform has DPS, it will have Type1 fonts too, in which case
# it is best to enable DPS support until such time as 2D's rasteriser
# can fully handle Type1 fonts in all cases. Default is "yes".
# HAVE_DPS should only be "no" if the platform has no DPS headers or libs
# DPS (Displayable PostScript) is available on Solaris machines
HAVE_DPS = no

#
# Japanese manpages
#
JA_SOURCE_ENCODING = eucJP
JA_TARGET_ENCODINGS = eucJP

# Settings for the JDI - Serviceability Agent binding.
HOTSPOT_SALIB_PATH   = $(HOTSPOT_IMPORT_PATH)/jre/lib/$(LIBARCH)
SALIB_NAME = $(LIB_PREFIX)saproc.$(LIBRARY_SUFFIX)

# The JDI - Serviceability Agent binding is not currently supported
# on Linux-ia64.
ifeq ($(ARCH), ia64)
  INCLUDE_SA = false
else
  INCLUDE_SA = true
endif

