netty-tcnative-boringssl-static
Used in:
components
- OverviewOverview
- VersionsVersions
- DependentsDependents
- DependenciesDependencies
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-tcnative-boringssl-static</artifactId>
<version>2.0.36.Final</version>
</dependency><?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2016 The Netty Project
~
~ The Netty Project 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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.netty</groupId>
<artifactId>netty-tcnative-parent</artifactId>
<version>2.0.36.Final</version>
</parent>
<artifactId>netty-tcnative-boringssl-static</artifactId>
<packaging>jar</packaging>
<name>Netty/TomcatNative [BoringSSL - Static]</name>
<description>
A Mavenized fork of Tomcat Native which incorporates various patches. This artifact is statically linked
to BoringSSL and Apache APR.
</description>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Automatic-Module-Name>io.netty.tcnative.boringssl</Automatic-Module-Name>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<properties>
<boringsslSourceDir>${project.build.directory}/boringssl-${boringsslBranch}</boringsslSourceDir>
<boringsslHome>${boringsslSourceDir}/build</boringsslHome>
<linkStatic>true</linkStatic>
<compileLibrary>true</compileLibrary>
<msvcSslIncludeDirs>${boringsslSourceDir}/include</msvcSslIncludeDirs>
<msvcSslLibDirs>${boringsslHome}/ssl;${boringsslHome}/crypto;${boringsslHome}/decrepit</msvcSslLibDirs>
<msvcSslLibs>ssl.lib;crypto.lib;decrepit.lib</msvcSslLibs>
<cflags>-Werror -fno-omit-frame-pointer -fvisibility=hidden -Wunused -Wno-unused-value -O3</cflags>
<cppflags>-DHAVE_OPENSSL -I${boringsslSourceDir}/include</cppflags>
<ldflags>-L${boringsslHome}/ssl -L${boringsslHome}/crypto -L${boringsslHome}/decrepit -ldecrepit -lssl -lcrypto</ldflags>
</properties>
<profiles>
<!-- Default profile that builds a platform-specific jar -->
<profile>
<id>boringssl-static-default</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<!-- Download the BoringSSL source -->
<plugin>
<artifactId>maven-scm-plugin</artifactId>
<executions>
<execution>
<id>get-boringssl</id>
<phase>generate-sources</phase>
<goals>
<goal>checkout</goal>
</goals>
<configuration>
<checkoutDirectory>${boringsslSourceDir}</checkoutDirectory>
<connectionType>developerConnection</connectionType>
<developerConnectionUrl>scm:git:https://boringssl.googlesource.com/boringssl</developerConnectionUrl>
<scmVersion>${boringsslBranch}</scmVersion>
<scmVersionType>branch</scmVersionType>
<skipCheckoutIfExists>true</skipCheckoutIfExists>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${generatedSourcesDir}/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<!-- Add the commit ID and branch to the manifest. -->
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
<Apr-Version>${aprVersion}</Apr-Version>
<BoringSSL-Revision>${boringsslCommitSha}</BoringSSL-Revision>
<BoringSSL-Branch>${boringsslBranch}</BoringSSL-Branch>
</instructions>
</configuration>
</plugin>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<!-- Only deploy to Maven Central if on centos (fedora). -->
<execution>
<id>skip-deploy</id>
<phase>initialize</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<exportAntProperties>true</exportAntProperties>
<target>
<condition property="maven.deploy.skip" value="false" else="true">
<isset property="os.detected.release.like.fedora" />
</condition>
</target>
</configuration>
</execution>
<!-- Build the BoringSSL static libs -->
<execution>
<id>build-boringssl</id>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<!-- Add the ant tasks from ant-contrib -->
<taskdef resource="net/sf/antcontrib/antcontrib.properties" />
<property environment="env" />
<if>
<available file="${boringsslHome}" />
<then>
<echo message="BoringSSL was already build, skipping the build step." />
</then>
<else>
<echo message="Building BoringSSL" />
<!-- Use the known SHA of the commit -->
<exec executable="git" failonerror="true" dir="${boringsslSourceDir}" resolveexecutable="true">
<arg value="checkout" />
<arg value="${boringsslCommitSha}" />
</exec>
<mkdir dir="${boringsslHome}" />
<if>
<equals arg1="${os.detected.name}" arg2="windows" />
<then>
<!-- On Windows, build with /MT for static linking -->
<property name="cmakeAsmFlags" value="" />
<property name="cmakeCFlags" value="/MT" />
<!-- Disable one warning to be able to build on windows -->
<property name="cmakeCxxFlags" value="/MT /wd4091" />
</then>
<elseif>
<equals arg1="${os.detected.name}" arg2="linux" />
<then>
<!-- On *nix, add ASM flags to disable executable stack -->
<property name="cmakeAsmFlags" value="-Wa,--noexecstack" />
<!-- Use -DOPENSSL_C11_ATOMIC so we replace most of the locking code with atomics-->
<property name="cmakeCFlags" value="-O3 -fno-omit-frame-pointer -DOPENSSL_C11_ATOMIC" />
<!-- We need to define __STDC_CONSTANT_MACROS and __STDC_FORMAT_MACROS when building boringssl on centos 6 -->
<property name="cmakeCxxFlags" value="-O3 -fno-omit-frame-pointer -Wno-error=maybe-uninitialized -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS" />
</then>
</elseif>
<else>
<!-- On *nix, add ASM flags to disable executable stack -->
<property name="cmakeAsmFlags" value="-Wa,--noexecstack" />
<!-- Use -DOPENSSL_C11_ATOMIC so we replace most of the locking code with atomics-->
<property name="cmakeCFlags" value="-O3 -fno-omit-frame-pointer -DOPENSSL_C11_ATOMIC" />
<property name="cmakeCxxFlags" value="-O3 -fno-omit-frame-pointer -Wno-error=range-loop-analysis" />
</else>
</if>
<exec executable="cmake" failonerror="true" dir="${boringsslHome}" resolveexecutable="true">
<arg value="-DCMAKE_POSITION_INDEPENDENT_CODE=TRUE" />
<arg value="-DCMAKE_BUILD_TYPE=Release" />
<arg value="-DCMAKE_ASM_FLAGS=${cmakeAsmFlags}" />
<arg value="-DCMAKE_C_FLAGS_RELEASE=${cmakeCFlags}" />
<arg value="-DCMAKE_CXX_FLAGS_RELEASE=${cmakeCxxFlags}" />
<arg value="${cmakeOsxDeploymentTarget}" />
<arg value="-GNinja" />
<arg value="${boringsslSourceDir}" />
</exec>
<if>
<!-- may be called ninja-build or ninja -->
<!-- See https://github.com/netty/netty-tcnative/issues/475 -->
<available file="ninja-build" filepath="${env.PATH}" />
<then>
<property name="ninjaExecutable" value="ninja-build" />
</then>
<else>
<property name="ninjaExecutable" value="ninja" />
</else>
</if>
<if>
<equals arg1="${os.detected.name}" arg2="linux" />
<then>
<exec executable="${ninjaExecutable}" failonerror="true" dir="${boringsslHome}" resolveexecutable="true">
<arg value="crypto/libcrypto.a" />
<arg value="crypto/fipsmodule/fipsmodule" />
<arg value="ssl/libssl.a" />
<arg value="decrepit/libdecrepit.a" />
</exec>
</then>
<else>
<exec executable="${ninjaExecutable}" failonerror="true" dir="${boringsslHome}" resolveexecutable="true" />
</else>
</if>
</else>
</if>
</target>
</configuration>
</execution>
<!-- Build the additional JAR that contains the native library. -->
<execution>
<id>native-jar</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<!-- Add the ant tasks from ant-contrib -->
<taskdef resource="net/sf/antcontrib/antcontrib.properties" />
<!-- Strip on linux. See https://github.com/netty/netty-tcnative/issues/129 -->
<if>
<and>
<equals arg1="${os.detected.name}" arg2="linux" />
<equals arg1="${strip.skip}" arg2="false" />
</and>
<then>
<exec executable="strip" failonerror="true" dir="${nativeLibOnlyDir}/META-INF/native/linux${archBits}/" resolveexecutable="true">
<arg value="--strip-debug" />
<arg value="libnetty_tcnative.so" />
</exec>
</then>
</if>
<copy todir="${nativeJarWorkdir}">
<zipfileset src="${defaultJarFile}" />
</copy>
<copy todir="${nativeJarWorkdir}" includeEmptyDirs="false">
<zipfileset dir="${nativeLibOnlyDir}/META-INF/native" />
<regexpmapper handledirsep="yes" from="^(?:[^/]+/)*([^/]+)$" to="META-INF/native/\1" />
</copy>
<!-- linux / osx -->
<move todir="${nativeJarWorkdir}/META-INF/native/" flatten="true">
<fileset dir="${nativeJarWorkdir}/META-INF/native/" />
<globmapper from="libnetty_tcnative.*" to="libnetty_tcnative_${os.detected.name}_${jniArch}.*" />
</move>
<!-- windows-->
<move todir="${nativeJarWorkdir}/META-INF/native/" flatten="true">
<fileset dir="${nativeJarWorkdir}/META-INF/native/" />
<globmapper from="netty_tcnative.*" to="netty_tcnative_${os.detected.name}_${jniArch}.*" />
</move>
<!-- Copy license material for attribution-->
<copy file="../NOTICE.txt" todir="${nativeJarWorkdir}/META-INF/" />
<copy file="../LICENSE.txt" todir="${nativeJarWorkdir}/META-INF/" />
<copy todir="${nativeJarWorkdir}/META-INF/license">
<fileset dir="../license" />
</copy>
<jar destfile="${nativeJarFile}" manifest="${nativeJarWorkdir}/META-INF/MANIFEST.MF" basedir="${nativeJarWorkdir}" index="true" excludes="META-INF/MANIFEST.MF,META-INF/INDEX.LIST" />
<attachartifact file="${nativeJarFile}" classifier="${os.detected.classifier}" type="jar" />
</target>
</configuration>
</execution>
</executions>
</plugin>
<!-- Configure the distribution statically linked against OpenSSL and APR -->
<plugin>
<groupId>org.fusesource.hawtjni</groupId>
<artifactId>maven-hawtjni-plugin</artifactId>
<executions>
<execution>
<id>build-native-lib</id>
<goals>
<goal>generate</goal>
<goal>build</goal>
</goals>
<phase>compile</phase>
<configuration>
<name>netty_tcnative</name>
<nativeSourceDirectory>${generatedSourcesDir}/c</nativeSourceDirectory>
<customPackageDirectory>${generatedSourcesDir}/native-package</customPackageDirectory>
<libDirectory>${nativeLibOnlyDir}</libDirectory>
<forceAutogen>${forceAutogen}</forceAutogen>
<forceConfigure>${forceConfigure}</forceConfigure>
<windowsBuildTool>msbuild</windowsBuildTool>
<!-- <verbose>true</verbose> -->
<configureArgs>
<configureArg>--with-ssl=no</configureArg>
<configureArg>--with-apr=${aprHome}</configureArg>
<configureArg>--with-static-libs</configureArg>
<configureArg>--libdir=${project.build.directory}/native-build/target/lib</configureArg>
<configureArg>${macOsxDeploymentTarget}</configureArg>
<configureArg>CFLAGS=${cflags}</configureArg>
<configureArg>CPPFLAGS=${cppflags}</configureArg>
<configureArg>LDFLAGS=${ldflags}</configureArg>
</configureArgs>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>linux-aarch64</id>
<properties>
<boringsslSourceDir>${project.build.directory}/boringssl-${boringsslBranch}</boringsslSourceDir>
<boringsslHome>${boringsslSourceDir}/build</boringsslHome>
<linkStatic>true</linkStatic>
<msvcSslIncludeDirs>${boringsslSourceDir}/include</msvcSslIncludeDirs>
<msvcSslLibDirs>${boringsslHome}/ssl;${boringsslHome}/crypto;${boringsslHome}/decrepit</msvcSslLibDirs>
<msvcSslLibs>ssl.lib;crypto.lib;decrepit.lib</msvcSslLibs>
<!-- use aarch_64 as this is also what os.detected.arch will use on an aarch64 system -->
<nativeJarFile>${project.build.directory}/${project.build.finalName}-${os.detected.name}-aarch_64.jar</nativeJarFile>
<nativeLibOsParts>${os.detected.name}_aarch_64</nativeLibOsParts>
<jniClassifier>${os.detected.name}-aarch_64</jniClassifier>
<jniArch>aarch_64</jniArch>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.4.1</version>
<dependencies>
<!-- Provides the 'requireFilesContent' enforcer rule. -->
<dependency>
<groupId>com.ceilfors.maven.plugin</groupId>
<artifactId>enforcer-rules</artifactId>
<version>1.2.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<artifactId>maven-enforcer-plugin</artifactId>
<executions>
<execution>
<id>enforce-release-environment</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireProperty>
<regexMessage>
Cross compile and Release process must be performed on linux-x86_64.
</regexMessage>
<property>os.detected.classifier</property>
<regex>^linux-x86_64.*</regex>
</requireProperty>
<requireFilesContent>
<message>
Cross compile and Release process must be performed on RHEL 7.6 or its derivatives.
</message>
<files>
<file>/etc/redhat-release</file>
</files>
<content>release 7.6</content>
</requireFilesContent>
<requireProperty>
<property>aprArmHome</property>
<message>The folder of APR for aarch64 must be specified by hand. Please try -DaprArmHome=</message>
</requireProperty>
</rules>
<ignoreCache>true</ignoreCache>
</configuration>
</execution>
</executions>
</plugin>
<!-- Download the BoringSSL source -->
<plugin>
<artifactId>maven-scm-plugin</artifactId>
<executions>
<execution>
<id>get-boringssl</id>
<phase>generate-sources</phase>
<goals>
<goal>checkout</goal>
</goals>
<configuration>
<checkoutDirectory>${boringsslSourceDir}</checkoutDirectory>
<connectionType>developerConnection</connectionType>
<developerConnectionUrl>scm:git:https://boringssl.googlesource.com/boringssl</developerConnectionUrl>
<scmVersion>${boringsslBranch}</scmVersion>
<scmVersionType>branch</scmVersionType>
<skipCheckoutIfExists>true</skipCheckoutIfExists>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${generatedSourcesDir}/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<!-- Add the commit ID and branch to the manifest. -->
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
<Apr-Version>${aprVersion}</Apr-Version>
<BoringSSL-Revision>${boringsslCommitSha}</BoringSSL-Revision>
<BoringSSL-Branch>${boringsslBranch}</BoringSSL-Branch>
</instructions>
</configuration>
</plugin>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<!-- Only deploy to Maven Central if on centos (fedora). -->
<execution>
<id>skip-deploy</id>
<phase>initialize</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<exportAntProperties>true</exportAntProperties>
<target>
<condition property="maven.deploy.skip" value="false" else="true">
<isset property="os.detected.release.like.fedora" />
</condition>
</target>
</configuration>
</execution>
<!-- Build the BoringSSL static libs -->
<execution>
<id>build-boringssl</id>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<!-- Add the ant tasks from ant-contrib -->
<taskdef resource="net/sf/antcontrib/antcontrib.properties" />
<property environment="env" />
<if>
<available file="${boringsslHome}" />
<then>
<echo message="BoringSSL was already build, skipping the build step." />
</then>
<else>
<echo message="Building BoringSSL" />
<!-- Use the known SHA of the commit -->
<exec executable="git" failonerror="true" dir="${boringsslSourceDir}" resolveexecutable="true">
<arg value="checkout" />
<arg value="${boringsslCommitSha}" />
</exec>
<mkdir dir="${boringsslHome}" />
<if>
<equals arg1="${os.detected.name}" arg2="windows" />
<then>
<!-- On Windows, build with /MT for static linking -->
<property name="cmakeAsmFlags" value="" />
<property name="cmakeCFlags" value="/MT" />
<!-- Disable one warning to be able to build on windows -->
<property name="cmakeCxxFlags" value="/MT /wd4091" />
</then>
<elseif>
<equals arg1="${os.detected.name}" arg2="linux" />
<then>
<!-- On *nix, add ASM flags to disable executable stack -->
<property name="cmakeAsmFlags" value="-Wa,--noexecstack" />
<property name="cmakeCFlags" value="-O3 -fno-omit-frame-pointer" />
<!-- We need to define __STDC_CONSTANT_MACROS and __STDC_FORMAT_MACROS when building boringssl on centos 6 -->
<property name="cmakeCxxFlags" value="-O3 -fno-omit-frame-pointer -Wno-error=maybe-uninitialized -Wno-error=shadow -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS" />
</then>
</elseif>
<else>
<!-- On *nix, add ASM flags to disable executable stack -->
<property name="cmakeAsmFlags" value="-Wa,--noexecstack" />
<property name="cmakeCFlags" value="-O3 -fno-omit-frame-pointer" />
<property name="cmakeCxxFlags" value="-O3 -fno-omit-frame-pointer" />
</else>
</if>
<exec executable="cmake" failonerror="true" dir="${boringsslHome}" resolveexecutable="true">
<arg value="-DCMAKE_POSITION_INDEPENDENT_CODE=TRUE" />
<arg value="-DCMAKE_BUILD_TYPE=Release" />
<arg value="-DCMAKE_ASM_FLAGS=${cmakeAsmFlags}" />
<arg value="-DCMAKE_C_FLAGS_RELEASE=${cmakeCFlags}" />
<arg value="-DCMAKE_CXX_FLAGS_RELEASE=${cmakeCxxFlags}" />
<arg value="-DCMAKE_SYSTEM_NAME=Linux" />
<arg value="-DCMAKE_SYSTEM_PROCESSOR=aarch64" />
<arg value="-DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc" />
<arg value="-DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++" />
<arg value="-GNinja" />
<arg value="${boringsslSourceDir}" />
</exec>
<if>
<!-- may be called ninja-build or ninja -->
<!-- See https://github.com/netty/netty-tcnative/issues/475 -->
<available file="ninja-build" filepath="${env.PATH}" />
<then>
<exec executable="ninja-build" failonerror="true" dir="${boringsslHome}" resolveexecutable="true" />
</then>
<else>
<exec executable="ninja" failonerror="true" dir="${boringsslHome}" resolveexecutable="true" />
</else>
</if>
</else>
</if>
</target>
</configuration>
</execution>
<!-- Build the additional JAR that contains the native library. -->
<execution>
<id>native-jar</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<!-- Add the ant tasks from ant-contrib -->
<taskdef resource="net/sf/antcontrib/antcontrib.properties" />
<!-- Strip on linux. See https://github.com/netty/netty-tcnative/issues/129 -->
<if>
<and>
<equals arg1="${os.detected.name}" arg2="linux" />
<equals arg1="${strip.skip}" arg2="false" />
</and>
<then>
<exec executable="aarch64-linux-gnu-strip" failonerror="true" dir="${nativeLibOnlyDir}/META-INF/native/linux${archBits}/" resolveexecutable="true">
<arg value="--strip-debug" />
<arg value="libnetty_tcnative.so" />
</exec>
</then>
</if>
<copy todir="${nativeJarWorkdir}">
<zipfileset src="${defaultJarFile}" />
</copy>
<copy todir="${nativeJarWorkdir}" includeEmptyDirs="false">
<zipfileset dir="${nativeLibOnlyDir}/META-INF/native" />
<regexpmapper handledirsep="yes" from="^(?:[^/]+/)*([^/]+)$" to="META-INF/native/\1" />
</copy>
<!-- linux / osx -->
<move todir="${nativeJarWorkdir}/META-INF/native/" flatten="true">
<fileset dir="${nativeJarWorkdir}/META-INF/native/" />
<globmapper from="libnetty_tcnative.*" to="libnetty_tcnative_${os.detected.name}_${jniArch}.*" />
</move>
<!-- windows-->
<move todir="${nativeJarWorkdir}/META-INF/native/" flatten="true">
<fileset dir="${nativeJarWorkdir}/META-INF/native/" />
<globmapper from="netty_tcnative.*" to="netty_tcnative_${os.detected.name}_${jniArch}.*" />
</move>
<!-- Copy license material for attribution-->
<copy file="../NOTICE.txt" todir="${nativeJarWorkdir}/META-INF/" />
<copy file="../LICENSE.txt" todir="${nativeJarWorkdir}/META-INF/" />
<copy todir="${nativeJarWorkdir}/META-INF/license">
<fileset dir="../license" />
</copy>
<jar destfile="${nativeJarFile}" manifest="${nativeJarWorkdir}/META-INF/MANIFEST.MF" basedir="${nativeJarWorkdir}" index="true" excludes="META-INF/MANIFEST.MF,META-INF/INDEX.LIST" />
<attachartifact file="${nativeJarFile}" classifier="${os.detected.name}-aarch_64" type="jar" />
</target>
</configuration>
</execution>
</executions>
</plugin>
<!-- Configure the distribution statically linked against OpenSSL and APR -->
<plugin>
<groupId>org.fusesource.hawtjni</groupId>
<artifactId>maven-hawtjni-plugin</artifactId>
<executions>
<execution>
<id>build-native-lib</id>
<goals>
<goal>generate</goal>
<goal>build</goal>
</goals>
<phase>compile</phase>
<configuration>
<name>netty_tcnative</name>
<nativeSourceDirectory>${generatedSourcesDir}/c</nativeSourceDirectory>
<customPackageDirectory>${generatedSourcesDir}/native-package</customPackageDirectory>
<libDirectory>${nativeLibOnlyDir}</libDirectory>
<forceAutogen>${forceAutogen}</forceAutogen>
<forceConfigure>${forceConfigure}</forceConfigure>
<windowsBuildTool>msbuild</windowsBuildTool>
<!-- <verbose>true</verbose> -->
<configureArgs>
<configureArg>--with-ssl=no</configureArg>
<configureArg>--with-apr=${aprArmHome}</configureArg>
<configureArg>--with-static-libs</configureArg>
<configureArg>--libdir=${project.build.directory}/native-build/target/lib</configureArg>
<configureArg>CFLAGS=-O3 -Werror -fno-omit-frame-pointer -fvisibility=hidden -Wunused -Wno-unused-value</configureArg>
<configureArg>CPPFLAGS=-DHAVE_OPENSSL -I${boringsslSourceDir}/include</configureArg>
<configureArg>LDFLAGS=-L${boringsslHome}/ssl -L${boringsslHome}/crypto -L${boringsslHome}/decrepit -ldecrepit -lssl -lcrypto</configureArg>
<configureArg>--host=aarch64-linux-gnu</configureArg>
</configureArgs>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!--
Profile that builds the uber-jar containing native libraries for all platforms. When this
is active, it will automatically disable the default profile. This should only be used
once the jars for all platforms are available on Maven Central. Installing/deploying this
artifact will overwrite the default netty-tcnative-boringssl-static.jar (i.e. the jar
without a classifier).
To build from the top level, run:
mvn clean deploy -pl boringssl-static -P uber-staging -DstagingRepositoryId={repoId}
The repoId is necessary to allow the build to download the platform-specific jars from
the nexus staging repository.
-->
<profile>
<id>uber-staging</id>
<properties>
<unpackDir>${project.build.directory}/unpack</unpackDir>
<libDir>${project.build.directory}/lib</libDir>
<nativeDir>${project.build.outputDirectory}/META-INF/native</nativeDir>
<skipTests>true</skipTests>
<!--
As we just re-package we don't want to do any extra steps that are needed for static compilation or
building the native lib itself.
-->
<linkStatic>false</linkStatic>
<compileLibrary>false</compileLibrary>
<uberArch>${os.detected.arch}</uberArch>
</properties>
<repositories>
<repository>
<id>staged-releases</id>
<name>Staged Releases</name>
<url>https://oss.sonatype.org/service/local/repositories/${stagingRepositoryId}/content/</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration combine.self="override">
<artifactItems>
<!-- Unpack just the native libraries -->
<artifactItem>
<groupId>io.netty</groupId>
<artifactId>netty-tcnative-boringssl-static</artifactId>
<version>${project.version}</version>
<classifier>osx-${uberArch}</classifier>
<type>jar</type>
<outputDirectory>${unpackDir}/osx-${uberArch}</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>io.netty</groupId>
<artifactId>netty-tcnative-boringssl-static</artifactId>
<version>${project.version}</version>
<classifier>linux-${uberArch}</classifier>
<type>jar</type>
<outputDirectory>${unpackDir}/linux-${uberArch}</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>io.netty</groupId>
<artifactId>netty-tcnative-boringssl-static</artifactId>
<version>${project.version}</version>
<classifier>linux-aarch_64</classifier>
<type>jar</type>
<outputDirectory>${unpackDir}/linux-aarch_64</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>io.netty</groupId>
<artifactId>netty-tcnative-boringssl-static</artifactId>
<version>${project.version}</version>
<classifier>windows-${uberArch}</classifier>
<type>jar</type>
<outputDirectory>${unpackDir}/windows-${uberArch}</outputDirectory>
</artifactItem>
<!-- Now unpack all of the Java classes and the original MANIFEST.MF -->
<artifactItem>
<groupId>io.netty</groupId>
<artifactId>netty-tcnative-boringssl-static</artifactId>
<version>${project.version}</version>
<type>jar</type>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
<includes>**/*.class,**/MANIFEST.MF</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>copy-jni-libs</id>
<phase>generate-resources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target name="copy-jni-libs">
<mkdir dir="${nativeDir}" />
<copy todir="${nativeDir}" flatten="true">
<fileset dir="${unpackDir}/osx-${uberArch}/META-INF/native" />
</copy>
<copy todir="${nativeDir}" flatten="true">
<fileset dir="${unpackDir}/linux-${uberArch}/META-INF/native" />
</copy>
<copy todir="${nativeDir}" flatten="true">
<fileset dir="${unpackDir}/linux-aarch_64/META-INF/native" />
</copy>
<copy todir="${nativeDir}" flatten="true">
<fileset dir="${unpackDir}/windows-${uberArch}/META-INF/native" />
</copy>
<!-- Copy license material for attribution-->
<copy file="../NOTICE.txt" todir="${project.build.outputDirectory}/META-INF/" />
<copy file="../LICENSE.txt" todir="${project.build.outputDirectory}/META-INF/" />
<copy todir="${project.build.outputDirectory}/META-INF/license">
<fileset dir="../license" />
</copy>
</target>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<executions>
<execution>
<id>generate-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
<configuration>
<supportedProjectTypes>
<supportedProjectType>jar</supportedProjectType>
</supportedProjectTypes>
<instructions>
<Export-Package>io.netty.internal.tcnative.*</Export-Package>
<Bundle-NativeCode>
META-INF/native/libnetty_tcnative_osx_${uberArch}.jnilib;osname=macos;osname=macosx;processor=${uberArch},
META-INF/native/libnetty_tcnative_linux_${uberArch}.so;osname=linux;processor=${uberArch},
META-INF/native/libnetty_tcnative_linux_aarch_64.so;osname=linux;processor=aarch_64,
META-INF/native/netty_tcnative_windows_${uberArch}.dll;osname=win32;processor=${uberArch}
</Bundle-NativeCode>
</instructions>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>uber-snapshot</id>
<properties>
<unpackDir>${project.build.directory}/unpack</unpackDir>
<libDir>${project.build.directory}/lib</libDir>
<nativeDir>${project.build.outputDirectory}/META-INF/native</nativeDir>
<skipTests>true</skipTests>
<!--
As we just re-package we don't want to do any extra steps that are needed for static compilation or
building the native lib itself.
-->
<linkStatic>false</linkStatic>
<compileLibrary>false</compileLibrary>
<uberArch>${os.detected.arch}</uberArch>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<!-- Unpack just the native libraries (windows excluded as we not publish snapshots for it yet) -->
<artifactItem>
<groupId>io.netty</groupId>
<artifactId>netty-tcnative-boringssl-static</artifactId>
<version>${project.version}</version>
<classifier>osx-${uberArch}</classifier>
<type>jar</type>
<outputDirectory>${unpackDir}/osx-${uberArch}</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>io.netty</groupId>
<artifactId>netty-tcnative-boringssl-static</artifactId>
<version>${project.version}</version>
<classifier>linux-${uberArch}</classifier>
<type>jar</type>
<outputDirectory>${unpackDir}/linux-${uberArch}</outputDirectory>
</artifactItem>
<!-- Now unpack all of the Java classes and the original MANIFEST.MF -->
<artifactItem>
<groupId>io.netty</groupId>
<artifactId>netty-tcnative-boringssl-static</artifactId>
<version>${project.version}</version>
<type>jar</type>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
<includes>**/*.class,**/MANIFEST.MF</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>copy-jni-libs</id>
<phase>generate-resources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<!-- Windows excluded as we not publish snapshots for it yet -->
<target name="copy-jni-libs">
<mkdir dir="${nativeDir}" />
<copy todir="${nativeDir}" flatten="true">
<fileset dir="${unpackDir}/osx-${uberArch}/META-INF/native" />
</copy>
<copy todir="${nativeDir}" flatten="true">
<fileset dir="${unpackDir}/linux-${uberArch}/META-INF/native" />
</copy>
<!-- Copy license material for attribution-->
<copy file="../NOTICE.txt" todir="${project.build.outputDirectory}/META-INF/" />
<copy file="../LICENSE.txt" todir="${project.build.outputDirectory}/META-INF/" />
<copy todir="${project.build.outputDirectory}/META-INF/license">
<fileset dir="../license" />
</copy>
</target>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<executions>
<execution>
<id>generate-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
<configuration>
<supportedProjectTypes>
<supportedProjectType>jar</supportedProjectType>
</supportedProjectTypes>
<instructions>
<Export-Package>io.netty.internal.tcnative.*</Export-Package>
<Bundle-NativeCode>
META-INF/native/libnetty_tcnative_osx_${uberArch}.jnilib;osname=macos;osname=macosx;processor=${uberArch},
META-INF/native/libnetty_tcnative_linux_${uberArch}.so;osname=linux;processor=${uberArch},
META-INF/native/netty_tcnative_windows_${uberArch}.dll;osname=win32;processor=${uberArch}
</Bundle-NativeCode>
</instructions>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>boringssl-static-asan</id>
<properties>
<!-- We do not use an -O flag to ensure we have all functions in the stack when a leak is reported later on -->
<cflags>-Werror -fno-omit-frame-pointer -fvisibility=hidden -Wunused -Wno-unused-value -fsanitize=address</cflags>
<cppflags>-DHAVE_OPENSSL -I${boringsslSourceDir}/include -fsanitize=address</cppflags>
<ldflags>-L${boringsslHome}/ssl -L${boringsslHome}/crypto -L${boringsslHome}/decrepit -ldecrepit -lssl -lcrypto -fsanitize=address</ldflags>
</properties>
</profile>
</profiles>
</project>