blob: 45bf11b83c5c650c0abfc2324e60054d67c5fec4 [file]
#!/bin/bash
# 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.
if [ -z "$JDK_HOME" ]; then
jdk_home="$(/usr/libexec/java_home)"
else
echo "JDK_HOME variable was set prior to invoking this script. It will be used."
jdk_home="$JDK_HOME"
fi
echo "Value of jdk_home : $jdk_home"
CPPFLAGS="-I $jdk_home/include -I $jdk_home/include/darwin -I../build -DLINUX "
CFLAGS="$CPPFLAGS -mmacosx-version-min=10.4 -fpic -shared -O2"
SOURCES="../src-jdk15/class_file_cache.c \
../src-jdk15/attach.c \
../src-jdk15/Classes.c \
../src-jdk15/HeapDump.c \
../src-jdk15/Timers.c \
../src-jdk15/GC.c \
../src-jdk15/Threads.c \
../src-jdk15/Stacks.c \
../src-jdk15/common_functions.c"
DEST="../../release/lib/deployed/jdk16/mac/"
UNILIB="$DEST/libprofilerinterface.jnilib"
if [ ! -f "$UNILIB" ]; then
echo "Error: This script expects Universal Library $UNILIB to exist."
exit 1
fi
cc $CPPFLAGS ../src-jdk15/config.c -o ../build/config && ../build/config > ../build/config.h
echo "Content of config.h :"
cat ../build/config.h
cc $CFLAGS $SOURCES -o ../build/libprofilerinterface.x86_64.dylib
# Now we have a library specific to 'x86_64'. However what we use in lib.profiler
# is a so-called Universal Library (one library file which contains embedded libraries for
# multiple architectures .. this is an Apple speciality .. also known as a 'fat library').
#
# At some point in the history of NetBeans someone has created a Universal Library file
# for the Profiler Interface which as of Jan 2021 contains libraries for the following platforms:
# ppc
# ppc64
# i386
# x86_64
# Nowadays, Jan 2021, only 'x86_64' is relevant. Apple has abandonned the PowerPC architecture.
# Coming up is the Apple Sillicon architecture which is named 'arm64' in short form. No attempt
# is made here to support that, yet.
#
# We re-use the existing Universal Library file and simply replace its contents but only
# for the 'x86_64' architecture. This means that libraries for other architectures will
# continue to exist in the bundle, albeit in the older form (meaning they'll not receive bug fixes)
#
# List architecture of the produced ".dylib" file
# (just to be sure .. we expect it to be 'x86_64')
lipo ../build/libprofilerinterface.x86_64.dylib -info
# List content of existing universal library
lipo "$UNILIB" -info
# Update the existing universal library so that the content for x86_64 is replaced
# with our recent build
lipo "$UNILIB" -replace x86_64 ../build/libprofilerinterface.x86_64.dylib -output "$UNILIB"