Skip to content

Commit 881d92c

Browse files
Merge pull request #47 from Infisical/daniel/c-musl-x86
Fix: C bindings for Linux musl x86
2 parents c5291fb + 7743427 commit 881d92c

File tree

3 files changed

+55
-13
lines changed

3 files changed

+55
-13
lines changed

.github/workflows/build-c-bindings.yml

+15-5
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ jobs:
2323
target: aarch64-unknown-linux-gnu
2424
- os: ubuntu-22.04
2525
target: aarch64-unknown-linux-musl
26+
- os: ubuntu-22.04
27+
target: x86_64-unknown-linux-musl
2628

2729
steps:
2830
- name: Checkout
@@ -54,15 +56,21 @@ jobs:
5456
tar -xzf aarch64-linux-musl-cross.tgz
5557
echo "$PWD/aarch64-linux-musl-cross/bin" >> $GITHUB_PATH
5658
57-
- name: Build Rust (Normal)
58-
if: matrix.settings.target != 'aarch64-unknown-linux-musl'
59+
- name: Install cross-compilation tools for x86_64-musl
60+
if: matrix.settings.target == 'x86_64-unknown-linux-musl'
61+
run: |
62+
sudo apt-get update
63+
sudo apt-get install -y musl-tools
64+
65+
- name: Build Rust (GNU/Others)
66+
if: ${{ !endsWith(matrix.settings.target, '-linux-musl') }}
5967
env:
6068
RUSTFLAGS: "-D warnings"
6169
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc
6270
run: cargo build --target ${{ matrix.settings.target }} --release --workspace --exclude infisical-py
6371

6472
- name: Build Rust (Musl)
65-
if: matrix.settings.target == 'aarch64-unknown-linux-musl'
73+
if: endsWith(matrix.settings.target, '-linux-musl')
6674
env:
6775
RUSTFLAGS: "-D warnings -C target-feature=-crt-static"
6876
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER: aarch64-linux-musl-gcc
@@ -72,5 +80,7 @@ jobs:
7280
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
7381
with:
7482
name: libinfisical_c_files-${{ matrix.settings.target }}
75-
path: |
76-
target/${{ matrix.settings.target }}/release/*infisical_c*
83+
path: | # .so for linux, .dll for windows, .dylib for darwin/macos
84+
target/${{ matrix.settings.target }}/release/*infisical_c*.so
85+
target/${{ matrix.settings.target }}/release/*infisical_c*.dll
86+
target/${{ matrix.settings.target }}/release/*infisical_c*.dylib

.github/workflows/release-java.yml

+19-2
Original file line numberDiff line numberDiff line change
@@ -45,36 +45,49 @@ jobs:
4545
distribution: temurin
4646
java-version: 21
4747

48+
# x86/x64 GNU bindings (MacOS)
4849
- name: Download x86_64-apple-darwin files
4950
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
5051
with:
5152
name: libinfisical_c_files-x86_64-apple-darwin
5253
path: languages/java/src/main/resources/darwin-x86-64
5354

55+
# Aarch64 GNU bindings (MacOS)
5456
- name: Download aarch64-apple-darwin files
5557
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
5658
with:
5759
name: libinfisical_c_files-aarch64-apple-darwin
5860
path: languages/java/src/main/resources/darwin-aarch64
5961

62+
# x86/x64 GNU bindings (LINUX)
6063
- name: Download x86_64-unknown-linux-gnu files
6164
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
6265
with:
6366
name: libinfisical_c_files-x86_64-unknown-linux-gnu
6467
path: languages/java/src/main/resources/linux-x86-64
6568

69+
# Aarch64 GNU bindings (LINUX)
6670
- name: Download aarch64-unknown-linux-gnu files
6771
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
6872
with:
6973
name: libinfisical_c_files-aarch64-unknown-linux-gnu
7074
path: languages/java/src/main/resources/linux-aarch64-gnu
7175

76+
# Aarch64 Musl bindings (LINUX)
7277
- name: Download aarch64-unknown-linux-musl files
7378
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
7479
with:
7580
name: libinfisical_c_files-aarch64-unknown-linux-musl
7681
path: languages/java/src/main/resources/linux-aarch64-musl
7782

83+
# x86/x64 Musl bindings (LINUX)
84+
- name: Download x86_64-unknown-linux-musl files
85+
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
86+
with:
87+
name: libinfisical_c_files-x86_64-unknown-linux-musl
88+
path: languages/java/src/main/resources/linux-x86-64-musl
89+
90+
# x86/x64 Musl bindings (Windows)
7891
- name: Download x86_64-pc-windows-msvc files
7992
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
8093
with:
@@ -84,9 +97,13 @@ jobs:
8497
- name: Organize and rename Linux ARM64 libraries
8598
run: |
8699
mkdir -p languages/java/src/main/resources/linux-aarch64
87-
mv languages/java/src/main/resources/linux-aarch64-gnu/libinfisical_c.so languages/java/src/main/resources/linux-aarch64/libinfisical_c_gnu.so
88-
mv languages/java/src/main/resources/linux-aarch64-musl/libinfisical_c.so languages/java/src/main/resources/linux-aarch64/libinfisical_c_musl.so
100+
mv languages/java/src/main/resources/linux-aarch64-gnu/libinfisical_c.so languages/java/src/main/resources/linux-aarch64/libinfisical_c_aarch64_gnu.so
101+
mv languages/java/src/main/resources/linux-aarch64-musl/libinfisical_c.so languages/java/src/main/resources/linux-aarch64/libinfisical_c_aarch64_musl.so
102+
103+
mv languages/java/src/main/resources/linux-x86-64-musl/libinfisical_c.so languages/java/src/main/resources/linux-x86-64/libinfisical_c_x64_musl.so
104+
89105
rm -rf languages/java/src/main/resources/linux-aarch64-musl
106+
rm -rf languages/java/src/main/resources/linux-x86-64-musl
90107
rm -rf languages/java/src/main/resources/linux-aarch64-gnu
91108
92109
- name: List files in resources folders

languages/java/src/main/java/com/infisical/sdk/InfisicalClient.java

+21-6
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,28 @@ public InfisicalClient(ClientSettings settings) {
2525
String arch = System.getProperty("os.arch");
2626
String os = System.getProperty("os.name").toLowerCase();
2727

28-
if (os.contains("linux") && arch.equals("aarch64")) {
29-
if (isMusl()) {
30-
libraryName = "infisical_c_musl";
31-
} else {
32-
libraryName = "infisical_c_gnu";
28+
if (os.contains("linux")) {
29+
30+
// Aarch64 specific bindings (gnu/musl determinations)
31+
if (arch.equals("aarch64")) {
32+
if (isMusl()) {
33+
libraryName = "infisical_c_aarch64_musl";
34+
} else {
35+
libraryName = "infisical_c_aarch64_gnu";
36+
}
37+
}
38+
// x86_64 specific bindings (gnu/musl determinations)
39+
else if (arch.equals("amd64") || arch.equals("x86_64")) {
40+
if (isMusl()) {
41+
libraryName = "libinfisical_c_x64_musl";
42+
} else {
43+
// We build the default bindings for x86_64, so no need to specify a custom
44+
// library path for this.
45+
// Therefore there's no need to set the libraryName variable here, because it defaults to "infisical_c".
46+
// libraryName = "infisical_c";
47+
}
3348
}
34-
}
49+
}
3550

3651
library = Native.load(libraryName, InfisicalLibrary.class);
3752

0 commit comments

Comments
 (0)