well your statement is neither true nor is it false.
See: http://www.graalvm.org/docs/reference-manual/languages/llvm/ for example.
Basically you generate bitcode and can run the bitcode on graal. However you can still load native libraries into Graal and access them, you can't probably access them directly in java without a wrapper (I'm not sure about that yet).
So basically you compile your C/C++/Rust Code to BitCode instead of Object Files/Binaries and run that BitCode on Graal.
I.e. with java:
Context polyglot = Context.newBuilder()
.allowAllAccess(true)
.option("llvm.libraries", "/usr/lib/libcurl.dylib")
.build();
Source source = Source.newBuilder("llvm", new File("hello.bc")).build();
Value cpart = polyglot.eval(source);
cpart.getMember("main").execute();
Whereas hello.gc is:
#include <stdio.h>
#include <curl/curl.h>
int main() {
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
printf("Hello from GraalVM!\n");
return 0;
}