mirror of
https://github.com/darlinghq/cctools-port.git
synced 2024-11-26 21:50:26 +00:00
link with -rpath to ease finding libLTO
This commit is contained in:
parent
f7a5930c3f
commit
f88e9d4096
@ -26,79 +26,6 @@ static uint32_t (*lto_get_num_symbols)(void *mod) = NULL;
|
||||
static lto_symbol_attributes (*lto_get_sym_attr)(void *mod, uint32_t n) = NULL;
|
||||
static char * (*lto_get_sym_name)(void *mod, uint32_t n) = NULL;
|
||||
|
||||
#ifndef __APPLE__
|
||||
static char *liblto_dirs[] = {
|
||||
"/usr/lib/llvm/lib",
|
||||
"/usr/lib/llvm-3.5/lib",
|
||||
"/usr/lib/llvm-3.4/lib",
|
||||
"/usr/lib/llvm-3.3/lib",
|
||||
"/usr/lib/llvm-3.2/lib",
|
||||
"/usr/lib/llvm-3.1/lib",
|
||||
NULL
|
||||
};
|
||||
|
||||
static void *load_liblto()
|
||||
{
|
||||
/*
|
||||
* Try to load it normally first,
|
||||
* maybe libLTO.so is even in a known place.
|
||||
*/
|
||||
|
||||
void *h = dlopen("libLTO.so", RTLD_NOW);
|
||||
char *p, *path;
|
||||
int i;
|
||||
|
||||
if(h)
|
||||
return h;
|
||||
|
||||
/*
|
||||
* Now try the hardcoded paths from above.
|
||||
*/
|
||||
|
||||
for(i = 0; liblto_dirs[i] != NULL; i++){
|
||||
char liblto[MAXPATHLEN];
|
||||
snprintf(liblto, sizeof(liblto), "%s/libLTO.so", liblto_dirs);
|
||||
|
||||
if((h = dlopen(liblto, RTLD_NOW)))
|
||||
return h;
|
||||
}
|
||||
|
||||
/*
|
||||
* Locate the path of the clang binary and try to load
|
||||
* <clangpath>/../lib/libLTO.so.
|
||||
*/
|
||||
|
||||
path = getenv("PATH");
|
||||
|
||||
if(!path) return NULL;
|
||||
path = strdup(path);
|
||||
if(!path) return NULL;
|
||||
|
||||
p = strtok(path, ":");
|
||||
|
||||
while(p != NULL){
|
||||
char clangbin[MAXPATHLEN];
|
||||
struct stat st;
|
||||
snprintf(clangbin, sizeof(clangbin), "%s/clang", p);
|
||||
|
||||
if(stat(clangbin, &st) == 0 && access(clangbin, F_OK|X_OK) == 0){
|
||||
char liblto[MAXPATHLEN];
|
||||
snprintf(liblto, sizeof(liblto), "%s/../lib/libLTO.so", p);
|
||||
|
||||
if((h = dlopen(liblto, RTLD_NOW))){
|
||||
free(path);
|
||||
return h;
|
||||
}
|
||||
}
|
||||
|
||||
p = strtok(NULL, ":");
|
||||
}
|
||||
|
||||
free(path);
|
||||
return NULL;
|
||||
}
|
||||
#endif /* ! __APPLE__ */
|
||||
|
||||
/*
|
||||
* is_llvm_bitcode() is passed an ofile struct pointer and a pointer and size
|
||||
* of some part of the ofile. If it is an llvm bit code it returns 1 and
|
||||
@ -198,7 +125,7 @@ void **pmod) /* maybe NULL */
|
||||
return(0);
|
||||
#else
|
||||
lto_path = NULL;
|
||||
lto_handle = load_liblto();
|
||||
lto_handle = dlopen("libLTO.so", RTLD_NOW);
|
||||
if(lto_handle == NULL)
|
||||
{
|
||||
fprintf(stderr, "cannot find or load libLTO.so\n");
|
||||
|
@ -11,9 +11,10 @@ function try()
|
||||
set -e
|
||||
LLVM_INC_DIR=`$LLVM_CONFIG --includedir`
|
||||
LLVM_LIB_DIR=`$LLVM_CONFIG --libdir`
|
||||
# Adding the include directory with -I causes the build to fail.
|
||||
ln -sf "$LLVM_INC_DIR/llvm-c/lto.h" "include/llvm-c/lto.h"
|
||||
mkdir -p tmp
|
||||
echo -n "-L$LLVM_LIB_DIR -lLTO " > tmp/ldflags
|
||||
echo -n "-Wl,-rpath,$LLVM_LIB_DIR,--enable-new-dtags -L$LLVM_LIB_DIR -lLTO " > tmp/ldflags
|
||||
echo -n "-DLTO_SUPPORT=1 " > tmp/cflags
|
||||
echo -n "-DLTO_SUPPORT=1 " > tmp/cxxflags
|
||||
echo -n "$LLVM_LIB_DIR" > tmp/ldpath
|
||||
@ -26,11 +27,13 @@ try "-3.2"
|
||||
try "-3.3"
|
||||
try "-3.4"
|
||||
try "-3.5"
|
||||
try "-3.6"
|
||||
try "-devel"
|
||||
|
||||
try "32"
|
||||
try "33"
|
||||
try "34"
|
||||
try "35"
|
||||
try "36"
|
||||
|
||||
exit 1
|
||||
|
Loading…
Reference in New Issue
Block a user