|
Packit |
cdaae3 |
include(AutoconfHelper)
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
ac_init()
|
|
Packit |
cdaae3 |
ac_check_headers(alloca.h elf.h elfaccess.h libelf.h libelf/libelf.h sys/types.h sys/elf_386.h sys/elf_amd64.h sys/elf_sparc.h sys/ia64/elf.h)
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
# The default libdwarf is the one with struct Elf
|
|
Packit |
cdaae3 |
message(STATUS "Assuming struct Elf for the default libdwarf.h")
|
|
Packit |
cdaae3 |
configure_file(libdwarf.h.in libdwarf.h COPYONLY)
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
ac_check_lib(${LIBELF_LIBRARIES} elf elf64_getehdr)
|
|
Packit |
cdaae3 |
ac_check_lib(${LIBELF_LIBRARIES} elf elf64_getshdr)
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
# Find out where the elf header is.
|
|
Packit |
cdaae3 |
if(HAVE_ELF_H)
|
|
Packit |
cdaae3 |
set(HAVE_LOCATION_OF_LIBELFHEADER "<elf.h>")
|
|
Packit |
cdaae3 |
elseif(HAVE_LIBELF_H)
|
|
Packit |
cdaae3 |
set(HAVE_LOCATION_OF_LIBELFHEADER "<libelf.h>")
|
|
Packit |
cdaae3 |
elseif(HAVE_LIBELF_LIBELF_H)
|
|
Packit |
cdaae3 |
set(HAVE_LOCATION_OF_LIBELFHEADER "<libelf/libelf.h>")
|
|
Packit |
cdaae3 |
endif()
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
ac_try_compile("
|
|
Packit |
cdaae3 |
int main()
|
|
Packit |
cdaae3 |
{
|
|
Packit |
cdaae3 |
__uint32_t p;
|
|
Packit |
cdaae3 |
p = 3;
|
|
Packit |
cdaae3 |
return 0;
|
|
Packit |
cdaae3 |
}"
|
|
Packit |
cdaae3 |
HAVE___UINT32_T)
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
ac_try_compile("
|
|
Packit |
cdaae3 |
int main()
|
|
Packit |
cdaae3 |
{
|
|
Packit |
cdaae3 |
__uint64_t p;
|
|
Packit |
cdaae3 |
p = 3;
|
|
Packit |
cdaae3 |
return 0;
|
|
Packit |
cdaae3 |
}"
|
|
Packit |
cdaae3 |
HAVE___UINT64_T)
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
ac_try_compile("
|
|
Packit |
cdaae3 |
#include <sys/types.h>
|
|
Packit |
cdaae3 |
int main()
|
|
Packit |
cdaae3 |
{
|
|
Packit |
cdaae3 |
__uint32_t p;
|
|
Packit |
cdaae3 |
p = 3;
|
|
Packit |
cdaae3 |
return 0;
|
|
Packit |
cdaae3 |
}"
|
|
Packit |
cdaae3 |
HAVE___UINT32_T_IN_SYS_TYPES_H)
|
|
Packit |
cdaae3 |
ac_try_compile("
|
|
Packit |
cdaae3 |
#include <sys/types.h>
|
|
Packit |
cdaae3 |
int main()
|
|
Packit |
cdaae3 |
{
|
|
Packit |
cdaae3 |
__uint64_t p;
|
|
Packit |
cdaae3 |
p = 3;
|
|
Packit |
cdaae3 |
return 0;
|
|
Packit |
cdaae3 |
}"
|
|
Packit |
cdaae3 |
HAVE___UINT64_T_IN_SYS_TYPES_H)
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
check_c_source_runs("
|
|
Packit |
cdaae3 |
static unsigned foo( unsigned x, __attribute__ ((unused)) int y)
|
|
Packit |
cdaae3 |
{
|
|
Packit |
cdaae3 |
unsigned x2 = x + 1;
|
|
Packit |
cdaae3 |
return x2;
|
|
Packit |
cdaae3 |
}
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
int main(void) {
|
|
Packit |
cdaae3 |
unsigned y = 0;
|
|
Packit |
cdaae3 |
y = foo(12,y);
|
|
Packit |
cdaae3 |
return 0;
|
|
Packit |
cdaae3 |
}"
|
|
Packit |
cdaae3 |
HAVE_UNUSED_ATTRIBUTE)
|
|
Packit |
cdaae3 |
message(STATUS "Checking compiler supports __attribute__ unused... ${HAVE_UNUSED_ATTRIBUTE}")
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
ac_try_compile([=[
|
|
Packit |
cdaae3 |
#include "zlib.h"
|
|
Packit |
cdaae3 |
int main()
|
|
Packit |
cdaae3 |
{
|
|
Packit |
cdaae3 |
Bytef dest[100];
|
|
Packit |
cdaae3 |
uLongf destlen = 100;
|
|
Packit |
cdaae3 |
Bytef *src = 0;
|
|
Packit |
cdaae3 |
uLong srclen = 3;
|
|
Packit |
cdaae3 |
int res = uncompress(dest,&destlen,src,srclen);
|
|
Packit |
cdaae3 |
if (res == Z_OK) {
|
|
Packit |
cdaae3 |
/* ALL IS WELL */
|
|
Packit |
cdaae3 |
}
|
|
Packit |
cdaae3 |
return 0;
|
|
Packit |
cdaae3 |
}]=]
|
|
Packit |
cdaae3 |
HAVE_ZLIB)
|
|
Packit |
cdaae3 |
message(STATUS "Checking zlib.h usability... ${HAVE_ZLIB}")
|
|
Packit |
cdaae3 |
set(dwfzlib $<$<BOOL:${HAVE_ZIB}>:"z")
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
# The following are for FreeBSD and others which
|
|
Packit |
cdaae3 |
# use struct _Elf as the actual struct type.
|
|
Packit |
cdaae3 |
if(HAVE_LIBELF_H)
|
|
Packit |
cdaae3 |
set(_Elf_HEADER "<libelf.h>")
|
|
Packit |
cdaae3 |
else()
|
|
Packit |
cdaae3 |
set(_Elf_HEADER "<libelf/libelf.h>")
|
|
Packit |
cdaae3 |
endif()
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
ac_try_compile("
|
|
Packit |
cdaae3 |
#include ${_Elf_HEADER}
|
|
Packit |
cdaae3 |
struct _Elf;
|
|
Packit |
cdaae3 |
typedef struct _Elf Elf;
|
|
Packit |
cdaae3 |
int main()
|
|
Packit |
cdaae3 |
{
|
|
Packit |
cdaae3 |
struct _Elf *a = 0;
|
|
Packit |
cdaae3 |
return 0;
|
|
Packit |
cdaae3 |
}"
|
|
Packit |
cdaae3 |
_Elf_found)
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
if(_Elf_found)
|
|
Packit |
cdaae3 |
message(STATUS "Found struct _Elf in ${_ELF_HEADER}, using it in libdwarf.h")
|
|
Packit |
cdaae3 |
file(READ libdwarf.h.in CONTENT)
|
|
Packit |
cdaae3 |
string(REPLACE "struct Elf" "struct _Elf" CONTENT ${CONTENT})
|
|
Packit |
cdaae3 |
file(WRITE libdwarf.h ${CONTENT})
|
|
Packit |
cdaae3 |
else()
|
|
Packit |
cdaae3 |
message(STATUS "${_ELF_HEADER} does not have struct _Elf")
|
|
Packit |
cdaae3 |
endif()
|
|
Packit |
cdaae3 |
# checking for ia 64 types, which might be enums, using HAVE_R_IA_64_DIR32LSB
|
|
Packit |
cdaae3 |
# to stand in for a small set.
|
|
Packit |
cdaae3 |
ac_try_compile("
|
|
Packit |
cdaae3 |
#include ${HAVE_LOCATION_OF_LIBELFHEADER}
|
|
Packit |
cdaae3 |
int main()
|
|
Packit |
cdaae3 |
{
|
|
Packit |
cdaae3 |
int p; p = R_IA_64_DIR32LSB;
|
|
Packit |
cdaae3 |
return 0;
|
|
Packit |
cdaae3 |
}"
|
|
Packit |
cdaae3 |
HAVE_R_IA_64_DIR32LSB)
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
ac_try_compile("
|
|
Packit |
cdaae3 |
#include ${LOCATION_OF_LIBELFHEADER}
|
|
Packit |
cdaae3 |
int main()
|
|
Packit |
cdaae3 |
{
|
|
Packit |
cdaae3 |
struct _Elf a; int i; i = 0;
|
|
Packit |
cdaae3 |
return 0;
|
|
Packit |
cdaae3 |
}"
|
|
Packit |
cdaae3 |
HAVE_STRUCT_UNDERSCORE_ELF)
|
|
Packit |
cdaae3 |
message(STATUS "Checking libelf defines struct _Elf... ${HAVE_STRUCT_UNDERSCORE_ELF}")
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
ac_try_compile("
|
|
Packit |
cdaae3 |
#include ${LOCATION_OF_LIBELFHEADER}
|
|
Packit |
cdaae3 |
int main()
|
|
Packit |
cdaae3 |
{
|
|
Packit |
cdaae3 |
int p; p = 0;
|
|
Packit |
cdaae3 |
return 0;
|
|
Packit |
cdaae3 |
}"
|
|
Packit |
cdaae3 |
HAVE_RAW_LIBELF_OK)
|
|
Packit |
cdaae3 |
message(STATUS "Checking some libelf found ... ${HAVE_RAW_LIBELF_OK}")
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
ac_try_compile("
|
|
Packit |
cdaae3 |
#define _GNU_SOURCE
|
|
Packit |
cdaae3 |
#include ${LOCATION_OF_LIBELFHEADER}
|
|
Packit |
cdaae3 |
int main()
|
|
Packit |
cdaae3 |
{
|
|
Packit |
cdaae3 |
off64_t p; p = 0;
|
|
Packit |
cdaae3 |
return 0;
|
|
Packit |
cdaae3 |
}"
|
|
Packit |
cdaae3 |
HAVE_LIBELF_OFF64_OK)
|
|
Packit |
cdaae3 |
message(STATUS "Checking off64_t ok ... ${HAVE_LIBELF_OFF64_OK}")
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
# the existence of sgidefs.h does not prove it's truly SGI, nor
|
|
Packit |
cdaae3 |
# prove that __uint32_t or __uint64_t is defined therein.
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
ac_try_compile("
|
|
Packit |
cdaae3 |
#include <sgidefs.h>
|
|
Packit |
cdaae3 |
int main()
|
|
Packit |
cdaae3 |
{
|
|
Packit |
cdaae3 |
__uint32_t p; p = 27;
|
|
Packit |
cdaae3 |
return 0;
|
|
Packit |
cdaae3 |
}"
|
|
Packit |
cdaae3 |
HAVE___UINT32_T_IN_SGIDEFS_H)
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
ac_try_compile("
|
|
Packit |
cdaae3 |
#include <sgidefs.h>
|
|
Packit |
cdaae3 |
int main()
|
|
Packit |
cdaae3 |
{
|
|
Packit |
cdaae3 |
__uint64_t p; p = 27;
|
|
Packit |
cdaae3 |
return 0;
|
|
Packit |
cdaae3 |
}"
|
|
Packit |
cdaae3 |
HAVE___UINT64_T_IN_SGIDEFS_H)
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
ac_try_compile("
|
|
Packit |
cdaae3 |
#include ${HAVE_LOCATION_OF_LIBELF_HEADER}
|
|
Packit |
cdaae3 |
int main()
|
|
Packit |
cdaae3 |
{
|
|
Packit |
cdaae3 |
Elf64_Rela p; p.r_offset = 1;
|
|
Packit |
cdaae3 |
return 0;
|
|
Packit |
cdaae3 |
}"
|
|
Packit |
cdaae3 |
HAVE_ELF64_RELA)
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
ac_try_compile("
|
|
Packit |
cdaae3 |
#include ${HAVE_LOCATION_OF_LIBELF_HEADER}
|
|
Packit |
cdaae3 |
int main()
|
|
Packit |
cdaae3 |
{
|
|
Packit |
cdaae3 |
Elf64_Sym p; p.st_info = 1;
|
|
Packit |
cdaae3 |
return 0;
|
|
Packit |
cdaae3 |
}"
|
|
Packit |
cdaae3 |
HAVE_ELF64_SYM)
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
# This changes the gennames option from -s to -t
|
|
Packit |
cdaae3 |
option(namestable "string functions implemented as binary search (default is with C switch)" TRUE)
|
|
Packit |
cdaae3 |
if(namestable)
|
|
Packit |
cdaae3 |
set(dwarf_namestable "-s")
|
|
Packit |
cdaae3 |
else()
|
|
Packit |
cdaae3 |
set(dwarf_namestable "-t")
|
|
Packit |
cdaae3 |
endif()
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
option(windowspath "Detect certain Windows paths as full paths (default is NO)" FALSE)
|
|
Packit |
cdaae3 |
set(HAVE_WINDOWS_PATH ${windowspath})
|
|
Packit |
cdaae3 |
message(STATUS "Checking enable windowspath... ${HAVE_WINDOWS_PATH}")
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
option(oldframecol "Use HAVE_OLD_FRAME_CFA_COL (default is to use new DW_FRAME_CFA_COL3)" FALSE)
|
|
Packit |
cdaae3 |
set(HAVE_OLD_FRAME_CFA_COL ${oldframecol})
|
|
Packit |
cdaae3 |
message(STATUS "Checking enable old frame columns... ${HAVE_OLD_FRAME_CFA_COL}")
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
ac_try_compile([=[
|
|
Packit |
cdaae3 |
#include "stdafx.h"
|
|
Packit |
cdaae3 |
int main()
|
|
Packit |
cdaae3 |
{
|
|
Packit |
cdaae3 |
int p; p = 27;
|
|
Packit |
cdaae3 |
return 0;
|
|
Packit |
cdaae3 |
}]=]
|
|
Packit |
cdaae3 |
HAVE_STDAFX_H)
|
|
Packit |
cdaae3 |
message(STATUS "Checking have windows stdafx.h... ${HAVE_STDAFX_H}")
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
# See pro_init(), HAVE_DWARF2_99_EXTENSION also generates
|
|
Packit |
cdaae3 |
# 32bit offset dwarf unless DW_DLC_OFFSET_SIZE_64 flag passed to
|
|
Packit |
cdaae3 |
# pro_init.
|
|
Packit |
cdaae3 |
option(dwarf_format_sgi_irix "Force producer to SGI IRIX offset dwarf" FALSE)
|
|
Packit |
cdaae3 |
set(HAVE_SGI_IRIX_OFFSETS ${dwarf_format_sgi_irix})
|
|
Packit |
cdaae3 |
message(STATUS "Checking producer generates SGI IRIX output... ${HAVE_SGI_IRIX_OFFSETS}")
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
option(dwarf_format_strict_32bit "Force producer to generate only DWARF format 32bit" FALSE)
|
|
Packit |
cdaae3 |
set(HAVE_STRICT_DWARF2_32BIT_OFFSET ${dwarf_format_strict_32bit})
|
|
Packit |
cdaae3 |
set(HAVE_DWARF2_99_EXTENSION NOT ${dwarf_format_strict_32bit})
|
|
Packit |
cdaae3 |
message(STATUS "Checking producer generates only 32bit... ${HAVE_STRICT_DWARF2_32BIT_OFFSET}")
|
|
Packit |
cdaae3 |
|
|
Packit |
cdaae3 |
configure_file(config.h.in.cmake config.h)
|