# Copyright (c) 2014 Samsung Electronics Co., Ltd # # Licensed under the Apache License, Version 2.0 (the License); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an AS IS BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. cmake_minimum_required (VERSION 2.8.3) project (sdbd) option(USE_FUNCTION_FS "Use FunctionFS" NO) option(BUILD_UNIT_TESTS "Build unit tests" NO) ############################# cmake packages ################################## INCLUDE(FindPkgConfig) ############################# compiler flags ################################## SET(SDBD_SRCS src/sdb.c src/fdevent.c src/transport.c src/transport_local.c src/transport_usb.c src/sockets.c src/services.c src/file_sync_service.c src/usb_linux_client.c src/utils.c src/socket_inaddr_any_server.c src/socket_local_client.c src/socket_local_server.c src/socket_loopback_client.c src/socket_loopback_server.c src/socket_network_client.c src/sdktools.c src/strutils.c src/commandline_sdbd.c src/usb_linux_client.c src/usb_funcfs_client.c src/default_plugin_auth.c src/default_plugin_basic.c src/default_plugin_main.c src/default_plugin_event.c src/default_plugin_appcmd.c src/default_plugin_shellcmd.c src/hashtable.c src/plugin.c src/plugin_encrypt.c src/descs_strings.c src/sdbd.c src/unordered_ptr_set.cpp ) SET(SDBD_SERVICE_SRCS src/sdb.c src/fdevent.c src/transport.c src/transport_local.c src/transport_usb.c src/sockets.c src/file_sync_service.c src/usb_linux_client.c src/utils.c src/socket_inaddr_any_server.c src/socket_local_client.c src/socket_local_server.c src/socket_loopback_client.c src/socket_loopback_server.c src/socket_network_client.c src/sdktools.c src/strutils.c src/commandline_sdbd.c src/usb_linux_client.c src/usb_funcfs_client.c src/default_plugin_auth.c src/default_plugin_basic.c src/default_plugin_main.c src/default_plugin_event.c src/default_plugin_appcmd.c src/default_plugin_shellcmd.c src/hashtable.c src/plugin.c src/plugin_encrypt.c src/descs_strings.c src/services.c src/sdbd_service.c src/unordered_ptr_set.cpp ) SET(SDBD_SUBS src/subprocess.c ) include(FindPkgConfig) pkg_check_modules(pkgs REQUIRED libtzplatform-config capi-system-info capi-system-device vconf glib-2.0 gio-2.0 dlog ) FOREACH(flag ${pkgs_CFLAGS}) SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") ENDFOREACH(flag) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") INCLUDE_DIRECTORIES(src) ADD_DEFINITIONS("-O2 -g -Wall -Wno-unused-parameter -fPIE") ADD_DEFINITIONS("-DSDB_HOST=0") ADD_DEFINITIONS("-D_XOPEN_SOURCE") ADD_DEFINITIONS("-D_GNU_SOURCE") ADD_DEFINITIONS("-DHAVE_FORKEXEC") ADD_DEFINITIONS("-D_DROP_PRIVILEGE") ADD_DEFINITIONS("-D_FILE_OFFSET_BITS=64") ADD_DEFINITIONS("-DSUPPORT_ENCRYPT") IF (_ARM_TARGET) ADD_DEFINITIONS("-DANDROID_GADGET=1") ENDIF (_ARM_TARGET) IF(WEARABLE_PROFILE STREQUAL on) ADD_DEFINITIONS("-D_WEARABLE") ENDIF() # Get systemd pkg_check_modules(SYSTEMD REQUIRED libsystemd) foreach(flag ${SYSTEMD_CFLAGS}) set(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") endforeach(flag) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") SET(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -w") find_package(Threads REQUIRED) ADD_EXECUTABLE(sdbd ${SDBD_SRCS}) ADD_EXECUTABLE(sdbd-user ${SDBD_SUBS}) ADD_EXECUTABLE(sdbd-service ${SDBD_SERVICE_SRCS}) TARGET_LINK_LIBRARIES(sdbd -pie -lsmack -lresolv -ldl -pthread ${CMAKE_THREAD_LIBS_INIT} ${pkgs_LDFLAGS} ${SYSTEMD_LDFLAGS}) TARGET_LINK_LIBRARIES(sdbd-service -pie -lsmack -lresolv -ldl -pthread ${CMAKE_THREAD_LIBS_INIT} ${pkgs_LDFLAGS} ${SYSTEMD_LDFLAGS}) TARGET_LINK_LIBRARIES(sdbd-user -pie ${CMAKE_THREAD_LIBS_INIT} ${pkgs_LDFLAGS}) set_property( TARGET sdbd PROPERTY COMPILE_DEFINITIONS SDB_HOST=0 _DROP_PRIVILEGE _FILE_OFFSET_BITS=64 ) set_property( TARGET sdbd APPEND PROPERTY COMPILE_DEFINITIONS _XOPEN_SOURCE _GNU_SOURCE HAVE_FORKEXEC ) set_property( TARGET sdbd-service PROPERTY COMPILE_DEFINITIONS SDB_HOST=0 _DROP_PRIVILEGE _FILE_OFFSET_BITS=64 ) set_property( TARGET sdbd-service APPEND PROPERTY COMPILE_DEFINITIONS _XOPEN_SOURCE _GNU_SOURCE HAVE_FORKEXEC ) if(USE_FUNCTION_FS) set_property( TARGET sdbd APPEND PROPERTY COMPILE_DEFINITIONS USB_FUNCFS ) endif() install(TARGETS sdbd sdbd-user sdbd-service DESTINATION /usr/sbin) install(FILES script/sdbd DESTINATION /etc/init.d) # Extract descriptors and strings for systemd socket activation add_executable(extract_descs_strings src/extract_descs_strings.c src/descs_strings.c) add_custom_command(OUTPUT descs strs COMMAND ./extract_descs_strings DEPENDS extract_descs_strings) add_custom_target(descs_strings ALL DEPENDS descs strs) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/descs DESTINATION /etc/sdbd) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/strs DESTINATION /etc/sdbd) # Optionally build unit tests binary -- could be helpful during further development if(BUILD_UNIT_TESTS) enable_testing() add_subdirectory(test) endif()