Skip to content

Commit f659131

Browse files
authored
Tune Linux native build flags and xxhash compilation (#41)
1 parent af57e23 commit f659131

File tree

2 files changed

+77
-14
lines changed

2 files changed

+77
-14
lines changed

.github/workflows/build-all-and-publish.yml

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,33 +16,36 @@ jobs:
1616
linux:
1717
name: Linux natives (${{ matrix.arch }})
1818
runs-on: ubuntu-latest
19+
env:
20+
NATIVE_BASE_CFLAGS: -O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection
21+
NATIVE_XXHASH_EXTRA_CFLAGS: -fno-tree-vectorize
1922
strategy:
2023
fail-fast: false
2124
matrix:
2225
include:
2326
- arch: amd64
2427
cc: gcc
25-
cflags: ""
28+
arch_cflags: ""
2629
ldflags: ""
2730
apt: ""
2831
- arch: i386
2932
cc: gcc
30-
cflags: "-m32"
33+
arch_cflags: "-m32"
3134
ldflags: ""
3235
apt: "gcc-multilib libc6-dev-i386"
3336
- arch: aarch64
3437
cc: aarch64-linux-gnu-gcc
35-
cflags: ""
38+
arch_cflags: ""
3639
ldflags: ""
3740
apt: "gcc-aarch64-linux-gnu"
3841
- arch: ppc64le
3942
cc: powerpc64le-linux-gnu-gcc
40-
cflags: ""
43+
arch_cflags: ""
4144
ldflags: ""
4245
apt: "gcc-powerpc64le-linux-gnu"
4346
- arch: s390x
4447
cc: s390x-linux-gnu-gcc
45-
cflags: ""
48+
arch_cflags: ""
4649
ldflags: ""
4750
apt: "gcc-s390x-linux-gnu"
4851

@@ -73,12 +76,13 @@ jobs:
7376
7477
- name: Build (mvn package)
7578
run: |
76-
./mvnw -B -V -DskipTests \
77-
-Darch.id=${{ matrix.arch }} \
78-
-Dnative.cc=${{ matrix.cc }} \
79-
"-Dnative.cflags=${{ matrix.cflags }}" \
80-
"-Dnative.ldflags=${{ matrix.ldflags }}" \
81-
package
79+
./mvnw -B -V -DskipTests \
80+
-Darch.id=${{ matrix.arch }} \
81+
-Dnative.cc=${{ matrix.cc }} \
82+
"-Dnative.cflags=${{ env.NATIVE_BASE_CFLAGS }} ${{ matrix.arch_cflags }}" \
83+
"-Dnative.xxhash.cflags=${{ env.NATIVE_BASE_CFLAGS }} ${{ matrix.arch_cflags }} ${{ env.NATIVE_XXHASH_EXTRA_CFLAGS }}" \
84+
"-Dnative.ldflags=${{ matrix.ldflags }}" \
85+
package
8286
8387
- name: Upload native library
8488
uses: actions/upload-artifact@v4

pom.xml

Lines changed: 62 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,10 @@
388388
<name>Linux</name>
389389
</os>
390390
</activation>
391+
<properties>
392+
<native.cflags>-O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection</native.cflags>
393+
<native.xxhash.cflags>${native.cflags} -fno-tree-vectorize</native.xxhash.cflags>
394+
</properties>
391395
<build>
392396
<plugins>
393397
<plugin>
@@ -417,20 +421,75 @@
417421
<!-- Toolchain overrides come from Maven properties: ${native.cc}, ${native.cflags}, ${native.ldflags} -->
418422

419423
<mkdir dir="${project.build.outputDirectory}/net/jpountz/util/${os.id}/${arch.id}"/>
424+
<mkdir dir="${project.build.directory}/native/${os.id}/${arch.id}"/>
420425
<exec executable="${native.cc}" failonerror="true">
421426
<env key="SOURCE_DATE_EPOCH" value="0"/>
422-
<arg value="-O3"/>
423-
<arg value="-fPIC"/>
424-
<arg value="-shared"/>
425427
<arg line="${native.cflags}"/>
428+
<arg value="-fPIC"/>
426429
<arg value="-I${project.basedir}/src/lz4/lib"/>
427430
<arg value="-I${java.home}/include"/>
428431
<arg value="-I${java.home}/include/linux"/>
432+
<arg value="-c"/>
429433
<arg value="${project.basedir}/src/jni/net_jpountz_lz4_LZ4JNI.c"/>
434+
<arg value="-o"/>
435+
<arg value="${project.build.directory}/native/${os.id}/${arch.id}/net_jpountz_lz4_LZ4JNI.o"/>
436+
</exec>
437+
<exec executable="${native.cc}" failonerror="true">
438+
<env key="SOURCE_DATE_EPOCH" value="0"/>
439+
<arg line="${native.cflags}"/>
440+
<arg value="-fPIC"/>
441+
<arg value="-I${project.basedir}/src/lz4/lib"/>
442+
<arg value="-I${java.home}/include"/>
443+
<arg value="-I${java.home}/include/linux"/>
444+
<arg value="-c"/>
430445
<arg value="${project.basedir}/src/jni/net_jpountz_xxhash_XXHashJNI.c"/>
446+
<arg value="-o"/>
447+
<arg value="${project.build.directory}/native/${os.id}/${arch.id}/net_jpountz_xxhash_XXHashJNI.o"/>
448+
</exec>
449+
<exec executable="${native.cc}" failonerror="true">
450+
<env key="SOURCE_DATE_EPOCH" value="0"/>
451+
<arg line="${native.cflags}"/>
452+
<arg value="-fPIC"/>
453+
<arg value="-I${project.basedir}/src/lz4/lib"/>
454+
<arg value="-I${java.home}/include"/>
455+
<arg value="-I${java.home}/include/linux"/>
456+
<arg value="-c"/>
431457
<arg value="${project.basedir}/src/lz4/lib/lz4.c"/>
458+
<arg value="-o"/>
459+
<arg value="${project.build.directory}/native/${os.id}/${arch.id}/lz4.o"/>
460+
</exec>
461+
<exec executable="${native.cc}" failonerror="true">
462+
<env key="SOURCE_DATE_EPOCH" value="0"/>
463+
<arg line="${native.cflags}"/>
464+
<arg value="-fPIC"/>
465+
<arg value="-I${project.basedir}/src/lz4/lib"/>
466+
<arg value="-I${java.home}/include"/>
467+
<arg value="-I${java.home}/include/linux"/>
468+
<arg value="-c"/>
432469
<arg value="${project.basedir}/src/lz4/lib/lz4hc.c"/>
470+
<arg value="-o"/>
471+
<arg value="${project.build.directory}/native/${os.id}/${arch.id}/lz4hc.o"/>
472+
</exec>
473+
<exec executable="${native.cc}" failonerror="true">
474+
<env key="SOURCE_DATE_EPOCH" value="0"/>
475+
<arg line="${native.xxhash.cflags}"/>
476+
<arg value="-fPIC"/>
477+
<arg value="-I${project.basedir}/src/lz4/lib"/>
478+
<arg value="-I${java.home}/include"/>
479+
<arg value="-I${java.home}/include/linux"/>
480+
<arg value="-c"/>
433481
<arg value="${project.basedir}/src/lz4/lib/xxhash.c"/>
482+
<arg value="-o"/>
483+
<arg value="${project.build.directory}/native/${os.id}/${arch.id}/xxhash.o"/>
484+
</exec>
485+
<exec executable="${native.cc}" failonerror="true">
486+
<env key="SOURCE_DATE_EPOCH" value="0"/>
487+
<arg value="-shared"/>
488+
<arg value="${project.build.directory}/native/${os.id}/${arch.id}/net_jpountz_lz4_LZ4JNI.o"/>
489+
<arg value="${project.build.directory}/native/${os.id}/${arch.id}/net_jpountz_xxhash_XXHashJNI.o"/>
490+
<arg value="${project.build.directory}/native/${os.id}/${arch.id}/lz4.o"/>
491+
<arg value="${project.build.directory}/native/${os.id}/${arch.id}/lz4hc.o"/>
492+
<arg value="${project.build.directory}/native/${os.id}/${arch.id}/xxhash.o"/>
434493
<arg line="${native.ldflags}"/>
435494
<arg value="-o"/>
436495
<arg value="${project.build.outputDirectory}/net/jpountz/util/${os.id}/${arch.id}/liblz4-java.${lib.ext}"/>

0 commit comments

Comments
 (0)