osquery

Форк
0
/
cmakelibs.cmake 
166 строк · 6.1 Кб
1
# Copyright (c) 2014-present, The osquery authors
2
#
3
# This source code is licensed as defined by the LICENSE file found in the
4
# root directory of this source tree.
5
#
6
# SPDX-License-Identifier: (Apache-2.0 OR GPL-2.0-only)
7

8
# This function takes the global properties saved by addOsqueryExtensionEx and 
9
# generates a single extension executable containing all the user code
10
function(generateOsqueryExtensionGroup)
11
  get_property(extension_source_files GLOBAL PROPERTY OSQUERY_EXTENSION_GROUP_SOURCES)
12
  if("${extension_source_files}" STREQUAL "")
13
    return()
14
  endif()
15

16
  if(DEFINED ENV{OSQUERY_EXTENSION_GROUP_NAME} OR ENV{OSQUERY_EXTENSION_GROUP_VERSION})
17
    message(WARNING "ENV {OSQUERY_EXTENSION_GROUP_NAME/VERSION} has been deprecated. Please set cache variable!")
18
  endif()
19

20
  set(OSQUERY_EXTENSION_GROUP_NAME "osquery_extension_group" CACHE STRING "Overrides osquery extension group name")
21

22
  set(OSQUERY_EXTENSION_GROUP_VERSION "1.0" CACHE STRING "Overrides osquery extension group version")
23
  
24
  # Build the include list; this contains the files required to declare
25
  # the classes used in the REGISTER_EXTERNAL directives
26
  # Note: The variables in uppercase are used by the template
27
  get_property(main_include_list GLOBAL PROPERTY OSQUERY_EXTENSION_GROUP_MAIN_INCLUDES)
28
  foreach(include_file ${main_include_list})
29
    set(OSQUERY_EXTENSION_GROUP_INCLUDES "${OSQUERY_EXTENSION_GROUP_INCLUDES}\n#include <${include_file}>")
30
  endforeach()
31

32
  # We need to generate the main.cpp file, containing all the required REGISTER_EXTERNAL directives
33
  get_property(OSQUERY_EXTENSION_GROUP_INITIALIZERS GLOBAL PROPERTY OSQUERY_EXTENSION_GROUP_INITIALIZERS)
34
  configure_file(
35
    "${CMAKE_SOURCE_DIR}/tools/codegen/templates/osquery_extension_group_main.cpp.in"
36
    "${CMAKE_CURRENT_BINARY_DIR}/osquery_extension_group_main.cpp"
37
  )
38

39
  # Extensions can no longer control which compilation flags to use here (as they are shared) so
40
  # we are going to enforce sane defaults
41
  if(DEFINED PLATFORM_POSIX)
42
    set(extension_cxx_flags -DBOOST_ASIO_DISABLE_STD_STRING_VIEW)
43
  else()
44
    set(extension_cxx_flags /W4)
45
  endif()
46

47
  # Generate the extension target
48
  add_executable("${OSQUERY_EXTENSION_GROUP_NAME}"
49
    "${CMAKE_CURRENT_BINARY_DIR}/osquery_extension_group_main.cpp"
50
    ${extension_source_files}
51
  )
52

53
  set_property(TARGET "${OSQUERY_EXTENSION_GROUP_NAME}" PROPERTY INCLUDE_DIRECTORIES "")
54
  target_compile_options("${OSQUERY_EXTENSION_GROUP_NAME}" PRIVATE ${extension_cxx_flags})
55

56
  target_link_libraries("${OSQUERY_EXTENSION_GROUP_NAME}" PRIVATE
57
    external_options
58
  )
59
  
60
  if(DEFINED PLATFORM_LINUX)
61
    target_link_libraries("${OSQUERY_EXTENSION_GROUP_NAME}" PRIVATE
62
      thirdparty_libiptc
63
    )
64
  endif()
65

66
  set_target_properties("${OSQUERY_EXTENSION_GROUP_NAME}" PROPERTIES
67
    OUTPUT_NAME "${OSQUERY_EXTENSION_GROUP_NAME}.ext"
68
  )
69

70
  get_property(include_folder_list GLOBAL PROPERTY OSQUERY_EXTENSION_GROUP_INCLUDE_FOLDERS)
71
  if(NOT "${include_folder_list}" STREQUAL "")
72
    target_include_directories("${OSQUERY_EXTENSION_GROUP_NAME}" PRIVATE ${include_folder_list})
73
  endif()
74

75
  # Apply the user (extension) settings
76
  get_property(library_list GLOBAL PROPERTY OSQUERY_EXTENSION_GROUP_LIBRARIES)
77
  if(NOT "${library_list}" STREQUAL "")
78
    target_link_libraries("${OSQUERY_EXTENSION_GROUP_NAME}" PRIVATE ${library_list})
79
  endif()
80
endfunction()
81

82
function(addOsqueryExtensionEx class_name extension_type extension_name ${ARGN})
83
  # Make sure the extension type is valid
84
  if(NOT "${extension_type}" STREQUAL "config" AND NOT "${extension_type}" STREQUAL "table")
85
    message(FATAL_ERROR "Invalid extension type specified")
86
  endif()
87

88
  # Update the initializer list; this will be added to the main.cpp file of the extension group
89
  set_property(GLOBAL APPEND_STRING PROPERTY
90
    OSQUERY_EXTENSION_GROUP_INITIALIZERS
91
    "REGISTER_EXTERNAL(${class_name}, \"${extension_type}\", \"${extension_name}\");\n"
92
  )
93

94
  # Loop through each argument
95
  foreach(argument ${ARGN})
96
    if("${argument}" STREQUAL "SOURCES" OR "${argument}" STREQUAL "LIBRARIES" OR
97
      "${argument}" STREQUAL "INCLUDEDIRS" OR "${argument}" STREQUAL "MAININCLUDES")
98
      set(current_scope "${argument}")
99
      continue()
100
    endif()
101

102
    if("${current_scope}" STREQUAL "SOURCES")
103
      if(NOT IS_ABSOLUTE "${argument}")
104
        set(argument "${CMAKE_CURRENT_SOURCE_DIR}/${argument}")
105
      endif()
106
      list(APPEND source_file_list "${argument}")
107

108
    elseif("${current_scope}" STREQUAL "INCLUDEDIRS")
109
      if(NOT IS_ABSOLUTE "${argument}")
110
        set(argument "${CMAKE_CURRENT_SOURCE_DIR}/${argument}")
111
      endif()
112
      list(APPEND include_folder_list "${argument}")
113

114
    elseif("${current_scope}" STREQUAL "LIBRARIES")
115
      list(APPEND library_list "${argument}")
116

117
    elseif("${current_scope}" STREQUAL "MAININCLUDES")
118
      list(APPEND main_include_list "${argument}")
119
    else()
120
      message(FATAL_ERROR "Invalid scope")
121
    endif()
122
  endforeach()
123

124
  # Validate the arguments
125
  if("${source_file_list}" STREQUAL "")
126
    message(FATAL_ERROR "Source files are missing")
127
  endif()
128

129
  if("${main_include_list}" STREQUAL "")
130
    message(FATAL_ERROR "The main include list is missing")
131
  endif()
132

133
  # Update the global properties
134
  set_property(GLOBAL APPEND PROPERTY OSQUERY_EXTENSION_GROUP_SOURCES
135
    ${source_file_list}
136
  )
137

138
  set_property(GLOBAL APPEND PROPERTY OSQUERY_EXTENSION_GROUP_MAIN_INCLUDES
139
    ${main_include_list}
140
  )
141

142
  if(NOT "${library_list}" STREQUAL "")
143
    set_property(GLOBAL APPEND PROPERTY OSQUERY_EXTENSION_GROUP_LIBRARIES
144
      ${library_list}
145
    )
146
  endif()
147

148
  if(NOT "${include_folder_list}" STREQUAL "")
149
    set_property(GLOBAL APPEND PROPERTY OSQUERY_EXTENSION_GROUP_INCLUDE_FOLDERS
150
      ${include_folder_list}
151
    )
152
  endif()
153
endfunction()
154

155
function(add_osquery_extension_ex class_name extension_type extension_name ${ARGN})
156
  message(WARNING "add_osquery_extension_ex has been deprecated. Please use addOsqueryExtensionEx!")
157
  addOsqueryExtensionEx(${class_name} ${extension_type} ${extension_name} ${ARGN})
158
endfunction()
159

160
function(addOsqueryExtension TARGET)
161
  add_executable(${TARGET} ${ARGN})
162
  set_target_properties(${TARGET} PROPERTIES OUTPUT_NAME "${TARGET}.ext")
163
  target_link_libraries(${TARGET} PRIVATE
164
    external_options
165
  )
166
endfunction()

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.