66066df92a53b374c84fafe01f6ac2417d1681a6
[platform/core/security/vist.git] / osquery / CMakeLists.txt
1 #  Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
2 #
3 #  Licensed under the Apache License, Version 2.0 (the "License");
4 #  you may not use this file except in compliance with the License.
5 #  You may obtain a copy of the License at
6 #
7 #      http://www.apache.org/licenses/LICENSE-2.0
8 #
9 #  Unless required by applicable law or agreed to in writing, software
10 #  distributed under the License is distributed on an "AS IS" BASIS,
11 #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 #  See the License for the specific language governing permissions and
13 #  limitations under the License
14
15 SET(TARGET_OSQUERY_LIB osquery)
16 SET(TARGET_OSQUERY_LIB_ADDITIONAL osquery_additional)
17 SET(TARGET_OSQUERY_TEST osquery-test)
18 SET(TARGET_OSQUERY_SHELL osqueryi)
19 SET(TARGET_OSQUERY_DAEMON osqueryd)
20
21 SET(${TARGET_OSQUERY_LIB}_SRCS "")
22 SET(${TARGET_OSQUERY_LIB}_DEPS "")
23 SET(${TARGET_OSQUERY_LIB}_TESTS "")
24
25 SET(${TARGET_OSQUERY_LIB_ONLY_GBS}_SRCS "")
26 SET(${TARGET_OSQUERY_LIB_ONLY_GBS}_DEPS "")
27 SET(${TARGET_OSQUERY_LIB_ONLY_GBS}_TESTS "")
28
29 ADD_OSQUERY_LINK(TRUE glog
30                                           gflags
31                                           pthread
32                                           libthrift.a
33                                         # rocksdb deps
34                                           librocksdb.a
35                                           snappy
36                                           z
37                                           bz2
38                                           dl
39                                           lz4
40                                           zstd
41                                           boost_regex
42                                           boost_system
43                                           boost_thread
44                                           boost_filesystem
45                                           crypto # openssl
46                                         # shell deps
47                                           readline
48                                         # build-in tables deps
49                                           systemd)
50
51 SET(OSQUERY_CODEGEN_PATH "${CMAKE_SOURCE_DIR}/tools/codegen")
52 SET(OSQUERY_TABLES_PATH "${CMAKE_SOURCE_DIR}")
53 SET(OSQUERY_GENERATED_PATH "${CMAKE_BINARY_DIR}/generated")
54
55 ## Table generation #############################################################
56 FILE(GLOB TABLE_FILES "${CMAKE_SOURCE_DIR}/specs/*.table")
57 FILE(GLOB TABLE_FILES_LINUX "${CMAKE_SOURCE_DIR}/specs/linux/*.table")
58 FILE(GLOB TABLE_FILES_UTILITY "${CMAKE_SOURCE_DIR}/specs/utility/*.table")
59 LIST(APPEND TABLE_FILES ${TABLE_FILES_LINUX})
60 LIST(APPEND TABLE_FILES ${TABLE_FILES_UTILITY})
61
62 SET(GENERATED_TABLES "")
63
64 FILE(GLOB TABLE_FILES_TEMPLATES "${CMAKE_SOURCE_DIR}/tools/codegen/templates/*.in")
65 SET(GENERATION_DEPENDENCIES "${OSQUERY_CODEGEN_PATH}/gentable.py"
66                                                         "${OSQUERY_CODEGEN_PATH}/amalgamate.py"
67                                                         "${OSQUERY_TABLES_PATH}/specs/blacklist")
68
69 LIST(APPEND GENERATION_DEPENDENCIES ${TABLE_FILES_TEMPLATES})
70
71 FOREACH(TABLE_FILE ${TABLE_FILES})
72         SET(TABLE_FILE_GEN ${TABLE_FILE})
73         STRING(REPLACE "${OSQUERY_TABLES_PATH}/specs"
74                                    "${OSQUERY_GENERATED_PATH}/tables"
75                                    TABLE_FILE_GEN
76                                    ${TABLE_FILE_GEN})
77         STRING(REPLACE "linux/" "" TABLE_FILE_GEN ${TABLE_FILE_GEN})
78         STRING(REPLACE "" "" TABLE_FILE_GEN ${TABLE_FILE_GEN})
79         STRING(REPLACE ".table" ".cpp" TABLE_FILE_GEN ${TABLE_FILE_GEN})
80         ADD_CUSTOM_COMMAND(
81                 OUTPUT ${TABLE_FILE_GEN}
82                 COMMAND
83                         python "${OSQUERY_CODEGEN_PATH}/gentable.py" "${TABLE_FILE}" "${TABLE_FILE_GEN}" "$ENV{DISABLE_BLACKLIST}"
84                 DEPENDS
85                         ${TABLE_FILE} ${GENERATION_DEPENDENCIES}
86
87                 WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}")
88         LIST(APPEND GENERATED_TABLES ${TABLE_FILE_GEN})
89 ENDFOREACH()
90
91 SET(AMALGAMATION_FILE_GEN "${OSQUERY_GENERATED_PATH}/amalgamation.cpp")
92 ADD_CUSTOM_COMMAND(
93         OUTPUT ${AMALGAMATION_FILE_GEN}
94         COMMAND
95                 python "${OSQUERY_CODEGEN_PATH}/amalgamate.py" "${OSQUERY_CODEGEN_PATH}" "${OSQUERY_GENERATED_PATH}"
96         DEPENDS
97                 ${GENERATED_TABLES}
98         WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}")
99
100 ## Library-obj generation ###########################################################
101 ADD_SUBDIRECTORY(core)
102 ADD_SUBDIRECTORY(config)
103 ADD_SUBDIRECTORY(dispatcher)
104 ADD_SUBDIRECTORY(distributed)
105 ADD_SUBDIRECTORY(devtools)
106 ADD_SUBDIRECTORY(database)
107 ADD_SUBDIRECTORY(events)
108 ADD_SUBDIRECTORY(extensions)
109 ADD_SUBDIRECTORY(filesystem)
110 ADD_SUBDIRECTORY(logger)
111 ADD_SUBDIRECTORY(registry)
112 ADD_SUBDIRECTORY(sql)
113 ADD_SUBDIRECTORY(tables)
114
115 ADD_SUBDIRECTORY(tizen)
116
117 ## Library generation ###########################################################
118 # TODO(sangwan.kwon): Change amalgation files to additional
119 # static_lib should include every object file in the archive in the link
120 # ref: TARGET_OSQUERY_LINK_WHOLE
121 ADD_LIBRARY(osquery_generated_tables OBJECT "${AMALGAMATION_FILE_GEN}")
122 IF(DEFINED GBS_BUILD)
123         ADD_LIBRARY(${TARGET_OSQUERY_LIB}
124                                         STATIC main/lib.cpp
125                                                    $<TARGET_OBJECTS:osquery_generated_tables>
126                                                    $<TARGET_OBJECTS:osquery_sqlite>
127                                                    ${${TARGET_OSQUERY_LIB}_SRCS}
128                                                    ${${TARGET_OSQUERY_LIB_ONLY_GBS}_SRCS})
129         TARGET_LINK_LIBRARIES(${TARGET_OSQUERY_LIB} ${${TARGET_OSQUERY_LIB}_DEPS}
130                                                                                                 ${${TARGET_OSQUERY_LIB_ONLY_GBS}_DEPS})
131 ELSE()
132         ADD_LIBRARY(${TARGET_OSQUERY_LIB}
133                                         STATIC main/lib.cpp
134                                                    $<TARGET_OBJECTS:osquery_generated_tables>
135                                                    $<TARGET_OBJECTS:osquery_sqlite>
136                                                    ${${TARGET_OSQUERY_LIB}_SRCS})
137         TARGET_LINK_LIBRARIES(${TARGET_OSQUERY_LIB} ${${TARGET_OSQUERY_LIB}_DEPS})
138 ENDIF()
139 SET_TARGET_PROPERTIES(${TARGET_OSQUERY_LIB} PROPERTIES OUTPUT_NAME ${TARGET_OSQUERY_LIB})
140
141 #INSTALL(TARGETS ${TARGET_OSQUERY_LIB}
142 #               DESTINATION ${CMAKE_INSTALL_LIBDIR})
143 #INSTALL(DIRECTORY "${CMAKE_SOURCE_DIR}/include/"
144 #               DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
145
146 ## osqueryi generation ##########################################################
147 ADD_EXECUTABLE(${TARGET_OSQUERY_SHELL} devtools/shell.cpp main/shell.cpp)
148 TARGET_OSQUERY_LINK_WHOLE(${TARGET_OSQUERY_SHELL} ${TARGET_OSQUERY_LIB})
149 INSTALL(TARGETS ${TARGET_OSQUERY_SHELL}
150                 DESTINATION ${CMAKE_INSTALL_BINDIR}
151                 PERMISSIONS OWNER_READ
152                                         OWNER_WRITE
153                                         OWNER_EXECUTE
154                                         GROUP_READ
155                                         GROUP_EXECUTE
156                                         WORLD_READ
157                                         WORLD_EXECUTE)
158
159 ## osqueryd generation ##########################################################
160 ADD_EXECUTABLE(${TARGET_OSQUERY_DAEMON} main/daemon.cpp)
161 TARGET_OSQUERY_LINK_WHOLE(${TARGET_OSQUERY_DAEMON} ${TARGET_OSQUERY_LIB})
162 INSTALL(TARGETS ${TARGET_OSQUERY_DAEMON}
163                 DESTINATION ${CMAKE_INSTALL_BINDIR}
164                 PERMISSIONS OWNER_READ
165                                         OWNER_WRITE
166                                         OWNER_EXECUTE
167                                         GROUP_READ
168                                         GROUP_EXECUTE
169                                         WORLD_READ
170                                         WORLD_EXECUTE)
171
172 ## osquery-test generation ##########################################################
173
174 IF(DEFINED GBS_BUILD)
175         ADD_EXECUTABLE(${TARGET_OSQUERY_TEST} main/tests.cpp
176                                                                                   ${${TARGET_OSQUERY_LIB}_TESTS}
177                                                                                   ${${TARGET_OSQUERY_LIB_ONLY_GBS}_TESTS})
178 ELSE()
179         ADD_EXECUTABLE(${TARGET_OSQUERY_TEST} main/tests.cpp
180                                                                                   ${${TARGET_OSQUERY_LIB}_TESTS})
181 ENDIF()
182 TARGET_OSQUERY_LINK_WHOLE(${TARGET_OSQUERY_TEST} ${TARGET_OSQUERY_LIB})
183 TARGET_LINK_LIBRARIES(${TARGET_OSQUERY_TEST} gtest)
184 SET_TARGET_PROPERTIES(${TARGET_OSQUERY_TEST}
185                                           PROPERTIES COMPILE_FLAGS "-DGTEST_HAS_TR1_TUPLE=0")
186 ADD_TEST(${TARGET_OSQUERY_TEST} ${TARGET_OSQUERY_TEST})
187 INSTALL(TARGETS ${TARGET_OSQUERY_TEST}
188                 DESTINATION ${CMAKE_INSTALL_BINDIR}
189                 PERMISSIONS OWNER_READ
190                                         OWNER_WRITE
191                                         OWNER_EXECUTE
192                                         GROUP_READ
193                                         GROUP_EXECUTE
194                                         WORLD_READ
195                                         WORLD_EXECUTE)
196
197 ## example extension with the SDK ##############################################
198 ADD_EXECUTABLE(example_extension examples/example_extension.cpp)
199 TARGET_OSQUERY_LINK_WHOLE(example_extension ${TARGET_OSQUERY_LIB})
200 SET_TARGET_PROPERTIES(example_extension PROPERTIES OUTPUT_NAME example_extension.ext)
201
202 # Build the example extension module with the SDK
203 ADD_OSQUERY_MODULE(modexample examples/example_module.cpp)