# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

# os=Default is meant to be generic unix/linux

known_targets := Linux-x86 Linux-x86_64 Linux-arm Linux-armv6 Linux-armv7 Linux-android-arm Linux-ppc64 Mac-x86 Mac-x86_64 Mac-arm64 DragonFly-x86_64 FreeBSD-x86_64 OpenBSD-x86_64 Windows-x86 Windows-x86_64 SunOS-sparcv9 HPUX-ia64_32
target := $(OS_NAME)-$(OS_ARCH)

ifeq (,$(findstring $(strip $(target)),$(known_targets)))
  target := Default
endif

# cross-compilation toolchain prefix (e.g. "arm-linux-gnueabi-")
CROSS_PREFIX :=

Default_CC        := $(CROSS_PREFIX)gcc
Default_STRIP     := $(CROSS_PREFIX)strip
Default_CCFLAGS   := -I$(JAVA_HOME)/include -Itarget/inc -Itarget/inc/unix -Os -fPIC -fvisibility=hidden
Default_LINKFLAGS := -shared
Default_LIBNAME   := libmvndnative.so
Default_JANSI_FLAGS  := 

Linux-x86_CC        := $(CROSS_PREFIX)gcc
Linux-x86_STRIP     := $(CROSS_PREFIX)strip
Linux-x86_CCFLAGS   := -I$(JAVA_HOME)/include -Itarget/inc -Itarget/inc/unix -Os -fPIC -m32 -fvisibility=hidden
Linux-x86_LINKFLAGS := -shared -static-libgcc
Linux-x86_LIBNAME   := libmvndnative.so
Linux-x86_JANSI_FLAGS  := 

Linux-x86_64_CC        := $(CROSS_PREFIX)gcc
Linux-x86_64_STRIP     := $(CROSS_PREFIX)strip
Linux-x86_64_CCFLAGS   := -I$(JAVA_HOME)/include -Itarget/inc -Itarget/inc/unix -Os -fPIC -m64 -fvisibility=hidden
Linux-x86_64_LINKFLAGS := -shared -static-libgcc
Linux-x86_64_LIBNAME   := libmvndnative.so
Linux-x86_64_JANSI_FLAGS  := 

Linux-arm_CC          := $(CROSS_PREFIX)gcc
Linux-arm_STRIP       := $(CROSS_PREFIX)strip
Linux-arm_CCFLAGS     := -I$(JAVA_HOME)/include -Itarget/inc -Itarget/inc/unix -Os -fPIC -mfloat-abi=softfp -mfpu=vfp -fvisibility=hidden
Linux-arm_LINKFLAGS   := -shared -static-libgcc
Linux-arm_LIBNAME     := libmvndnative.so
Linux-arm_JANSI_FLAGS  :=

Linux-armv6_CC        := $(CROSS_PREFIX)gcc
Linux-armv6_STRIP     := $(CROSS_PREFIX)strip
Linux-armv6_CCFLAGS   := -I$(JAVA_HOME)/include -Itarget/inc -Itarget/inc/unix -Os -mfloat-abi=hard -mfpu=vfp -fPIC -fvisibility=hidden
Linux-armv6_LINKFLAGS := -shared -static-libgcc
Linux-armv6_LIBNAME   := libmvndnative.so
Linux-armv6_JANSI_FLAGS  :=

Linux-armv7_CC        := $(CROSS_PREFIX)gcc
Linux-armv7_STRIP     := $(CROSS_PREFIX)strip
Linux-armv7_CCFLAGS   := -I$(JAVA_HOME)/include -Itarget/inc -Itarget/inc/unix -Os -mfloat-abi=hard -mfpu=vfp -fPIC -fvisibility=hidden
Linux-armv7_LINKFLAGS := -shared -static-libgcc
Linux-armv7_LIBNAME   := libmvndnative.so
Linux-armv7_JANSI_FLAGS  :=

Linux-arm64_CC        := $(CROSS_PREFIX)gcc
Linux-arm64_STRIP     := $(CROSS_PREFIX)strip
Linux-arm64_CCFLAGS   := -I$(JAVA_HOME)/include -Itarget/inc -Itarget/inc/unix -Os -mfloat-abi=hard -mfpu=vfp -fPIC -fvisibility=hidden
Linux-arm64_LINKFLAGS := -shared -static-libgcc
Linux-arm64_LIBNAME   := libmvndnative.so
Linux-arm64_JANSI_FLAGS  :=

Linux-ppc64_CC        := $(CROSS_PREFIX)gcc
Linux-ppc64_STRIP     := $(CROSS_PREFIX)strip
Linux-ppc64_CCFLAGS   := -I$(JAVA_HOME)/include -Itarget/inc -Itarget/inc/unix -Os -fPIC -fvisibility=hidden
Linux-ppc64_LINKFLAGS := -shared -static-libgcc
Linux-ppc64_LIBNAME   := libmvndnative.so
Linux-ppc64_JANSI_FLAGS  :=

DragonFly-x86_64_CC        := $(CROSS_PREFIX)cc
DragonFly-x86_64_STRIP     := $(CROSS_PREFIX)strip
DragonFly-x86_64_CCFLAGS   := -I$(JAVA_HOME)/include -Itarget/inc -Itarget/inc/unix -O2 -fPIC -fvisibility=hidden
DragonFly-x86_64_LINKFLAGS := -shared
DragonFly-x86_64_LIBNAME   := libmvndnative.so
DragonFly-x86_64_JANSI_FLAGS  :=

FreeBSD-x86_CC        := $(CROSS_PREFIX)gcc
FreeBSD-x86_STRIP     := $(CROSS_PREFIX)strip
FreeBSD-x86_CCFLAGS   := -I$(JAVA_HOME)/include -Itarget/inc -Itarget/inc/unix -Os -fPIC -fvisibility=hidden
FreeBSD-x86_LINKFLAGS := -shared
FreeBSD-x86_LIBNAME   := libmvndnative.so
FreeBSD-x86_JANSI_FLAGS  :=

FreeBSD-x86_64_CC        := $(CROSS_PREFIX)gcc
FreeBSD-x86_64_STRIP     := $(CROSS_PREFIX)strip
FreeBSD-x86_64_CCFLAGS   := -I$(JAVA_HOME)/include -Itarget/inc -Itarget/inc/unix -Os -fPIC -fvisibility=hidden
FreeBSD-x86_64_LINKFLAGS := -shared
FreeBSD-x86_64_LIBNAME   := libmvndnative.so
FreeBSD-x86_64_JANSI_FLAGS  :=

OpenBSD-x86_64_CC        := $(CROSS_PREFIX)gcc
OpenBSD-x86_64_STRIP     := $(CROSS_PREFIX)strip
OpenBSD-x86_64_CCFLAGS   := -I$(JAVA_HOME)/include -Itarget/inc -Itarget/inc/unix -Os -fPIC -fvisibility=hidden
OpenBSD-x86_64_LINKFLAGS := -shared
OpenBSD-x86_64_LIBNAME   := libmvndnative.so
OpenBSD-x86_64_JANSI_FLAGS  := 

SunOS-sparcv9_CC        := $(CROSS_PREFIX)gcc
SunOS-sparcv9_STRIP     := $(CROSS_PREFIX)strip
SunOS-sparcv9_CCFLAGS   := -I$(JAVA_HOME)/include -Itarget/inc -Itarget/inc/unix -O2s-fPIC -m64 -fvisibility=hidden
SunOS-sparcv9_LINKFLAGS := -shared -static-libgcc
SunOS-sparcv9_LIBNAME   := libmvndnative.so
SunOS-sparcv9_JANSI_FLAGS  := 

HPUX-ia64_32_CC			:= cc
HPUX-ia64_32_STRIP		:= strip
HPUX-ia64_32_CCFLAGS	:= -Itarget/inc -Itarget/inc/unix +Osize +z -Bhidden
HPUX-ia64_32_LINKFLAGS	:= -b
HPUX-ia64_32_LIBNAME	:= libmvndnative.so
HPUX-ia64_32_JANSI_FLAGS :=

Mac-x86_CC        := gcc
Mac-x86_STRIP     := strip -x
Mac-x86_CCFLAGS    := -I$(JAVA_HOME)/include -Itarget/inc -Itarget/inc/unix -Os -fPIC -mmacosx-version-min=10.4 -fvisibility=hidden
Mac-x86_LINKFLAGS := -dynamiclib
Mac-x86_LIBNAME   := libmvndnative.jnilib
Mac-x86_JANSI_FLAGS  := -DJANSI_ENABLE_LOCKING_STYLE=0

Mac-x86_64_CC        := gcc -arch $(OS_ARCH)
Mac-x86_64_STRIP     := strip -x
MAC_SDK := /Developer/SDKs/MacOSX10.10.sdk
ifeq ($(wildcard MAC_SDK),)
	MAC_SDK := /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk
endif
Mac-x86_64_CCFLAGS    := -I$(MAC_SDK)/System/Library/Frameworks/JavaVM.framework/Headers -Itarget/inc -Itarget/inc/unix -Os -fPIC -mmacosx-version-min=10.6 -fvisibility=hidden
Mac-x86_64_LINKFLAGS := -dynamiclib 
Mac-x86_64_LIBNAME   := libmvndnative.jnilib
Mac-x86_64_JANSI_FLAGS  := 

Mac-arm64_CC        := $(CROSS_PREFIX)clang -v
Mac-arm64_STRIP     := $(CROSS_PREFIX)strip -x
MAC_SDK := /usr/local/osxcross/SDK/MacOSX11.3.sdk/
Mac-arm64_CCFLAGS    := -I$(MAC_SDK)/System/Library/Frameworks/JavaVM.framework/Headers -Itarget/inc -Itarget/inc/unix -Os -fPIC -mmacosx-version-min=11.0 -fvisibility=hidden
Mac-arm64_LINKFLAGS := -shared
Mac-arm64_LIBNAME   := libmvndnative.jnilib
Mac-arm64_JANSI_FLAGS  :=

Windows-x86_CC           := $(CROSS_PREFIX)gcc
Windows-x86_STRIP        := $(CROSS_PREFIX)strip
Windows-x86_CCFLAGS      := -D_JNI_IMPLEMENTATION_ -Itarget/inc -Itarget/inc/windows -Os
Windows-x86_LINKFLAGS    := -Wl,--kill-at -shared -static-libgcc
Windows-x86_LIBNAME      := mvndnative.dll
Windows-x86_JANSI_FLAGS := 

Windows-x86_64_CC           := $(CROSS_PREFIX)gcc
Windows-x86_64_STRIP        := $(CROSS_PREFIX)strip
Windows-x86_64_CCFLAGS      := -D_JNI_IMPLEMENTATION_ -Itarget/inc -Itarget/inc/windows -Os
Windows-x86_64_LINKFLAGS    := -Wl,--kill-at -shared -static-libgcc
Windows-x86_64_LIBNAME      := mvndnative.dll
Windows-x86_64_JANSI_FLAGS := 


CC        := $($(target)_CC)
STRIP     := $($(target)_STRIP)
CCFLAGS   := $($(target)_CCFLAGS) 
LINKFLAGS := $($(target)_LINKFLAGS) 
LIBNAME   := $($(target)_LIBNAME)
CCFLAGS := $(CCFLAGS)
