summaryrefslogtreecommitdiff
path: root/libc/test/UnitTest/CMakeLists.txt
blob: 7f6e782815c859b13938b5936308846a2180fa8b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
set(libc_test_srcs_common
  CmakeFilePath.cpp
  LibcTest.cpp
  LibcTestMain.cpp
  TestLogger.cpp
  LibcTest.h
  Test.h
  TestLogger.h
)

set(libc_death_test_srcs ExecuteFunction.h)
if(${LIBC_TARGET_OS} STREQUAL "linux")
  list(APPEND libc_death_test_srcs 
       LibcDeathTestExecutors.cpp ExecuteFunctionUnix.cpp)
endif()

# The Nvidia 'nvlink' linker does not support static libraries.
if(LIBC_GPU_TARGET_ARCHITECTURE_IS_NVPTX)
  set(library_type OBJECT)
else()
  set(library_type STATIC)
endif()

add_library(
  LibcUnitTest
  ${library_type}
  EXCLUDE_FROM_ALL
  ${libc_test_srcs_common}
  ${libc_death_test_srcs}
)

add_library(
  LibcHermeticTest
  ${library_type}
  EXCLUDE_FROM_ALL
  ${libc_test_srcs_common}
  HermeticTestUtils.cpp
)

foreach(lib LibcUnitTest LibcHermeticTest)
  target_include_directories(${lib} PUBLIC ${LIBC_SOURCE_DIR})
  target_compile_options(${lib} PRIVATE -fno-exceptions -fno-rtti)
  add_dependencies(${lib}
    libc.src.__support.c_string
    libc.src.__support.CPP.string
    libc.src.__support.CPP.string_view
    libc.src.__support.CPP.type_traits
    libc.src.__support.OSUtil.osutil
    libc.src.__support.uint128
  )
endforeach()

target_include_directories(LibcHermeticTest PRIVATE ${LIBC_BUILD_DIR}/include)
target_compile_options(LibcHermeticTest
    PRIVATE ${LIBC_HERMETIC_TEST_COMPILE_OPTIONS} -ffreestanding -nostdlib -nostdlib++)

add_header_library(
  string_utils
  HDRS
  StringUtils.h
  DEPENDS
    libc.src.__support.CPP.string
    libc.src.__support.CPP.type_traits
)

add_library(
  LibcFPTestHelpers
  FPMatcher.h
  RoundingModeUtils.cpp
  RoundingModeUtils.h
)
add_dependencies(
  LibcFPTestHelpers
  LibcUnitTest
  libc.test.UnitTest.string_utils
  libc.src.__support.FPUtil.fp_bits
  libc.src.__support.FPUtil.fenv_impl
  libc.test.UnitTest.string_utils
)
add_library(
  LibcFPExceptionHelpers
  FPExceptMatcher.cpp
  FPExceptMatcher.h
)
add_dependencies(
  LibcFPExceptionHelpers
  LibcUnitTest
  libc.src.__support.FPUtil.fp_bits
  libc.src.__support.FPUtil.fenv_impl
)

add_library(
  LibcMemoryHelpers
  ${library_type}
  MemoryMatcher.h
  MemoryMatcher.cpp
)
add_dependencies(
  LibcMemoryHelpers
  LibcUnitTest
  libc.src.__support.CPP.span
)

add_library(
  LibcPrintfHelpers
  PrintfMatcher.h
  PrintfMatcher.cpp
)
add_dependencies(
  LibcPrintfHelpers
  LibcUnitTest
  libc.src.__support.FPUtil.fp_bits
  libc.src.stdio.printf_core.core_structs
  libc.test.UnitTest.string_utils
)

add_library(
  LibcScanfHelpers
  ScanfMatcher.h
  ScanfMatcher.cpp
)
add_dependencies(
  LibcScanfHelpers
  LibcUnitTest
  libc.src.__support.FPUtil.fp_bits
  libc.src.stdio.scanf_core.core_structs
  libc.test.UnitTest.string_utils
)

foreach(lib LibcFPTestHelpers LibcFPExceptionHelpers LibcMemoryHelpers 
            LibcPrintfHelpers LibcScanfHelpers)
  target_include_directories(${lib} PUBLIC ${LIBC_SOURCE_DIR})
  target_compile_options(${lib} PRIVATE -fno-exceptions -fno-rtti)
  target_link_libraries(${lib} LibcUnitTest)
endforeach()

# The GPU needs these flags applied to override the system triple.
if(LIBC_TARGET_ARCHITECTURE_IS_GPU)
  foreach(lib LibcMemoryHelpers)
    target_include_directories(${lib} PRIVATE ${LIBC_BUILD_DIR}/include)
    target_compile_options(${lib}
        PRIVATE ${LIBC_HERMETIC_TEST_COMPILE_OPTIONS} -ffreestanding -nostdlib -nostdlib++)
  endforeach()
endif()