1project(libunwind) 2 3cmake_minimum_required(VERSION 3.16.1) 4 5set(PKG_MAJOR "1") 6set(PKG_MINOR "6") 7set(PKG_EXTRA "-rc1") 8set(PACKAGE_STRING "libunwind") 9set(PACKAGE_BUGREPORT "") 10 11 12if ('$ENV{TARGET}' STREQUAL 'x86_64-linux-gnu') 13 set(TARGET_AMD64 1) 14 set(arch x86_64) 15 add_definitions(-D__x86_64__) 16 add_definitions(-D__amd64__) 17 add_definitions(-D__linux__) 18elseif ('$ENV{TARGET}' STREQUAL 'aarch64-linux-gnu') 19 set(TARGET_AARCH64 1) 20 set(arch aarch64) 21 add_definitions(-D__aarch64__) 22 add_definitions(-D__linux__) 23elseif ('$ENV{TARGET}' STREQUAL 'arm-linux-gnueabihf') 24 set(TARGET_ARM 1) 25 set(arch arm) 26 add_definitions(-D__arm__) 27 add_definitions(-D__linux__) 28elseif ('$ENV{TARGET}' STREQUAL 's390x-linux-gnu') 29 set(TARGET_S390X 1) 30 set(arch s390x) 31 add_definitions(-D__s390x__) 32 add_definitions(-D__linux__) 33else () 34 message(FATAL_ERROR "Unrecognize value in environment variable TARGET") 35endif () 36 37include(CheckCSourceCompiles) 38include(CheckIncludeFiles) 39 40if ("${CMAKE_GENERATOR}" MATCHES "^Visual Studio.*$") 41 message(VERBOSE "Using generator ${CMAKE_GENERATOR}") 42 # Assume we are using default MSVC compiler 43 add_compile_options(/std:c++latest) 44 add_compile_options(/TC) # compile all files as C 45 add_compile_options(/permissive-) 46 47 # files for cross os compilation 48 include_directories(include/win) 49 50 # Warnings in release builds 51 add_compile_options(-wd4068) # ignore unknown pragma warnings (gcc pragmas) 52 add_compile_options(-wd4146) # minus operator applied to unsigned 53 add_compile_options(-wd4244) # possible loss of data 54 add_compile_options(-wd4267) # possible loss of data 55 add_compile_options(-wd4334) # 32-bit shift implicitly converted to 64 bits 56 57 # Disable warning due to incorrect format specifier in debugging printf via the Debug macro 58 add_compile_options(-wd4311) # pointer truncation from 'unw_word_t *' to 'long' 59 add_compile_options(-wd4475) # 'fprintf' : length modifier 'L' cannot be used 60 add_compile_options(-wd4477) # fprintf argument type 61 62 # Windows builds will only support remote unwind 63 add_definitions(-DUNW_REMOTE_ONLY) 64 65 # Disable security warnings 66 add_definitions(-D_CRT_SECURE_NO_WARNINGS) 67 68 # Our posix abstraction layer will provide these headers 69 set(HAVE_ELF_H 1) 70 set(HAVE_ENDIAN_H 1) 71 72 # MSVC compiler is currently missing C11 stdalign.h header 73 # Fake it until support is added 74 check_include_files(stdalign.h HAVE_STDALIGN_H) 75 if (NOT HAVE_STDALIGN_H) 76 configure_file(include/win/fakestdalign.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/stdalign.h) 77 endif (NOT HAVE_STDALIGN_H) 78 79 # MSVC compiler is currently missing C11 stdatomic.h header 80 # Fake it until support is added 81 check_include_files(stdatomic.h HAVE_STDATOMIC_H) 82 if (NOT HAVE_STDATOMIC_H) 83 configure_file(include/win/fakestdatomic.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/stdatomic.h) 84 endif (NOT HAVE_STDATOMIC_H) 85 86 # MSVC compiler is currently missing C11 _Thread_local 87 check_c_source_compiles("void main() { _Thread_local int a; }" HAVE_THREAD_LOCAL) 88 if (NOT HAVE_THREAD_LOCAL) 89 add_definitions(-D_Thread_local=) 90 endif (NOT HAVE_THREAD_LOCAL) 91else () 92 message(FATAL_ERROR "This CMake file is currently only designed for building on Visual Studio") 93endif () 94 95add_definitions(-DHAVE_CONFIG_H) 96 97configure_file(include/config.h.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/include/config.h) 98configure_file(include/libunwind-common.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/libunwind-common.h) 99configure_file(include/libunwind.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/libunwind.h) 100configure_file(include/tdep/libunwind_i.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/tdep/libunwind_i.h) 101 102add_subdirectory(src) 103 104