CMakeLists.txt 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687
  1. ####################################################################################################################
  2. ####################################################################################################################
  3. ####################################################################################################################
  4. # General
  5. ####################################################################################################################
  6. ####################################################################################################################
  7. ####################################################################################################################
  8. ##########################################################
  9. # Basic
  10. ##########################################################
  11. cmake_minimum_required(VERSION 3.30)
  12. project(ls-std VERSION 2026.1.0.0)
  13. set(MODULE_NAME_BOXING ls-std-boxing)
  14. set(MODULE_NAME_CORE ls-std-core)
  15. set(MODULE_NAME_ENCODING ls-std-encoding)
  16. set(MODULE_NAME_EVENT ls-std-event)
  17. set(MODULE_NAME_IO ls-std-io)
  18. set(MODULE_NAME_TIME ls-std-time)
  19. set(GOOGLE_TEST_MODULE googletest-1.15.2)
  20. set(CLI_NAME_BASE64 cli-base64)
  21. ##########################################################
  22. # Options
  23. ##########################################################
  24. option(LS_STD_BUILD_WITH_TESTS "Build project with tests..." OFF)
  25. option(LS_STD_BUILD_WITH_SUPPORTED_COMPILER "Build project with supported compiler only..." ON)
  26. option(LS_STD_BUILD_STATIC "Build ls-std static library..." ON)
  27. option(LS_STD_BUILD_SHARED "Build ls-std shared library..." OFF)
  28. option(LS_STD_BUILD_WITH_JNI "Build ls-std shared library with JNI..." OFF)
  29. set(TARGET_COUNTER 0)
  30. if (${LS_STD_BUILD_STATIC})
  31. math(EXPR TARGET_COUNTER "${TARGET_COUNTER} + 1")
  32. set(GOAL "static library")
  33. endif ()
  34. if (${LS_STD_BUILD_SHARED})
  35. math(EXPR TARGET_COUNTER "${TARGET_COUNTER} + 1")
  36. set(GOAL "shared library")
  37. endif ()
  38. message("${PROJECT_NAME}: [Goal] ${GOAL}")
  39. if (TARGET_COUNTER GREATER 1)
  40. message("${PROJECT_NAME}: [Error] only one goal supported at the same time!")
  41. return()
  42. endif ()
  43. if (TARGET_COUNTER EQUAL 0)
  44. message("${PROJECT_NAME}: [Error] no goal selected!")
  45. return()
  46. endif ()
  47. ##########################################################
  48. # JNI flag check
  49. ##########################################################
  50. if (${LS_STD_BUILD_WITH_JNI})
  51. if (${LS_STD_BUILD_SHARED})
  52. message("${PROJECT_NAME}: build with JNI support...")
  53. else ()
  54. message("${PROJECT_NAME}: [Error] JNI support requires shared build goal!")
  55. return()
  56. endif ()
  57. endif ()
  58. ##########################################################
  59. # Compiler Settings
  60. ##########################################################
  61. message("${PROJECT_NAME}: Setting compiler flags...")
  62. set(CMAKE_CXX_STANDARD 20)
  63. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  64. set(CMAKE_CXX_EXTENSIONS OFF)
  65. ##########################################################
  66. # Compiler Support
  67. ##########################################################
  68. if (${LS_STD_BUILD_WITH_SUPPORTED_COMPILER})
  69. message("${PROJECT_NAME}: build with compiler support...")
  70. # define supported compilers
  71. if (${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC OR
  72. ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang OR
  73. ${CMAKE_CXX_COMPILER_ID} STREQUAL AppleClang)
  74. message("${PROJECT_NAME}: ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION} is supported...")
  75. else ()
  76. message("${PROJECT_NAME}: [Error] ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION} is not supported... terminated!")
  77. return()
  78. endif ()
  79. endif ()
  80. ##########################################################
  81. # Apple - LLVM Clang Scenario
  82. ##########################################################
  83. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  84. set(MACOS_SDK "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk")
  85. set(SDK_LIBCXX_FLAGS -nostdinc++ -isystem;${MACOS_SDK}/usr/include/c++/v1 -isysroot;${MACOS_SDK})
  86. endif ()
  87. ######################################################
  88. # Find Packages
  89. ######################################################
  90. if (${LS_STD_BUILD_WITH_JNI})
  91. if (DEFINED ENV{JAVA_HOME})
  92. message("JAVA_HOME found in '$ENV{JAVA_HOME}' location...")
  93. else ()
  94. message("[Error] JAVA_HOME not found!")
  95. return()
  96. endif ()
  97. message("${PROJECT_NAME}: finding JNI package in '$ENV{JAVA_HOME}'...")
  98. find_package(JNI REQUIRED)
  99. endif ()
  100. ######################################################
  101. # Include Directories
  102. ######################################################
  103. message("${PROJECT_NAME}: Adding include directories...")
  104. if (${LS_STD_BUILD_WITH_JNI})
  105. include_directories(${JAVA_INCLUDE_PATH})
  106. include_directories(${JAVA_INCLUDE_PATH2})
  107. include_directories(${JAVA_AWT_INCLUDE_PATH})
  108. endif ()
  109. if (${LS_STD_BUILD_WITH_TESTS})
  110. include_directories(${CMAKE_CURRENT_SOURCE_DIR}/test)
  111. include_directories(${CMAKE_CURRENT_LIST_DIR}/test/lib/${GOOGLE_TEST_MODULE}/googletest/include)
  112. include_directories(${CMAKE_CURRENT_LIST_DIR}/test/lib/${GOOGLE_TEST_MODULE}/googlemock/include)
  113. endif ()
  114. include_directories(${CMAKE_CURRENT_LIST_DIR}/include)
  115. ######################################################
  116. # Add Other CMake Dependencies
  117. ######################################################
  118. message("${PROJECT_NAME}: Adding additional cmake dependencies...")
  119. if (${LS_STD_BUILD_WITH_TESTS})
  120. add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/test/lib/${GOOGLE_TEST_MODULE})
  121. target_compile_options(gtest PRIVATE -Wno-error -Wno-character-conversion)
  122. target_compile_options(gmock PRIVATE -Wno-error -Wno-character-conversion)
  123. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  124. message("${PROJECT_NAME}: Set Google Test Apple SDK with LLVM Clang...")
  125. target_compile_options(gtest PRIVATE ${SDK_LIBCXX_FLAGS})
  126. target_compile_options(gmock PRIVATE ${SDK_LIBCXX_FLAGS})
  127. endif ()
  128. endif ()
  129. ####################################################################################################################
  130. ####################################################################################################################
  131. ####################################################################################################################
  132. # Source Files Modularization
  133. ####################################################################################################################
  134. ####################################################################################################################
  135. ####################################################################################################################
  136. include(cmake/SourceFiles.cmake)
  137. set(SOURCE_FILES_BOXING)
  138. collect_boxing_module_source_files(SOURCE_FILES_BOXING)
  139. set(SOURCE_FILES_CORE)
  140. collect_core_module_source_files(SOURCE_FILES_CORE)
  141. set(SOURCE_FILES_CORE_JNI)
  142. collect_core_jni_module_source_files(SOURCE_FILES_CORE_JNI)
  143. set(SOURCE_FILES_ENCODING)
  144. collect_encoding_module_source_files(SOURCE_FILES_ENCODING)
  145. set(SOURCE_FILES_EVENT)
  146. collect_event_module_source_files(SOURCE_FILES_EVENT)
  147. set(SOURCE_FILES_IO)
  148. collect_io_module_source_files(SOURCE_FILES_IO)
  149. set(SOURCE_FILES_TIME)
  150. collect_time_module_source_files(SOURCE_FILES_TIME)
  151. set(SOURCE_FILES_LINUX_TIME)
  152. set(SOURCE_FILES_WINDOWS_TIME)
  153. if (UNIX OR APPLE)
  154. message("${MODULE_NAME_TIME}: Add UNIX files for time module...")
  155. set(SOURCE_FILES_LINUX_TIME
  156. ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/time/system-time/PosixClock.cpp)
  157. else (WIN32)
  158. message("${MODULE_NAME_TIME}: Add Windows files for time module...")
  159. set(SOURCE_FILES_WINDOWS_TIME
  160. ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/time/system-time/WindowsClock.cpp)
  161. endif ()
  162. set(SOURCE_FILES_TIME_JNI)
  163. collect_time_jni_module_source_files(SOURCE_FILES_TIME_JNI)
  164. ####################################################################################################################
  165. ####################################################################################################################
  166. ####################################################################################################################
  167. # Unit Test Files Modularization
  168. ####################################################################################################################
  169. ####################################################################################################################
  170. ####################################################################################################################
  171. if (${LS_STD_BUILD_WITH_TESTS})
  172. include(cmake/TestFiles.cmake)
  173. set(UNIT_TEST_FILES_BOXING)
  174. collect_boxing_module_test_files(UNIT_TEST_FILES_BOXING)
  175. set(UNIT_TEST_FILES_CORE)
  176. collect_core_module_test_files(UNIT_TEST_FILES_CORE)
  177. set(UNIT_TEST_FILES_CORE_JNI)
  178. collect_core_jni_module_test_files(UNIT_TEST_FILES_CORE_JNI)
  179. set(UNIT_TEST_FILES_ENCODING)
  180. collect_encoding_module_test_files(UNIT_TEST_FILES_ENCODING)
  181. set(UNIT_TEST_FILES_EVENT)
  182. collect_event_module_test_files(UNIT_TEST_FILES_EVENT)
  183. set(UNIT_TEST_FILES_IO)
  184. collect_io_module_test_files(UNIT_TEST_FILES_IO)
  185. set(UNIT_TEST_FILES_SERIALIZATION)
  186. collect_serialization_module_test_files(UNIT_TEST_FILES_SERIALIZATION)
  187. set(UNIT_TEST_FILES_TIME)
  188. collect_time_module_test_files(UNIT_TEST_FILES_TIME)
  189. endif ()
  190. ####################################################################################################################
  191. ####################################################################################################################
  192. ####################################################################################################################
  193. # Unit Test Suite Builds
  194. ####################################################################################################################
  195. ####################################################################################################################
  196. ####################################################################################################################
  197. ##########################################################
  198. # Unit Build Tests (boxing)
  199. ##########################################################
  200. if (${LS_STD_BUILD_WITH_TESTS})
  201. message("${MODULE_NAME_BOXING}: Building unit tests...")
  202. add_executable(${MODULE_NAME_BOXING}-unit-test ${UNIT_TEST_FILES_BOXING})
  203. endif ()
  204. ##########################################################
  205. # Unit Build Tests (core)
  206. ##########################################################
  207. if (${LS_STD_BUILD_WITH_TESTS})
  208. if (${LS_STD_BUILD_WITH_JNI})
  209. message("${MODULE_NAME_CORE}: Building unit tests with JNI support...")
  210. add_executable(${MODULE_NAME_CORE}-unit-test ${UNIT_TEST_FILES_CORE} ${UNIT_TEST_FILES_CORE_JNI})
  211. else ()
  212. message("${MODULE_NAME_CORE}: Building unit tests...")
  213. add_executable(${MODULE_NAME_CORE}-unit-test ${UNIT_TEST_FILES_CORE})
  214. endif ()
  215. endif ()
  216. ##########################################################
  217. # Unit Build Tests (encoding)
  218. ##########################################################
  219. if (${LS_STD_BUILD_WITH_TESTS})
  220. message("${MODULE_NAME_ENCODING}: Building unit tests...")
  221. add_executable(${MODULE_NAME_ENCODING}-unit-test ${UNIT_TEST_FILES_ENCODING})
  222. endif ()
  223. ##########################################################
  224. # Unit Build Tests (event)
  225. ##########################################################
  226. if (${LS_STD_BUILD_WITH_TESTS})
  227. message("${MODULE_NAME_EVENT}: Building unit tests...")
  228. add_executable(${MODULE_NAME_EVENT}-unit-test ${UNIT_TEST_FILES_EVENT})
  229. endif ()
  230. ##########################################################
  231. # Unit Build Tests (io)
  232. ##########################################################
  233. if (${LS_STD_BUILD_WITH_TESTS})
  234. message("${MODULE_NAME_IO}: Building unit tests...")
  235. add_executable(${MODULE_NAME_IO}-unit-test
  236. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestException.cpp
  237. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestHelper.cpp
  238. ${UNIT_TEST_FILES_IO})
  239. endif ()
  240. ##########################################################
  241. # Unit Build Tests (time)
  242. ##########################################################
  243. if (${LS_STD_BUILD_WITH_TESTS})
  244. message("${MODULE_NAME_TIME}: Building unit tests...")
  245. add_executable(${MODULE_NAME_TIME}-unit-test ${UNIT_TEST_FILES_TIME})
  246. endif ()
  247. ##########################################################
  248. # Unit Build Tests (all)
  249. ##########################################################
  250. if (${LS_STD_BUILD_WITH_TESTS})
  251. if (${LS_STD_BUILD_WITH_JNI})
  252. message("${PROJECT_NAME}: Building unit tests with JNI support...")
  253. add_executable(${PROJECT_NAME}-unit-test
  254. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestException.cpp
  255. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestHelper.cpp
  256. ${UNIT_TEST_FILES_BOXING}
  257. ${UNIT_TEST_FILES_CORE}
  258. ${UNIT_TEST_FILES_CORE_JNI}
  259. ${UNIT_TEST_FILES_ENCODING}
  260. ${UNIT_TEST_FILES_EVENT}
  261. ${UNIT_TEST_FILES_IO}
  262. ${UNIT_TEST_FILES_SERIALIZATION}
  263. ${UNIT_TEST_FILES_TIME})
  264. else ()
  265. message("${PROJECT_NAME}: Building unit tests...")
  266. add_executable(${PROJECT_NAME}-unit-test
  267. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestException.cpp
  268. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestHelper.cpp
  269. ${UNIT_TEST_FILES_BOXING}
  270. ${UNIT_TEST_FILES_CORE}
  271. ${UNIT_TEST_FILES_ENCODING}
  272. ${UNIT_TEST_FILES_EVENT}
  273. ${UNIT_TEST_FILES_IO}
  274. ${UNIT_TEST_FILES_SERIALIZATION}
  275. ${UNIT_TEST_FILES_TIME})
  276. endif ()
  277. endif ()
  278. ####################################################################################################################
  279. ####################################################################################################################
  280. ####################################################################################################################
  281. # Integration Test Files Modularization
  282. ####################################################################################################################
  283. ####################################################################################################################
  284. ####################################################################################################################
  285. if (${LS_STD_BUILD_WITH_TESTS})
  286. set(INTEGRATION_TEST_FILES_IO
  287. ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/reader/SectionPairFileReaderIT.cpp)
  288. endif ()
  289. ####################################################################################################################
  290. ####################################################################################################################
  291. ####################################################################################################################
  292. # Integration Test Suite Builds
  293. ####################################################################################################################
  294. ####################################################################################################################
  295. ####################################################################################################################
  296. ##########################################################
  297. # Integration Build Tests (io)
  298. ##########################################################
  299. if (${LS_STD_BUILD_WITH_TESTS})
  300. message("${MODULE_NAME_IO}: Building integration tests...")
  301. add_executable(${MODULE_NAME_IO}-integration-test
  302. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestException.cpp
  303. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestHelper.cpp
  304. ${INTEGRATION_TEST_FILES_IO})
  305. endif ()
  306. ####################################################################################################################
  307. ####################################################################################################################
  308. ####################################################################################################################
  309. # Whole Test Suite Builds
  310. ####################################################################################################################
  311. ####################################################################################################################
  312. ####################################################################################################################
  313. if (${LS_STD_BUILD_WITH_TESTS})
  314. if (${LS_STD_BUILD_WITH_JNI})
  315. message("${PROJECT_NAME}: Building all tests...")
  316. add_executable(${PROJECT_NAME}-test
  317. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestException.cpp
  318. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestHelper.cpp
  319. ${UNIT_TEST_FILES_BOXING}
  320. ${UNIT_TEST_FILES_CORE}
  321. ${UNIT_TEST_FILES_CORE_JNI}
  322. ${UNIT_TEST_FILES_ENCODING}
  323. ${UNIT_TEST_FILES_EVENT}
  324. ${UNIT_TEST_FILES_IO}
  325. ${INTEGRATION_TEST_FILES_IO}
  326. ${UNIT_TEST_FILES_SERIALIZATION}
  327. ${UNIT_TEST_FILES_TIME})
  328. else ()
  329. message("${PROJECT_NAME}: Building all tests with JNI support...")
  330. add_executable(${PROJECT_NAME}-test
  331. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestException.cpp
  332. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestHelper.cpp
  333. ${UNIT_TEST_FILES_BOXING}
  334. ${UNIT_TEST_FILES_CORE}
  335. ${UNIT_TEST_FILES_ENCODING}
  336. ${UNIT_TEST_FILES_EVENT}
  337. ${UNIT_TEST_FILES_IO}
  338. ${INTEGRATION_TEST_FILES_IO}
  339. ${UNIT_TEST_FILES_SERIALIZATION}
  340. ${UNIT_TEST_FILES_TIME})
  341. endif ()
  342. endif ()
  343. ####################################################################################################################
  344. ####################################################################################################################
  345. ####################################################################################################################
  346. # Build Library Binaries
  347. ####################################################################################################################
  348. ####################################################################################################################
  349. ####################################################################################################################
  350. include(cmake/Build.cmake)
  351. build_boxing_module(LS_STD_BUILD_STATIC LS_STD_BUILD_SHARED MODULE_NAME_BOXING MODULE_NAME_CORE SOURCE_FILES_BOXING)
  352. build_core_module(LS_STD_BUILD_STATIC LS_STD_BUILD_SHARED LS_STD_BUILD_WITH_JNI MODULE_NAME_CORE SOURCE_FILES_CORE SOURCE_FILES_CORE_JNI)
  353. build_encoding_module(LS_STD_BUILD_STATIC LS_STD_BUILD_SHARED MODULE_NAME_ENCODING MODULE_NAME_CORE SOURCE_FILES_ENCODING)
  354. build_event_module(LS_STD_BUILD_STATIC LS_STD_BUILD_SHARED MODULE_NAME_EVENT MODULE_NAME_CORE SOURCE_FILES_EVENT)
  355. build_io_module(LS_STD_BUILD_STATIC LS_STD_BUILD_SHARED MODULE_NAME_IO MODULE_NAME_CORE SOURCE_FILES_IO)
  356. build_time_module(LS_STD_BUILD_STATIC LS_STD_BUILD_SHARED LS_STD_BUILD_WITH_JNI MODULE_NAME_TIME MODULE_NAME_CORE SOURCE_FILES_TIME SOURCE_FILES_LINUX_TIME SOURCE_FILES_WINDOWS_TIME SOURCE_FILES_TIME_JNI)
  357. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  358. message("${PROJECT_NAME}: choose Apple LLVM-Clang setup...")
  359. target_compile_options("${MODULE_NAME_BOXING}" PRIVATE ${SDK_LIBCXX_FLAGS})
  360. target_compile_options("${MODULE_NAME_CORE}" PRIVATE ${SDK_LIBCXX_FLAGS})
  361. target_compile_options("${MODULE_NAME_ENCODING}" PRIVATE ${SDK_LIBCXX_FLAGS})
  362. target_compile_options("${MODULE_NAME_EVENT}" PRIVATE ${SDK_LIBCXX_FLAGS})
  363. target_compile_options("${MODULE_NAME_IO}" PRIVATE ${SDK_LIBCXX_FLAGS})
  364. target_compile_options("${MODULE_NAME_TIME}" PRIVATE ${SDK_LIBCXX_FLAGS})
  365. target_compile_options("${MODULE_NAME_BOXING}" PRIVATE ${MACOS_SDK})
  366. target_compile_options("${MODULE_NAME_CORE}" PRIVATE ${MACOS_SDK})
  367. target_compile_options("${MODULE_NAME_ENCODING}" PRIVATE ${MACOS_SDK})
  368. target_compile_options("${MODULE_NAME_EVENT}" PRIVATE ${MACOS_SDK})
  369. target_compile_options("${MODULE_NAME_IO}" PRIVATE ${MACOS_SDK})
  370. target_compile_options("${MODULE_NAME_TIME}" PRIVATE ${MACOS_SDK})
  371. endif ()
  372. # CLI base64
  373. add_executable(${CLI_NAME_BASE64}
  374. ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/encoding/cli/cli-base64-main.cpp)
  375. ####################################################################################################################
  376. ####################################################################################################################
  377. ####################################################################################################################
  378. # Unit Test Suite: Linking
  379. ####################################################################################################################
  380. ####################################################################################################################
  381. ####################################################################################################################
  382. ##########################################################
  383. # Unit Linking (boxing)
  384. ##########################################################
  385. if (${LS_STD_BUILD_WITH_TESTS})
  386. message("${MODULE_NAME_BOXING}: Linking libraries for unit test application...")
  387. set(BOXING_UNIT_TEST_NAME "${MODULE_NAME_BOXING}-unit-test")
  388. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  389. target_compile_options("${BOXING_UNIT_TEST_NAME}" PRIVATE ${SDK_LIBCXX_FLAGS})
  390. endif ()
  391. target_link_libraries(${BOXING_UNIT_TEST_NAME}
  392. PRIVATE
  393. gtest
  394. gtest_main
  395. "${MODULE_NAME_BOXING}"
  396. "${MODULE_NAME_CORE}")
  397. endif ()
  398. ##########################################################
  399. # Unit Linking (core)
  400. ##########################################################
  401. if (${LS_STD_BUILD_WITH_TESTS})
  402. message("${MODULE_NAME_CORE}: Linking libraries for unit test application...")
  403. set(CORE_UNIT_TEST_NAME "${MODULE_NAME_CORE}-unit-test")
  404. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  405. target_compile_options("${CORE_UNIT_TEST_NAME}" PRIVATE ${SDK_LIBCXX_FLAGS})
  406. endif ()
  407. target_link_libraries(${CORE_UNIT_TEST_NAME}
  408. PRIVATE
  409. gtest
  410. gmock
  411. gtest_main
  412. "${MODULE_NAME_CORE}")
  413. endif ()
  414. ##########################################################
  415. # Unit Linking (encoding)
  416. ##########################################################
  417. if (${LS_STD_BUILD_WITH_TESTS})
  418. message("${MODULE_NAME_ENCODING}: Linking libraries for unit test application...")
  419. set(ENCODING_UNIT_TEST_NAME "${MODULE_NAME_ENCODING}-unit-test")
  420. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  421. target_compile_options("${ENCODING_UNIT_TEST_NAME}" PRIVATE ${SDK_LIBCXX_FLAGS})
  422. endif ()
  423. target_link_libraries(${ENCODING_UNIT_TEST_NAME}
  424. PRIVATE
  425. gtest
  426. gtest_main
  427. "${MODULE_NAME_ENCODING}"
  428. "${MODULE_NAME_CORE}")
  429. endif ()
  430. ##########################################################
  431. # Unit Linking (event)
  432. ##########################################################
  433. if (${LS_STD_BUILD_WITH_TESTS})
  434. message("${MODULE_NAME_EVENT}: Linking libraries for unit test application...")
  435. set(EVENT_UNIT_TEST_NAME "${MODULE_NAME_EVENT}-unit-test")
  436. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  437. target_compile_options("${EVENT_UNIT_TEST_NAME}" PRIVATE ${SDK_LIBCXX_FLAGS})
  438. endif ()
  439. target_link_libraries(${EVENT_UNIT_TEST_NAME}
  440. PRIVATE
  441. gtest
  442. gtest_main
  443. "${MODULE_NAME_EVENT}"
  444. "${MODULE_NAME_CORE}")
  445. endif ()
  446. ##########################################################
  447. # Unit Linking (io)
  448. ##########################################################
  449. if (${LS_STD_BUILD_WITH_TESTS})
  450. message("${MODULE_NAME_IO}: Linking libraries for unit test application...")
  451. set(IO_UNIT_TEST_NAME "${MODULE_NAME_IO}-unit-test")
  452. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  453. target_compile_options("${IO_UNIT_TEST_NAME}" PRIVATE ${SDK_LIBCXX_FLAGS})
  454. endif ()
  455. target_link_libraries(${IO_UNIT_TEST_NAME}
  456. PRIVATE
  457. gtest
  458. gmock
  459. gtest_main
  460. "${MODULE_NAME_IO}"
  461. "${MODULE_NAME_CORE}")
  462. endif ()
  463. ##########################################################
  464. # Unit Linking (time)
  465. ##########################################################
  466. if (${LS_STD_BUILD_WITH_TESTS})
  467. message("${MODULE_NAME_TIME}: Linking libraries for unit test application...")
  468. set(TIME_UNIT_TEST_NAME "${MODULE_NAME_TIME}-unit-test")
  469. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  470. target_compile_options("${TIME_UNIT_TEST_NAME}" PRIVATE ${SDK_LIBCXX_FLAGS})
  471. endif ()
  472. target_link_libraries(${TIME_UNIT_TEST_NAME}
  473. PRIVATE
  474. gtest
  475. gmock
  476. gtest_main
  477. "${MODULE_NAME_TIME}"
  478. "${MODULE_NAME_CORE}")
  479. endif ()
  480. ##########################################################
  481. # Unit Linking (all)
  482. ##########################################################
  483. if (${LS_STD_BUILD_WITH_TESTS})
  484. message("${PROJECT_NAME}: Linking libraries for unit test application...")
  485. set(ALL_UNIT_TEST_NAME "${PROJECT_NAME}-unit-test")
  486. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  487. target_compile_options("${ALL_UNIT_TEST_NAME}" PRIVATE ${SDK_LIBCXX_FLAGS})
  488. endif ()
  489. target_link_libraries(${ALL_UNIT_TEST_NAME}
  490. PRIVATE
  491. gtest
  492. gmock
  493. gtest_main
  494. "${MODULE_NAME_BOXING}"
  495. "${MODULE_NAME_ENCODING}"
  496. "${MODULE_NAME_EVENT}"
  497. "${MODULE_NAME_IO}"
  498. "${MODULE_NAME_TIME}"
  499. "${MODULE_NAME_CORE}")
  500. endif ()
  501. ####################################################################################################################
  502. ####################################################################################################################
  503. ####################################################################################################################
  504. # Integration Test Suite: Linking
  505. ####################################################################################################################
  506. ####################################################################################################################
  507. ####################################################################################################################
  508. ##########################################################
  509. # Integration Linking (io)
  510. ##########################################################
  511. if (${LS_STD_BUILD_WITH_TESTS})
  512. message("${MODULE_NAME_IO}: Linking libraries for integration test application...")
  513. set(IO_INTEGRATION_TEST_NAME "${MODULE_NAME_IO}-integration-test")
  514. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  515. target_compile_options("${IO_INTEGRATION_TEST_NAME}" PRIVATE ${SDK_LIBCXX_FLAGS})
  516. endif ()
  517. target_link_libraries(${IO_INTEGRATION_TEST_NAME}
  518. PRIVATE
  519. gtest
  520. gtest_main
  521. "${MODULE_NAME_IO}"
  522. "${MODULE_NAME_CORE}")
  523. endif ()
  524. ####################################################################################################################
  525. ####################################################################################################################
  526. ####################################################################################################################
  527. # Whole Test Suite: Linking
  528. ####################################################################################################################
  529. ####################################################################################################################
  530. ####################################################################################################################
  531. if (${LS_STD_BUILD_WITH_TESTS})
  532. message("${PROJECT_NAME}: Linking libraries for whole test application...")
  533. set(WHOLE_TEST_NAME "${PROJECT_NAME}-test")
  534. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  535. target_compile_options("${WHOLE_TEST_NAME}" PRIVATE ${SDK_LIBCXX_FLAGS})
  536. endif ()
  537. target_link_libraries(${WHOLE_TEST_NAME}
  538. PRIVATE
  539. gtest
  540. gmock
  541. gtest_main
  542. "${MODULE_NAME_BOXING}"
  543. "${MODULE_NAME_ENCODING}"
  544. "${MODULE_NAME_EVENT}"
  545. "${MODULE_NAME_IO}"
  546. "${MODULE_NAME_TIME}"
  547. "${MODULE_NAME_CORE}")
  548. endif ()
  549. ####################################################################################################################
  550. ####################################################################################################################
  551. ####################################################################################################################
  552. # CLI - Base64: Linking
  553. ####################################################################################################################
  554. ####################################################################################################################
  555. ####################################################################################################################
  556. target_link_libraries(${CLI_NAME_BASE64}
  557. "${MODULE_NAME_ENCODING}"
  558. "${MODULE_NAME_CORE}")