Skip to content

Commit

Permalink
Brotli: lib paths for other major platforms
Browse files Browse the repository at this point in the history
  • Loading branch information
Karm committed May 21, 2024
1 parent 8e8103d commit b4fa5e7
Showing 1 changed file with 34 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
import io.quarkus.runtime.LiveReloadConfig;
import io.quarkus.runtime.RuntimeValue;
import io.quarkus.runtime.shutdown.ShutdownConfig;
import io.quarkus.utilities.OS;
import io.quarkus.vertx.core.deployment.CoreVertxBuildItem;
import io.quarkus.vertx.core.deployment.EventLoopCountBuildItem;
import io.quarkus.vertx.http.HttpServerOptionsCustomizer;
Expand Down Expand Up @@ -514,16 +515,47 @@ private static boolean isSslConfigured() {
@BuildStep(onlyIf = NativeOrNativeSourcesBuild.class)
void brotliResources(HttpBuildTimeConfig httpBuildTimeConfig,
BuildProducer<NativeImageResourcePatternsBuildItem> resources,
BuildProducer<RuntimeInitializedClassBuildItem> runtimeInitializedClasses) {
BuildProducer<RuntimeInitializedClassBuildItem> runtimeInitializedClasses) throws BuildException {

if (httpBuildTimeConfig.compressors.isPresent() &&
httpBuildTimeConfig.compressors.get().stream().anyMatch(s -> s.equalsIgnoreCase("br"))) {
final String arch = System.getProperty("os.arch");
final boolean amd64 = arch.matches("^(amd64|x64|x86_64)$");
final boolean aarch64 = "aarch64".equals(arch);
final String lib;
if (OS.determineOS() == OS.LINUX) {
if (amd64) {
lib = "linux-x86_64/libbrotli.so";
} else if (aarch64) {
lib = "linux-aarch64/libbrotli.so";
} else {
throw new BuildException("Brotli compressor: No library for linux-" + arch);
}
} else if (OS.determineOS() == OS.WINDOWS) {
if (amd64) {
lib = "windows-x86_64/brotli.dll";
} else if (aarch64) {
lib = "windows-aarch64/brotli.dll";
} else {
throw new BuildException("Brotli compressor: No library for windows-" + arch);
}
} else if (OS.determineOS() == OS.MAC) {
if (amd64) {
lib = "osx-x86_64/libbrotli.dylib";
} else if (aarch64) {
lib = "osx-aarch64/libbrotli.dylib";
} else {
throw new BuildException("Brotli compressor: No library for osx-" + arch);
}
} else {
throw new BuildException("Brotli compressor: Your platform is not supported.");
}

resources.produce(NativeImageResourcePatternsBuildItem.builder()
// We do have Brotli4J on classpath thanks to Vert.X -> Netty dependencies.
.includePattern("\\QMETA-INF/services/com.aayushatharva.brotli4j.service.BrotliNativeProvider\\E")
// Native library. We pick only the one relevant to our system.
.includePattern("\\Qlib/linux-x86_64/libbrotli.so\\E")
.includePattern("\\Qlib/" + lib + "\\E")
.build());

// Static initializer tries to load the native library in Brotli4jLoader; must be done at runtime.
Expand Down

0 comments on commit b4fa5e7

Please sign in to comment.