1
2function(add_diff_binary target_name)
3  cmake_parse_arguments(
4    "DIFF"
5    "" # No optional arguments
6    "SUITE" # Single value arguments
7    "SRCS;HDRS;DEPENDS;COMPILE_OPTIONS" # Multi-value arguments
8    ${ARGN}
9  )
10  if(NOT DIFF_SRCS)
11    message(FATAL_ERROR "'add_diff_binary' target requires a SRCS list of .cpp "
12                        "files.")
13  endif()
14  if(NOT DIFF_DEPENDS)
15    message(FATAL_ERROR "'add_diff_binary' target requires a DEPENDS list of "
16                        "'add_entrypoint_object' targets.")
17  endif()
18
19  get_fq_target_name(${target_name} fq_target_name)
20  get_fq_deps_list(fq_deps_list ${DIFF_DEPENDS})
21  get_object_files_for_test(
22      link_object_files skipped_entrypoints_list ${fq_deps_list})
23  if(skipped_entrypoints_list)
24    set(msg "Will not build ${fq_target_name} as it has missing deps: "
25            "${skipped_entrypoints_list}.")
26    message(STATUS ${msg})
27    return()
28  endif()
29
30  add_executable(
31    ${fq_target_name}
32    EXCLUDE_FROM_ALL
33    ${DIFF_SRCS}
34    ${DIFF_HDRS}
35  )
36  target_include_directories(
37    ${fq_target_name}
38    PRIVATE
39      ${LIBC_SOURCE_DIR}
40      ${LIBC_BUILD_DIR}
41      ${LIBC_BUILD_DIR}/include
42  )
43  if(DIFF_COMPILE_OPTIONS)
44    target_compile_options(
45      ${fq_target_name}
46      PRIVATE ${DIFF_COMPILE_OPTIONS}
47    )
48  endif()
49
50  target_link_libraries(
51      ${fq_target_name}
52      PRIVATE ${link_object_files} libc_test_utils)
53
54  set_target_properties(${fq_target_name}
55    PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
56
57  add_dependencies(
58    ${fq_target_name}
59    libc.utils.FPUtil.fputil
60    ${fq_deps_list}
61  )
62endfunction()
63
64add_header_library(
65  single_input_single_output_diff
66  HDRS
67    SingleInputSingleOutputDiff.h
68)
69
70add_diff_binary(
71  sinf_diff
72  SRCS
73    sinf_diff.cpp
74  DEPENDS
75    .single_input_single_output_diff
76    libc.src.math.sinf
77)
78
79add_diff_binary(
80  sinf_perf
81  SRCS
82    sinf_perf.cpp
83  DEPENDS
84    .single_input_single_output_diff
85    libc.src.math.sinf
86  COMPILE_OPTIONS
87    -fno-builtin
88)
89
90add_diff_binary(
91  cosf_diff
92  SRCS
93    cosf_diff.cpp
94  DEPENDS
95    .single_input_single_output_diff
96    libc.src.math.cosf
97)
98
99add_diff_binary(
100  cosf_perf
101  SRCS
102    cosf_perf.cpp
103  DEPENDS
104    .single_input_single_output_diff
105    libc.src.math.cosf
106  COMPILE_OPTIONS
107    -fno-builtin
108)
109