• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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