1 # Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
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
7 # http://www.apache.org/licenses/LICENSE-2.0
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
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)
21 SET(${TARGET_OSQUERY_LIB}_SRCS "")
22 SET(${TARGET_OSQUERY_LIB}_DEPS "")
23 SET(${TARGET_OSQUERY_LIB}_TESTS "")
25 SET(${TARGET_OSQUERY_LIB_ONLY_GBS}_SRCS "")
26 SET(${TARGET_OSQUERY_LIB_ONLY_GBS}_DEPS "")
27 SET(${TARGET_OSQUERY_LIB_ONLY_GBS}_TESTS "")
29 ADD_OSQUERY_LINK(TRUE glog
48 # build-in tables deps
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")
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})
62 SET(GENERATED_TABLES "")
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")
69 LIST(APPEND GENERATION_DEPENDENCIES ${TABLE_FILES_TEMPLATES})
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"
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})
81 OUTPUT ${TABLE_FILE_GEN}
83 python "${OSQUERY_CODEGEN_PATH}/gentable.py" "${TABLE_FILE}" "${TABLE_FILE_GEN}" "$ENV{DISABLE_BLACKLIST}"
85 ${TABLE_FILE} ${GENERATION_DEPENDENCIES}
87 WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}")
88 LIST(APPEND GENERATED_TABLES ${TABLE_FILE_GEN})
91 SET(AMALGAMATION_FILE_GEN "${OSQUERY_GENERATED_PATH}/amalgamation.cpp")
93 OUTPUT ${AMALGAMATION_FILE_GEN}
95 python "${OSQUERY_CODEGEN_PATH}/amalgamate.py" "${OSQUERY_CODEGEN_PATH}" "${OSQUERY_GENERATED_PATH}"
98 WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}")
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)
115 ADD_SUBDIRECTORY(tizen)
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}
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})
132 ADD_LIBRARY(${TARGET_OSQUERY_LIB}
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})
139 SET_TARGET_PROPERTIES(${TARGET_OSQUERY_LIB} PROPERTIES OUTPUT_NAME ${TARGET_OSQUERY_LIB})
141 #INSTALL(TARGETS ${TARGET_OSQUERY_LIB}
142 # DESTINATION ${CMAKE_INSTALL_LIBDIR})
143 #INSTALL(DIRECTORY "${CMAKE_SOURCE_DIR}/include/"
144 # DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
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
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
172 ## osquery-test generation ##########################################################
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})
179 ADD_EXECUTABLE(${TARGET_OSQUERY_TEST} main/tests.cpp
180 ${${TARGET_OSQUERY_LIB}_TESTS})
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
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)
202 # Build the example extension module with the SDK
203 ADD_OSQUERY_MODULE(modexample examples/example_module.cpp)