Refactor cmake build structure 98/252398/2 submit/tizen/20210128.033347
authorSeungha Son <seungha.son@samsung.com>
Wed, 27 Jan 2021 11:57:05 +0000 (20:57 +0900)
committerSeungha Son <seungha.son@samsung.com>
Wed, 27 Jan 2021 21:42:43 +0000 (06:42 +0900)
 This patch is for refactor cmake build structure.
 To facilitate analysis and modification by separating it
 'src','atrace','atrace-helper', and 'test', respectively.

Change-Id: I2f2349fd0e055e4f7a719da733c185896aaf7464
Signed-off-by: Seungha Son <seungha.son@samsung.com>
CMakeLists.txt
atrace-helper/CMakeLists.txt
atrace/CMakeLists.txt
cmake/Modules/ApplyPkgConfig.cmake [new file with mode: 0644]
packaging/ttrace.spec
src/CMakeLists.txt [new file with mode: 0644]
test/CMakeLists.txt

index d1796fbf72a36d1b8369cda9ca22deb8e8665be8..4233798ed0699ea8d8ed2679ef300f5ebdb37da0 100755 (executable)
@@ -1,4 +1,4 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12)
 PROJECT(ttrace C CXX)
 
 SET(PREFIX ${CMAKE_INSTALL_PREFIX})
@@ -10,11 +10,13 @@ ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"")
 SET(EXTRA_CFLAGS "${EXTRA_CFLAGS}")
 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
 SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS}")
-
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS} -std=c++11 -fPIE")
+SET(CMAKE_EXE_LINKER_FLAGS "-ldl")
 SET(CMAKE_SKIP_BUILD_RPATH TRUE)
 
 # Generate ttrace.h
 SET(TTRACE_H_IN ttrace.h.in)
+
 IF("${TTRACE_PROFILE}" STREQUAL "tv")
        SET(TTRACE_PROFILE_TV ON)
 ELSEIF("${TTRACE_PROFILE}" STREQUAL "wearable")
@@ -29,50 +31,31 @@ ELSE()
        SET(TTRACE_TIZEN_VERSION_MAJOR "2")
 ENDIF()
 
-configure_file(${TTRACE_H_IN} "include/ttrace.h")
-
-
-
-#################################################################
-# Set common componenets for library
-AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/src SRC)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
-# ------------------------------
-# Build ttrace Library (Shared)
-# ------------------------------
-SET(TTRACE "ttrace")
-
-INCLUDE(FindPkgConfig)
-pkg_check_modules(pkg_ttrace REQUIRED dlog capi-base-common)
-FOREACH(flag ${pkg_ttrace_CFLAGS})
-       SET(EXTRA_CFLAGS_common "${EXTRA_CFLAGS_common} ${flag}")
-ENDFOREACH(flag)
-
 IF("${COVERAGE}" STREQUAL "on")
        ADD_DEFINITIONS("-DTTRACE_COVERAGE")
 ENDIF()
 
-ADD_LIBRARY(${TTRACE} SHARED ${SRC})
-
-SET_TARGET_PROPERTIES(${TTRACE} PROPERTIES SOVERSION ${MAJORVER})
-SET_TARGET_PROPERTIES(${TTRACE} PROPERTIES VERSION ${FULLVER})
-SET_TARGET_PROPERTIES(${TTRACE} PROPERTIES COMPILE_FLAGS ${EXTRA_CFLAGS_common})
-TARGET_LINK_LIBRARIES(${TTRACE} ${pkg_ttrace_LDFLAGS} "-ldl")
+CONFIGURE_FILE(${TTRACE_H_IN} "include/ttrace.h")
 
-CONFIGURE_FILE(${TTRACE}.pc.in ${TTRACE}.pc @ONLY)
-
-INSTALL(TARGETS ${TTRACE} DESTINATION ${LIBDIR} COMPONENT RuntimeLibraries)
-INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${TTRACE}.pc DESTINATION ${LIBDIR}/pkgconfig)
+SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/")
+INCLUDE(FindPkgConfig)
+INCLUDE(ApplyPkgConfig)
 
-INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/
-       DESTINATION include
-       FILES_MATCHING
-       PATTERN "*.h")
+PKG_CHECK_MODULES(DLOG_DEPS REQUIRED dlog)
+PKG_CHECK_MODULES(CAPI_BASE_COMMON_DEPS REQUIRED capi-base-common)
+PKG_CHECK_MODULES(GMOCK_DEPS REQUIRED gmock)
+PKG_CHECK_MODULES(ZLIB_DEPS REQUIRED zlib)
+PKG_CHECK_MODULES(SMACK_DEPS REQUIRED libsmack)
 
+#################################################################
+SET(TARGET_TTRACE "ttrace")
+SET(TARGET_ATRACE "atrace")
+SET(TARGET_ATRACE_HELPER "atrace-helper")
+SET(TARGET_TTRACE_UNIT_TEST "ttrace-unit-test")
 #################################################################
 # Build atrace / atrace-helper
 # ------------------------------
+ADD_SUBDIRECTORY(src)
 ADD_SUBDIRECTORY(atrace)
 ADD_SUBDIRECTORY(atrace-helper)
-
 ADD_SUBDIRECTORY(test)
index 746d91aa8b0a38ee77991498403688bf356a5e35..13d52b351c8b96b94de326a3a171a346958abb40 100644 (file)
@@ -1,18 +1,8 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-PROJECT(atrace-helper CXX)
-
-SET(PREFIX ${CMAKE_INSTALL_PREFIX})
-SET(EXEC_PREFIX "\${prefix}")
-
 INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
 AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCES)
 
-SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS} -std=c++11")
-SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
-SET(CMAKE_CXX_FLAGS_RELEASE "-O2")
-
-ADD_EXECUTABLE(${PROJECT_NAME} ${SOURCES})
+ADD_EXECUTABLE(${TARGET_ATRACE_HELPER} ${SOURCES})
 
-SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES VERSION ${ATRACE_HELPER_VERSION})
+SET_TARGET_PROPERTIES(${TARGET_ATRACE_HELPER} PROPERTIES VERSION ${ATRACE_HELPER_VERSION})
 
-INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin)
+INSTALL(TARGETS ${TARGET_ATRACE_HELPER} DESTINATION bin)
index c5c7e7f7500aa43984cc15d0d0585d4c7adc3a29..5c44a60bc48c38563644317ff3aebb030de7ddec 100644 (file)
@@ -1,24 +1,13 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-PROJECT(atrace C)
-
-SET(PREFIX ${CMAKE_INSTALL_PREFIX})
-SET(EXEC_PREFIX "\${prefix}")
-
-SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS} -std=c++11 -fPIE")
-SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
-SET(CMAKE_CXX_FLAGS_RELEASE "-O2")
-
 AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCES)
+ADD_EXECUTABLE(${TARGET_ATRACE} ${SOURCES})
 
-INCLUDE(FindPkgConfig)
-pkg_check_modules(pkg_atrace REQUIRED zlib libsmack)
-FOREACH(flag ${pkg_atrace_CXXFLAGS})
-       SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} ${flag}")
-ENDFOREACH(flag)
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../include)
 
-ADD_EXECUTABLE(${PROJECT_NAME} ${SOURCES})
-TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkg_atrace_LDFLAGS} "-ldl")
+SET_TARGET_PROPERTIES(${TARGET_ATRACE} PROPERTIES VERSION ${ATRACE_VERSION})
 
-SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES VERSION ${ATRACE_VERSION})
+APPLY_PKG_CONFIG(${TARGET_ATRACE} PUBLIC
+  ZLIB_DEPS
+  SMACK_DEPS
+)
 
-INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin)
+INSTALL(TARGETS ${TARGET_ATRACE} DESTINATION bin)
diff --git a/cmake/Modules/ApplyPkgConfig.cmake b/cmake/Modules/ApplyPkgConfig.cmake
new file mode 100644 (file)
index 0000000..9d107c3
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+#
+# This function applies external (out of source tree) dependencies
+# to given target. Arguments are:
+#   TARGET - valid cmake target
+#   PRIVACY - dependency can be inherited by dependent targets or not:
+#     PUBLIC - this should be used by default, cause compile/link flags passing
+#     PRIVATE - do not passes any settings to dependent targets,
+#               may be usefull for static libraries from the inside of the project
+# Argument ARGV2 and following are supposed to be names of checked pkg config
+# packages. This function will use variables created by check_pkg_modules().
+#  - ${DEP_NAME}_LIBRARIES
+#  - ${DEP_NAME}_INCLUDE_DIRS
+#  - ${DEP_NAME}_CFLAGS
+#
+FUNCTION(APPLY_PKG_CONFIG TARGET PRIVACY)
+       MATH(EXPR DEST_INDEX "${ARGC}-1")
+       FOREACH(I RANGE 2 ${DEST_INDEX})
+               IF(NOT ${ARGV${I}}_FOUND)
+                       MESSAGE(FATAL_ERROR "Not found dependency - ${ARGV${I}}_FOUND")
+               ENDIF(NOT ${ARGV${I}}_FOUND)
+               TARGET_LINK_LIBRARIES(${TARGET} ${PRIVACY} "${${ARGV${I}}_LIBRARIES}")
+               TARGET_INCLUDE_DIRECTORIES(${TARGET} ${PRIVACY} SYSTEM "${${ARGV${I}}_INCLUDE_DIRS}")
+               STRING(REPLACE ";" " " CFLAGS_STR "${${ARGV${I}}_CFLAGS}")
+               SET(CFLAGS_LIST ${CFLAGS_STR})
+               SEPARATE_ARGUMENTS(CFLAGS_LIST)
+               FOREACH(OPTION ${CFLAGS_LIST})
+                       TARGET_COMPILE_OPTIONS(${TARGET} ${PRIVACY} ${OPTION})
+               ENDFOREACH(OPTION)
+               SET_TARGET_PROPERTIES(${TARGET} PROPERTIES SKIP_BUILD_RPATH true)
+       ENDFOREACH(I RANGE 2 ${DEST_INDEX})
+ENDFUNCTION(APPLY_PKG_CONFIG TARGET PRIVACY)
index 81008e60d33c4414e6e00c34a02b65733e68aa3b..6900adc5f8d434518885132d1106143d16517fe4 100644 (file)
@@ -95,7 +95,7 @@ find . -name '*.gcno' -exec cp '{}' gcov-obj ';'
 %endif
 
 %check
-(cd test && LD_LIBRARY_PATH=../ ctest -V)
+(cd test && LD_LIBRARY_PATH=../src ctest -V)
 %if 0%{?gcov:1}
 lcov -c --ignore-errors graph --no-external -q -d . -o ttrace.info
 genhtml ttrace.info -o ttrace.out
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644 (file)
index 0000000..739dfc3
--- /dev/null
@@ -0,0 +1,21 @@
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SRC)
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
+
+ADD_LIBRARY(${TARGET_TTRACE} SHARED ${SRC})
+
+APPLY_PKG_CONFIG(${TARGET_TTRACE} PUBLIC
+  DLOG_DEPS
+  CAPI_BASE_COMMON_DEPS
+)
+
+SET_TARGET_PROPERTIES(${TARGET_TTRACE} PROPERTIES SOVERSION ${MAJORVER})
+SET_TARGET_PROPERTIES(${TARGET_TTRACE} PROPERTIES VERSION ${FULLVER})
+
+CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/${TARGET_TTRACE}.pc.in ${CMAKE_SOURCE_DIR}/${TARGET_TTRACE}.pc @ONLY)
+
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/../${TARGET_TTRACE}.pc DESTINATION ${LIBDIR}/pkgconfig)
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/include/
+       DESTINATION include
+       FILES_MATCHING
+       PATTERN "*.h")
+INSTALL(TARGETS ${TARGET_TTRACE} DESTINATION ${LIB_INSTALL_DIR} COMPONENT RuntimeLibraries)
index 405c26344eeac4b1c80967e27597e3a2c8b8a16c..a3dd22af1028b2347cd9871aabcee6890a0fa1e5 100644 (file)
@@ -1,5 +1,4 @@
 ENABLE_TESTING()
-SET(TARGET_TTRACE_UNIT_TEST "ttrace-unit-test")
 
 AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/src UNIT_TESTS_SRCS)
 
@@ -9,11 +8,11 @@ TARGET_INCLUDE_DIRECTORIES(${TARGET_TTRACE_UNIT_TEST} PUBLIC
   "${CMAKE_CURRENT_SOURCE_DIR}/../include"
 )
 
-INCLUDE(FindPkgConfig)
-PKG_CHECK_MODULES(gtest_pkgs REQUIRED gmock)
-
-TARGET_LINK_LIBRARIES(${TARGET_TTRACE_UNIT_TEST} PUBLIC ${gtest_pkgs_LDFLAGS} ${PROJECT_NAME})
+APPLY_PKG_CONFIG(${TARGET_TTRACE_UNIT_TEST} PUBLIC
+  GMOCK_DEPS
+)
 
+TARGET_LINK_LIBRARIES(${TARGET_TTRACE_UNIT_TEST} PUBLIC ${TARGET_TTRACE})
 SET_TARGET_PROPERTIES(${TARGET_TTRACE_UNIT_TEST} PROPERTIES COMPILE_FLAGS "-fPIE -fvisibility=default")
 SET_TARGET_PROPERTIES(${TARGET_TTRACE_UNIT_TEST} PROPERTIES LINK_FLAGS "-pie")