File: implementation-flags.cmake

package info (click to toggle)
simdjson 4.2.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 27,936 kB
  • sloc: cpp: 171,612; ansic: 19,122; sh: 1,126; python: 842; makefile: 47; ruby: 25; javascript: 13
file content (106 lines) | stat: -rw-r--r-- 3,575 bytes parent folder | download | duplicates (3)
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
#
# Implementation selection
#
set(SIMDJSON_ALL_IMPLEMENTATIONS fallback westmere haswell icelake arm64 ppc64)

set(
    SIMDJSON_IMPLEMENTATION ""
    CACHE STRING "\
Semicolon-separated list of implementations to include \
(${SIMDJSON_ALL_IMPLEMENTATIONS}). If this is not set, any implementations \
that are supported at compile time and may be selected at runtime will be \
included."
)
set(
    SIMDJSON_EXCLUDE_IMPLEMENTATION ""
    CACHE STRING "\
Semicolon-separated list of implementations to exclude \
(icelake/haswell/westmere/arm64/ppc64/fallback). By default, excludes any \
implementations that are unsupported at compile time or cannot be selected at \
runtime."
)

foreach(var IN ITEMS IMPLEMENTATION EXCLUDE_IMPLEMENTATION)
  set(var "SIMDJSON_${var}")
  foreach(impl IN LISTS "${var}")
    if(NOT impl IN_LIST SIMDJSON_ALL_IMPLEMENTATIONS)
      message(ERROR "\
Implementation ${impl} found in ${var} not supported by simdjson. \
Possible implementations: ${SIMDJSON_ALL_IMPLEMENTATIONS}")
    endif()
  endforeach()
endforeach()

macro(flag_action action var val)
  message(STATUS "${action} implementation ${impl} due to ${var}=${${var}}")
  simdjson_add_props(
      target_compile_definitions PUBLIC
      "SIMDJSON_IMPLEMENTATION_${impl_upper}=${val}"
  )
endmacro()

foreach(impl IN LISTS SIMDJSON_ALL_IMPLEMENTATIONS)
  string(TOUPPER "${impl}" impl_upper)
  if(impl IN_LIST SIMDJSON_EXCLUDE_IMPLEMENTATION)
    flag_action(Excluding SIMDJSON_EXCLUDE_IMPLEMENTATION 0)
  elseif(impl IN_LIST SIMDJSON_IMPLEMENTATION)
    flag_action(Including SIMDJSON_IMPLEMENTATION 1)
  elseif(SIMDJSON_IMPLEMENTATION)
    flag_action(Excluding SIMDJSON_IMPLEMENTATION 0)
  endif()
endforeach()

# TODO make it so this generates the necessary compiler flags to select the
# given impl as the builtin automatically!
set(
    SIMDJSON_BUILTIN_IMPLEMENTATION ""
    CACHE STRING "\
Select the implementation that will be used for user code. Defaults to the \
most universal implementation in SIMDJSON_IMPLEMENTATION (in the order \
${SIMDJSON_ALL_IMPLEMENTATIONS}) if specified; otherwise, by default the \
compiler will pick the best implementation that can always be selected given \
the compiler flags."
)
if(NOT SIMDJSON_BUILTIN_IMPLEMENTATION STREQUAL "")
  simdjson_add_props(
      target_compile_definitions PUBLIC
      "SIMDJSON_BUILTIN_IMPLEMENTATION=${SIMDJSON_BUILTIN_IMPLEMENTATION}"
  )
else()
  # Pick the most universal implementation out of the selected implementations
  # (if any)
  foreach(impl IN LISTS SIMDJSON_ALL_IMPLEMENTATIONS)
    if(
        impl IN_LIST SIMDJSON_IMPLEMENTATION
        AND NOT impl IN_LIST SIMDJSON_EXCLUDE_IMPLEMENTATION
    )
      message(STATUS "\
Selected implementation ${impl} as builtin implementation based on \
${SIMDJSON_IMPLEMENTATION}")
      simdjson_add_props(
          target_compile_definitions PUBLIC
          "SIMDJSON_BUILTIN_IMPLEMENTATION=${impl}"
      )
      break()
    endif()
  endforeach()
endif()

foreach(impl IN LISTS SIMDJSON_ALL_IMPLEMENTATIONS)
  string(TOUPPER "${impl}" impl_upper)
  option(
      "SIMDJSON_IMPLEMENTATION_${impl_upper}"
      "Include the ${impl} implementation"
      ON
  )
  mark_as_advanced("SIMDJSON_IMPLEMENTATION_${impl_upper}")
  if(NOT "${SIMDJSON_IMPLEMENTATION_${impl_upper}}")
    message(DEPRECATION "\
SIMDJSON_IMPLEMENTATION_${impl_upper} is deprecated. \
Use SIMDJSON_IMPLEMENTATION=-${impl} instead")
     simdjson_add_props(
        target_compile_definitions PUBLIC
        "SIMDJSON_IMPLEMENTATION_${impl_upper}=0"
    )
  endif()
endforeach()