CMakeLists.txt 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697
  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. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  122. message("${PROJECT_NAME}: Set Google Test Apple SDK with LLVM Clang...")
  123. target_compile_options(gtest PRIVATE -Wno-error -Wno-character-conversion)
  124. target_compile_options(gmock PRIVATE -Wno-error -Wno-character-conversion)
  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. target_compile_features("${MODULE_NAME_BOXING}-unit-test" PUBLIC cxx_std_20)
  204. endif ()
  205. ##########################################################
  206. # Unit Build Tests (core)
  207. ##########################################################
  208. if (${LS_STD_BUILD_WITH_TESTS})
  209. if (${LS_STD_BUILD_WITH_JNI})
  210. message("${MODULE_NAME_CORE}: Building unit tests with JNI support...")
  211. add_executable(${MODULE_NAME_CORE}-unit-test ${UNIT_TEST_FILES_CORE} ${UNIT_TEST_FILES_CORE_JNI})
  212. else ()
  213. message("${MODULE_NAME_CORE}: Building unit tests...")
  214. add_executable(${MODULE_NAME_CORE}-unit-test ${UNIT_TEST_FILES_CORE})
  215. endif ()
  216. endif ()
  217. ##########################################################
  218. # Unit Build Tests (encoding)
  219. ##########################################################
  220. if (${LS_STD_BUILD_WITH_TESTS})
  221. message("${MODULE_NAME_ENCODING}: Building unit tests...")
  222. add_executable(${MODULE_NAME_ENCODING}-unit-test ${UNIT_TEST_FILES_ENCODING})
  223. endif ()
  224. ##########################################################
  225. # Unit Build Tests (event)
  226. ##########################################################
  227. if (${LS_STD_BUILD_WITH_TESTS})
  228. message("${MODULE_NAME_EVENT}: Building unit tests...")
  229. add_executable(${MODULE_NAME_EVENT}-unit-test ${UNIT_TEST_FILES_EVENT})
  230. endif ()
  231. ##########################################################
  232. # Unit Build Tests (io)
  233. ##########################################################
  234. if (${LS_STD_BUILD_WITH_TESTS})
  235. message("${MODULE_NAME_IO}: Building unit tests...")
  236. add_executable(${MODULE_NAME_IO}-unit-test
  237. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestException.cpp
  238. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestHelper.cpp
  239. ${UNIT_TEST_FILES_IO})
  240. endif ()
  241. ##########################################################
  242. # Unit Build Tests (time)
  243. ##########################################################
  244. if (${LS_STD_BUILD_WITH_TESTS})
  245. message("${MODULE_NAME_TIME}: Building unit tests...")
  246. add_executable(${MODULE_NAME_TIME}-unit-test ${UNIT_TEST_FILES_TIME})
  247. endif ()
  248. ##########################################################
  249. # Unit Build Tests (all)
  250. ##########################################################
  251. if (${LS_STD_BUILD_WITH_TESTS})
  252. if (${LS_STD_BUILD_WITH_JNI})
  253. message("${PROJECT_NAME}: Building unit tests with JNI support...")
  254. add_executable(${PROJECT_NAME}-unit-test
  255. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestException.cpp
  256. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestHelper.cpp
  257. ${UNIT_TEST_FILES_BOXING}
  258. ${UNIT_TEST_FILES_CORE}
  259. ${UNIT_TEST_FILES_CORE_JNI}
  260. ${UNIT_TEST_FILES_ENCODING}
  261. ${UNIT_TEST_FILES_EVENT}
  262. ${UNIT_TEST_FILES_IO}
  263. ${UNIT_TEST_FILES_SERIALIZATION}
  264. ${UNIT_TEST_FILES_TIME})
  265. target_compile_features("${PROJECT_NAME}-unit-test" PUBLIC cxx_std_20)
  266. else ()
  267. message("${PROJECT_NAME}: Building unit tests...")
  268. add_executable(${PROJECT_NAME}-unit-test
  269. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestException.cpp
  270. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestHelper.cpp
  271. ${UNIT_TEST_FILES_BOXING}
  272. ${UNIT_TEST_FILES_CORE}
  273. ${UNIT_TEST_FILES_ENCODING}
  274. ${UNIT_TEST_FILES_EVENT}
  275. ${UNIT_TEST_FILES_IO}
  276. ${UNIT_TEST_FILES_SERIALIZATION}
  277. ${UNIT_TEST_FILES_TIME})
  278. target_compile_features("${PROJECT_NAME}-unit-test" PUBLIC cxx_std_20)
  279. endif ()
  280. endif ()
  281. ####################################################################################################################
  282. ####################################################################################################################
  283. ####################################################################################################################
  284. # Integration Test Files Modularization
  285. ####################################################################################################################
  286. ####################################################################################################################
  287. ####################################################################################################################
  288. if (${LS_STD_BUILD_WITH_TESTS})
  289. set(INTEGRATION_TEST_FILES_IO
  290. ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/section-pair/reader/SectionPairFileReaderIT.cpp)
  291. endif ()
  292. ####################################################################################################################
  293. ####################################################################################################################
  294. ####################################################################################################################
  295. # Integration Test Suite Builds
  296. ####################################################################################################################
  297. ####################################################################################################################
  298. ####################################################################################################################
  299. ##########################################################
  300. # Integration Build Tests (io)
  301. ##########################################################
  302. if (${LS_STD_BUILD_WITH_TESTS})
  303. message("${MODULE_NAME_IO}: Building integration tests...")
  304. add_executable(${MODULE_NAME_IO}-integration-test
  305. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestException.cpp
  306. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestHelper.cpp
  307. ${INTEGRATION_TEST_FILES_IO})
  308. endif ()
  309. ####################################################################################################################
  310. ####################################################################################################################
  311. ####################################################################################################################
  312. # Whole Test Suite Builds
  313. ####################################################################################################################
  314. ####################################################################################################################
  315. ####################################################################################################################
  316. if (${LS_STD_BUILD_WITH_TESTS})
  317. if (${LS_STD_BUILD_WITH_JNI})
  318. message("${PROJECT_NAME}: Building all tests...")
  319. add_executable(${PROJECT_NAME}-test
  320. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestException.cpp
  321. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestHelper.cpp
  322. ${UNIT_TEST_FILES_BOXING}
  323. ${UNIT_TEST_FILES_CORE}
  324. ${UNIT_TEST_FILES_CORE_JNI}
  325. ${UNIT_TEST_FILES_ENCODING}
  326. ${UNIT_TEST_FILES_EVENT}
  327. ${UNIT_TEST_FILES_IO}
  328. ${INTEGRATION_TEST_FILES_IO}
  329. ${UNIT_TEST_FILES_SERIALIZATION}
  330. ${UNIT_TEST_FILES_TIME})
  331. target_compile_features("${PROJECT_NAME}-test" PUBLIC cxx_std_20)
  332. else ()
  333. message("${PROJECT_NAME}: Building all tests with JNI support...")
  334. add_executable(${PROJECT_NAME}-test
  335. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestException.cpp
  336. ${CMAKE_CURRENT_SOURCE_DIR}/test/classes/TestHelper.cpp
  337. ${UNIT_TEST_FILES_BOXING}
  338. ${UNIT_TEST_FILES_CORE}
  339. ${UNIT_TEST_FILES_ENCODING}
  340. ${UNIT_TEST_FILES_EVENT}
  341. ${UNIT_TEST_FILES_IO}
  342. ${INTEGRATION_TEST_FILES_IO}
  343. ${UNIT_TEST_FILES_SERIALIZATION}
  344. ${UNIT_TEST_FILES_TIME})
  345. target_compile_features("${PROJECT_NAME}-test" PUBLIC cxx_std_20)
  346. endif ()
  347. endif ()
  348. ####################################################################################################################
  349. ####################################################################################################################
  350. ####################################################################################################################
  351. # Build Library Binaries
  352. ####################################################################################################################
  353. ####################################################################################################################
  354. ####################################################################################################################
  355. include(cmake/Build.cmake)
  356. build_boxing_module(LS_STD_BUILD_STATIC LS_STD_BUILD_SHARED MODULE_NAME_BOXING MODULE_NAME_CORE SOURCE_FILES_BOXING)
  357. 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)
  358. build_encoding_module(LS_STD_BUILD_STATIC LS_STD_BUILD_SHARED MODULE_NAME_ENCODING MODULE_NAME_CORE SOURCE_FILES_ENCODING)
  359. build_event_module(LS_STD_BUILD_STATIC LS_STD_BUILD_SHARED MODULE_NAME_EVENT MODULE_NAME_CORE SOURCE_FILES_EVENT)
  360. build_io_module(LS_STD_BUILD_STATIC LS_STD_BUILD_SHARED MODULE_NAME_IO MODULE_NAME_CORE SOURCE_FILES_IO)
  361. 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)
  362. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  363. message("${PROJECT_NAME}: choose Apple LLVM-Clang setup...")
  364. target_compile_options("${MODULE_NAME_BOXING}" PRIVATE ${SDK_LIBCXX_FLAGS})
  365. target_compile_options("${MODULE_NAME_CORE}" PRIVATE ${SDK_LIBCXX_FLAGS})
  366. target_compile_options("${MODULE_NAME_ENCODING}" PRIVATE ${SDK_LIBCXX_FLAGS})
  367. target_compile_options("${MODULE_NAME_EVENT}" PRIVATE ${SDK_LIBCXX_FLAGS})
  368. target_compile_options("${MODULE_NAME_IO}" PRIVATE ${SDK_LIBCXX_FLAGS})
  369. target_compile_options("${MODULE_NAME_TIME}" PRIVATE ${SDK_LIBCXX_FLAGS})
  370. target_compile_options("${MODULE_NAME_BOXING}" PRIVATE ${MACOS_SDK})
  371. target_compile_options("${MODULE_NAME_CORE}" PRIVATE ${MACOS_SDK})
  372. target_compile_options("${MODULE_NAME_ENCODING}" PRIVATE ${MACOS_SDK})
  373. target_compile_options("${MODULE_NAME_EVENT}" PRIVATE ${MACOS_SDK})
  374. target_compile_options("${MODULE_NAME_IO}" PRIVATE ${MACOS_SDK})
  375. target_compile_options("${MODULE_NAME_TIME}" PRIVATE ${MACOS_SDK})
  376. endif ()
  377. # CLI base64
  378. add_executable(${CLI_NAME_BASE64}
  379. ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-std/encoding/cli/cli-base64-main.cpp)
  380. ####################################################################################################################
  381. ####################################################################################################################
  382. ####################################################################################################################
  383. # Unit Test Suite: Linking
  384. ####################################################################################################################
  385. ####################################################################################################################
  386. ####################################################################################################################
  387. ##########################################################
  388. # Unit Linking (boxing)
  389. ##########################################################
  390. if (${LS_STD_BUILD_WITH_TESTS})
  391. message("${MODULE_NAME_BOXING}: Linking libraries for unit test application...")
  392. set(BOXING_UNIT_TEST_NAME "${MODULE_NAME_BOXING}-unit-test")
  393. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  394. target_compile_options("${BOXING_UNIT_TEST_NAME}" PRIVATE ${SDK_LIBCXX_FLAGS})
  395. endif ()
  396. target_link_libraries(${BOXING_UNIT_TEST_NAME}
  397. PRIVATE
  398. gtest
  399. gtest_main
  400. "${MODULE_NAME_BOXING}"
  401. "${MODULE_NAME_CORE}")
  402. endif ()
  403. ##########################################################
  404. # Unit Linking (core)
  405. ##########################################################
  406. if (${LS_STD_BUILD_WITH_TESTS})
  407. message("${MODULE_NAME_CORE}: Linking libraries for unit test application...")
  408. set(CORE_UNIT_TEST_NAME "${MODULE_NAME_CORE}-unit-test")
  409. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  410. target_compile_options("${CORE_UNIT_TEST_NAME}" PRIVATE ${SDK_LIBCXX_FLAGS})
  411. endif ()
  412. target_link_libraries(${CORE_UNIT_TEST_NAME}
  413. PRIVATE
  414. gtest
  415. gmock
  416. gtest_main
  417. "${MODULE_NAME_CORE}")
  418. endif ()
  419. ##########################################################
  420. # Unit Linking (encoding)
  421. ##########################################################
  422. if (${LS_STD_BUILD_WITH_TESTS})
  423. message("${MODULE_NAME_ENCODING}: Linking libraries for unit test application...")
  424. set(ENCODING_UNIT_TEST_NAME "${MODULE_NAME_ENCODING}-unit-test")
  425. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  426. target_compile_options("${ENCODING_UNIT_TEST_NAME}" PRIVATE ${SDK_LIBCXX_FLAGS})
  427. endif ()
  428. target_link_libraries(${ENCODING_UNIT_TEST_NAME}
  429. PRIVATE
  430. gtest
  431. gtest_main
  432. "${MODULE_NAME_ENCODING}"
  433. "${MODULE_NAME_CORE}")
  434. endif ()
  435. ##########################################################
  436. # Unit Linking (event)
  437. ##########################################################
  438. if (${LS_STD_BUILD_WITH_TESTS})
  439. message("${MODULE_NAME_EVENT}: Linking libraries for unit test application...")
  440. set(EVENT_UNIT_TEST_NAME "${MODULE_NAME_EVENT}-unit-test")
  441. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  442. target_compile_options("${EVENT_UNIT_TEST_NAME}" PRIVATE ${SDK_LIBCXX_FLAGS})
  443. endif ()
  444. target_link_libraries(${EVENT_UNIT_TEST_NAME}
  445. PRIVATE
  446. gtest
  447. gtest_main
  448. "${MODULE_NAME_EVENT}"
  449. "${MODULE_NAME_CORE}")
  450. endif ()
  451. ##########################################################
  452. # Unit Linking (io)
  453. ##########################################################
  454. if (${LS_STD_BUILD_WITH_TESTS})
  455. message("${MODULE_NAME_IO}: Linking libraries for unit test application...")
  456. set(IO_UNIT_TEST_NAME "${MODULE_NAME_IO}-unit-test")
  457. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  458. target_compile_options("${IO_UNIT_TEST_NAME}" PRIVATE ${SDK_LIBCXX_FLAGS})
  459. endif ()
  460. target_link_libraries(${IO_UNIT_TEST_NAME}
  461. PRIVATE
  462. gtest
  463. gmock
  464. gtest_main
  465. "${MODULE_NAME_IO}"
  466. "${MODULE_NAME_CORE}")
  467. endif ()
  468. ##########################################################
  469. # Unit Linking (time)
  470. ##########################################################
  471. if (${LS_STD_BUILD_WITH_TESTS})
  472. message("${MODULE_NAME_TIME}: Linking libraries for unit test application...")
  473. set(TIME_UNIT_TEST_NAME "${MODULE_NAME_TIME}-unit-test")
  474. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  475. target_compile_options("${TIME_UNIT_TEST_NAME}" PRIVATE ${SDK_LIBCXX_FLAGS})
  476. endif ()
  477. target_link_libraries(${TIME_UNIT_TEST_NAME}
  478. PRIVATE
  479. gtest
  480. gmock
  481. gtest_main
  482. "${MODULE_NAME_TIME}"
  483. "${MODULE_NAME_CORE}")
  484. endif ()
  485. ##########################################################
  486. # Unit Linking (all)
  487. ##########################################################
  488. if (${LS_STD_BUILD_WITH_TESTS})
  489. message("${PROJECT_NAME}: Linking libraries for unit test application...")
  490. set(ALL_UNIT_TEST_NAME "${PROJECT_NAME}-unit-test")
  491. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  492. target_compile_options("${ALL_UNIT_TEST_NAME}" PRIVATE ${SDK_LIBCXX_FLAGS})
  493. endif ()
  494. target_link_libraries(${ALL_UNIT_TEST_NAME}
  495. PRIVATE
  496. gtest
  497. gmock
  498. gtest_main
  499. "${MODULE_NAME_BOXING}"
  500. "${MODULE_NAME_ENCODING}"
  501. "${MODULE_NAME_EVENT}"
  502. "${MODULE_NAME_IO}"
  503. "${MODULE_NAME_TIME}"
  504. "${MODULE_NAME_CORE}")
  505. endif ()
  506. ####################################################################################################################
  507. ####################################################################################################################
  508. ####################################################################################################################
  509. # Integration Test Suite: Linking
  510. ####################################################################################################################
  511. ####################################################################################################################
  512. ####################################################################################################################
  513. ##########################################################
  514. # Integration Linking (io)
  515. ##########################################################
  516. if (${LS_STD_BUILD_WITH_TESTS})
  517. message("${MODULE_NAME_IO}: Linking libraries for integration test application...")
  518. set(IO_INTEGRATION_TEST_NAME "${MODULE_NAME_IO}-integration-test")
  519. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  520. target_compile_options("${IO_INTEGRATION_TEST_NAME}" PRIVATE ${SDK_LIBCXX_FLAGS})
  521. endif ()
  522. target_link_libraries(${IO_INTEGRATION_TEST_NAME}
  523. PRIVATE
  524. gtest
  525. gtest_main
  526. "${MODULE_NAME_IO}"
  527. "${MODULE_NAME_CORE}")
  528. endif ()
  529. ####################################################################################################################
  530. ####################################################################################################################
  531. ####################################################################################################################
  532. # Whole Test Suite: Linking
  533. ####################################################################################################################
  534. ####################################################################################################################
  535. ####################################################################################################################
  536. if (${LS_STD_BUILD_WITH_TESTS})
  537. message("${PROJECT_NAME}: Linking libraries for whole test application...")
  538. set(WHOLE_TEST_NAME "${PROJECT_NAME}-test")
  539. if (APPLE AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
  540. target_compile_options("${WHOLE_TEST_NAME}" PRIVATE ${SDK_LIBCXX_FLAGS})
  541. endif ()
  542. target_link_libraries(${WHOLE_TEST_NAME}
  543. PRIVATE
  544. gtest
  545. gmock
  546. gtest_main
  547. "${MODULE_NAME_BOXING}"
  548. "${MODULE_NAME_ENCODING}"
  549. "${MODULE_NAME_EVENT}"
  550. "${MODULE_NAME_IO}"
  551. "${MODULE_NAME_TIME}"
  552. "${MODULE_NAME_CORE}")
  553. endif ()
  554. ####################################################################################################################
  555. ####################################################################################################################
  556. ####################################################################################################################
  557. # CLI - Base64: Linking
  558. ####################################################################################################################
  559. ####################################################################################################################
  560. ####################################################################################################################
  561. target_link_libraries(${CLI_NAME_BASE64}
  562. "${MODULE_NAME_ENCODING}"
  563. "${MODULE_NAME_CORE}")