#
#
# 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.
#
#
aarch64.MacOSX.linker=g++

aarch64.MacOSX.gpp.c.compiler=gcc
aarch64.MacOSX.gpp.c.defines=Darwin GNU_GCC
aarch64.MacOSX.gpp.c.options=-Wall -Wno-long-long -Wpointer-arith -Wconversion
aarch64.MacOSX.gpp.c.includes=**/*.c
aarch64.MacOSX.gpp.c.excludes=

aarch64.MacOSX.gpp.java.include=include;include/darwin
aarch64.MacOSX.gpp.java.runtimeDirectory=IGNORED

aarch64.MacOSX.gpp.lib.prefix=lib
aarch64.MacOSX.gpp.shared.prefix=lib
aarch64.MacOSX.gpp.static.extension=a
aarch64.MacOSX.gpp.shared.extension=dylib
aarch64.MacOSX.gpp.plugin.extension=bundle
aarch64.MacOSX.gpp.jni.extension=jnilib
aarch64.MacOSX.gpp.executable.extension=


#
# aarch64 (arm64) Linux
#
aarch64.Linux.linker=g++

aarch64.Linux.gpp.c.compiler=gcc
aarch64.Linux.gpp.c.defines=Linux GNU_GCC
aarch64.Linux.gpp.c.options=-Wall -Wno-long-long -Wpointer-arith -Wconversion -fPIC
aarch64.Linux.gpp.c.includes=**/*.c
aarch64.Linux.gpp.c.excludes=

# options for gcc linker front end
aarch64.Linux.gpp.linker.options=-shared -shared-libgcc -fPIC -fexceptions
aarch64.Linux.gpp.linker.sysLibs=stdc++
aarch64.Linux.gpp.linker.libs=

aarch64.Linux.gpp.java.include=include;include/linux
aarch64.Linux.gpp.java.runtimeDirectory=jre/lib/i386/client

aarch64.Linux.gpp.lib.prefix=lib
aarch64.Linux.gpp.shared.prefix=lib
aarch64.Linux.gpp.static.extension=a
aarch64.Linux.gpp.shared.extension=so
aarch64.Linux.gpp.plugin.extension=so
aarch64.Linux.gpp.jni.extension=so
aarch64.Linux.gpp.executable.extension=

# FIXME to be removed when NAR-6
aarch64.Linux.gcc.static.extension=a
aarch64.Linux.gcc.shared.extension=so*
aarch64.Linux.gcc.plugin.extension=so
aarch64.Linux.gcc.jni.extension=so
