in sdk/enclave/src/main/java/org/apache/teaclave/javasdk/enclave/c/EnclaveEnvironment.java [54:79]
public List<String> getHeaderFiles() {
// Register additional resolver to resolve header file from jar file as resource stream
ProjectHeaderFile.HeaderResolversRegistry.registerAdditionalResolver((projectName, headerFile) -> {
try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
InputStream headerInputStream = EnclaveDirectives.class.getClassLoader().getResourceAsStream(HEADER_FILE);
if (headerInputStream == null) {
VMError.shouldNotReachHere("Can't find " + HEADER_FILE + " from classpath as resource");
}
headerInputStream.transferTo(os);
Path headerPath = ImageSingletons.lookup(TemporaryBuildDirectoryProvider.class).getTemporaryBuildDirectory().resolve(HEADER_FILE);
Path nativeDir = headerPath.getParent();
if (Files.notExists(nativeDir)) {
Files.createDirectory(nativeDir);
}
File tmpHeaderFile = Files.createFile(headerPath).toFile();
try (FileOutputStream fos = new FileOutputStream(tmpHeaderFile)) {
fos.write(os.toByteArray());
return new ProjectHeaderFile.HeaderSearchResult(Optional.of("\"" + tmpHeaderFile.getAbsolutePath() + "\""), tmpHeaderFile.getAbsolutePath());
}
} catch (IOException e) {
VMError.shouldNotReachHere(e);
}
return null;
});
return Collections.singletonList(ProjectHeaderFile.resolve("enclave", HEADER_FILE));
}