
include(CheckTypeSize)

# Small atomic test case.
set(atomicstuff "
int i;
int main () {
  __atomic_load_n (&i, __ATOMIC_ACQUIRE);
  __atomic_store_n (&i, 1, __ATOMIC_RELEASE);
  __atomic_add_fetch (&i, 1, __ATOMIC_SEQ_CST);
 return 0;
}\n")

# Check for atomics
check_c_source_compiles("${atomicstuff}" HAVE_ATOMIC_FUNCTIONS)

# Assorted things needed by libbacktrace
check_symbol_exists(clock_gettime "time.h" HAVE_CLOCK_GETTIME)
check_symbol_exists(strnlen "string.h" HAVE_DECL_STRNLEN)
list(APPEND CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
check_symbol_exists(dl_iterate_phdr "link.h" HAVE_DL_ITERATE_PHDR)
check_symbol_exists(fcntl "unistd.h;fcntl.h" HAVE_FCNTL)
check_symbol_exists(getexecname "stdlib.h" HAVE_GETEXECNAME)
check_symbol_exists(lstat "sys/types.h;sys/stat.h;unistd.h" HAVE_LSTAT)
check_symbol_exists(readlink "unistd.h" HAVE_READLINK)
check_symbol_exists(mmap "sys/mman.h" HAVE_MMAP)

# Tests for things that libgo needs.
check_symbol_exists(accept4 "sys/types.h;sys/socket.h" HAVE_ACCEPT4)
check_symbol_exists(dup3 "fcntl.h;unistd.h" HAVE_DUP3)
check_symbol_exists(epoll_create1 "sys/epoll.h" HAVE_EPOLL_CREATE1)
check_symbol_exists(faccessat "fcntl.h;unistd.h" HAVE_FACCESSAT)
check_symbol_exists(fallocate "fcntl.h" HAVE_FALLOCATE)
check_symbol_exists(fchmodat "fcntl.h;sys/stat.h" HAVE_FCHMODAT)
check_symbol_exists(fchownat "fcntl.h;unistd.h" HAVE_FCHOWNAT)
check_symbol_exists(futimesat "fcntl.h;sys/time.h" HAVE_FUTIMESAT)
check_symbol_exists(inotify_add_watch "sys/inotify.h" HAVE_INOTIFY_ADD_WATCH)
check_symbol_exists(inotify_init "sys/inotify.h" HAVE_INOTIFY_INIT)
check_symbol_exists(inotify_init1 "sys/inotify.h" HAVE_INOTIFY_INIT1)
check_symbol_exists(inotify_rm_watch "sys/inotify.h" HAVE_INOTIFY_RM_WATCH)
check_symbol_exists(listxattr "sys/types.h;sys/xattr.h" HAVE_LISTXATTR)
check_symbol_exists(mincore "unistd.h;sys/mman.h" HAVE_MINCORE)
check_symbol_exists(mkdirat "fcntl.h;sys/stat.h" HAVE_MKDIRAT)
check_symbol_exists(openat "fcntl.h" HAVE_OPENAT)
check_symbol_exists(removexattr "sys/types.h;sys/xattr.h" HAVE_REMOVEXATTR)
check_symbol_exists(renameat "fcntl.h;stdio.h" HAVE_RENAMEAT)
check_symbol_exists(setenv "stdlib.h" HAVE_SETENV)
check_symbol_exists(setxattr "sys/types.h;sys/xattr.h" HAVE_SETXATTR)
check_symbol_exists(splice "fcntl.h" HAVE_SPLICE)
check_symbol_exists(strerror_r "string.h" HAVE_STRERROR_R)
check_symbol_exists(sync_file_range "fcntl.h" HAVE_SYNC_FILE_RANGE)
check_symbol_exists(syscall "unistd.h" HAVE_SYSCALL)
check_symbol_exists(tee "fcntl.h" HAVE_TEE)
check_symbol_exists(unlinkat "fcntl.h;unistd.h" HAVE_UNLINKAT)
check_symbol_exists(unsetenv "stdlib.h" HAVE_UNSETENV)
check_symbol_exists(unshare "sched.h" HAVE_UNSHARE)
check_symbol_exists(utimensat "fcntl.h;sys/stat.h" HAVE_UTIMENSAT)
check_symbol_exists(wait4 "sys/types.h;sys/time.h;sys/resource.h;sys/wait.h" HAVE_WAIT4)
list(APPEND CMAKE_REQUIRED_DEFINITIONS "-D_LARGEFILE64_SOURCE=1")
check_symbol_exists(open64 "fcntl.h" HAVE_OPEN64)
check_symbol_exists(mknodat "sys/types.h;sys/stat.h;fcntl.h;unistd.h" HAVE_MKNODAT)
check_symbol_exists(pipe2 "unistd.h" HAVE_PIPE2)
check_symbol_exists(memmem "string.h" HAVE_MEMMEM)
check_symbol_exists(strsignal "string.h" HAVE_STRSIGNAL)

# Checks for include files
check_include_file(fcntl.h HAVE_FCNTL_H)
check_include_file(dlfcn.h HAVE_DLFCN_H)
check_include_file(inttypes.h HAVE_INTTYPES_H)
check_include_file(link.h HAVE_LINK_H)
check_include_file(linux/ether.h HAVE_LINUX_ETHER_H)
check_include_file(linux/filter.h HAVE_LINUX_FILTER_H)
check_include_file(linux/fs.h HAVE_LINUX_FS_H)
check_include_file(linux/if_addr.h HAVE_LINUX_IF_ADDR_H)
check_include_file(linux/if_ether.h HAVE_LINUX_IF_ETHER_H)
check_include_file(linux/if_tun.h HAVE_LINUX_IF_TUN_H)
check_include_file(linux/netlink.h HAVE_LINUX_NETLINK_H)
check_include_file(linux/ptrace.h HAVE_LINUX_PTRACE_H)
check_include_file(linux/reboot.h HAVE_LINUX_REBOOT_H)
check_include_file(linux/rtnetlink.h HAVE_LINUX_RTNETLINK_H)
check_include_file(memory.h HAVE_MEMORY_H)
check_include_file(net/if.h HAVE_NET_IF_H)
check_include_file(net/if_arp.h HAVE_NET_IF_ARP_H)
check_include_file(net/route.h HAVE_NET_ROUTE_H)
check_include_file(netinet/icmp6.h HAVE_NETINET_ICMP6_H)
check_include_file(netinet/if_ether.h HAVE_NETINET_IF_ETHER_H)
check_include_file(netinet/in_systm.h HAVE_NETINET_IN_SYSTM_H)
check_include_file(netinet/ip.h HAVE_NETINET_IP_H)
check_include_file(netinet/ip_mroute.h HAVE_NETINET_IP_MROUTE_H)
check_include_file(netpacket/packet.h HAVE_NETPACKET_PACKET_H)
check_include_file(port.h HAVE_PORT_H)
check_include_file(sched.h HAVE_SCHED_H)
check_include_file(semaphore.h HAVE_SEMAPHORE_H)
check_include_file(stdint.h HAVE_STDINT_H)
check_include_file(stdlib.h HAVE_STDLIB_H)
check_include_file(strings.h HAVE_STRINGS_H)
check_include_file(sys/epoll.h HAVE_SYS_EPOLL_H)
check_include_file(sys/file.h HAVE_SYS_FILE_H)
check_include_file(sys/inotify.h HAVE_SYS_INOTIFY_H)
check_include_file(sys/mman.h HAVE_SYS_MMAN_H)
check_include_file(sys/mount.h HAVE_SYS_MOUNT_H)
check_include_file(sys/prctl.h HAVE_SYS_PRCTL_H)
check_include_file(sys/ptrace.h HAVE_SYS_PTRACE_H)
check_include_file(sys/select.h HAVE_SYS_SELECT_H)
check_include_file(sys/statfs.h HAVE_STATFS_H)
check_include_file(sys/syscall.h SYS_SYSCALL_H)
check_include_file(sys/sysinfo.h HAVE_SYS_SYSINFO_H)
check_include_file(sys/timex.h HAVE_SYS_TIMEX_H)
check_include_file(sys/user.h HAVE_SYS_USER_H)
check_include_file(sys/utsname.h HAVE_SYS_UTSNAME_H)
check_include_file(sys/vfs.h HAVE_SYS_VFS_H)
check_include_file(syscall.h HAVE_SYSCALL_H)
check_include_file(utime.h HAVE_UTIME_H)

# Checks for libraries
check_library_exists(z compress "" HAS_LIBZ)

# To generate libffi headers we need to know the sizes of various types.
check_type_size("double" SIZEOF_DOUBLE)
check_type_size("long double" HAVE_LONG_DOUBLE)
check_type_size("long double" SIZEOF_LONG_DOUBLE)
check_type_size("void*" SIZEOF_VOID_P)
set(CMAKE_EXTRA_INCLUDE_FILES fcntl.h)
check_type_size("loff_t" HAVE_LOFF_T)
set(CMAKE_EXTRA_INCLUDE_FILES)

# Check for various include files
check_include_file(alloca.h HAVE_ALLOCA_H)
check_include_file(inttypes.h HAVE_INTTYPES_H)
check_include_file(stdint.h HAVE_STDINT_H)

# Check for various functions
check_function_exists(alloca HAVE_ALLOCA)
check_function_exists(memcpy HAVE_MEMCPY)

check_c_source_compiles("int main(int argc, char **argv) { return __sync_bool_compare_and_swap(&argc, argc, -argc) ? 1 : 0; }\n" HAVE_SYNC_BOOL_COMPARE_AND_SWAP_4)
check_c_source_compiles("#include <stdint.h>\nstatic uint64_t s;\nint main(int argc, char **argv) { return __sync_bool_compare_and_swap(&s, argc, -argc) ? 0 : 1; }\n" HAVE_SYNC_BOOL_COMPARE_AND_SWAP_8)

check_c_source_compiles("int main() { __asm__(\"aesenc %xmm0, %xmm1\"); return 0; }\n" HAVE_AS_X86_AES)

# Issue an error if the C compiler doesn't support -fsplit-stack
# (in theory you can build libgo without it, so I suppose this could
# be changed to a warning).
if(C_SUPPORTS_SPLIT_STACK)
  set(USING_SPLIT_STACK 1)
endif()
set(USE_LIBFFI 1)

# _Unwind_GetIPInfo is defined on Linux/AMD64.
set(HAVE_GETIPINFO 1)
