123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- ####################################################################################################################
- ####################################################################################################################
- ####################################################################################################################
- # General
- ####################################################################################################################
- ####################################################################################################################
- ####################################################################################################################
- cmake_minimum_required(VERSION 3.17)
- project(ls-math VERSION 2023.1.0)
- set(MODULE_NAME_LS_MATH_VECTOR ls-math-vector)
- set(GOOGLE_TEST_MODULE googletest-1.11.0)
- ##########################################################
- # Options
- ##########################################################
- option(BUILD_LS_MATH_WITH_TESTS "Build project with tests..." OFF)
- option(BUILD_LS_MATH_WITH_SUPPORTED_COMPILER "Build project with supported compiler only..." ON)
- option(BUILD_LS_MATH_STATIC "Build ls-math static library..." ON)
- option(BUILD_LS_MATH_SHARED "Build ls-math shared library..." OFF)
- set(TARGET_COUNTER 0)
- if (${BUILD_LS_MATH_STATIC})
- math(EXPR TARGET_COUNTER "${TARGET_COUNTER} + 1")
- set(GOAL "static library")
- endif ()
- if (${BUILD_LS_MATH_SHARED})
- math(EXPR TARGET_COUNTER "${TARGET_COUNTER} + 1")
- set(GOAL "shared library")
- endif ()
- message("${PROJECT_NAME}: [Goal] ${GOAL}")
- if (TARGET_COUNTER GREATER 1)
- message("${PROJECT_NAME}: [Error] only one goal supported at the same time!")
- return()
- endif ()
- if (TARGET_COUNTER EQUAL 0)
- message("${PROJECT_NAME}: [Error] no goal selected!")
- return()
- endif ()
- ##########################################################
- # Compiler Settings
- ##########################################################
- message("${PROJECT_NAME}: Setting compiler flags...")
- set(CMAKE_CXX_STANDARD 17)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
- ##########################################################
- # Compiler Support
- ##########################################################
- if(${BUILD_LS_MATH_WITH_SUPPORTED_COMPILER})
- message("${PROJECT_NAME}: build with compiler support...")
- # define supported compilers
- if (${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC OR
- ${CMAKE_CXX_COMPILER_ID} STREQUAL GNU OR
- ${CMAKE_CXX_COMPILER_ID} STREQUAL ClangOR OR
- ${CMAKE_CXX_COMPILER_ID} STREQUAL AppleClang)
- message("${PROJECT_NAME}: ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION} is supported...")
- else()
- message("${PROJECT_NAME}: [Error] ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION} is not supported... terminated!")
- return()
- endif ()
- endif()
- ######################################################
- # Include Directories
- ######################################################
- message("${PROJECT_NAME}: Adding include directories...")
- if (${BUILD_LS_MATH_WITH_TESTS})
- include_directories(${CMAKE_CURRENT_SOURCE_DIR}/test)
- include_directories(${CMAKE_CURRENT_LIST_DIR}/test/lib/${GOOGLE_TEST_MODULE}/googletest/include)
- include_directories(${CMAKE_CURRENT_LIST_DIR}/test/lib/${GOOGLE_TEST_MODULE}/googlemock/include)
- endif ()
- include_directories(${CMAKE_CURRENT_LIST_DIR}/include)
- ######################################################
- # Add Other CMake Dependencies
- ######################################################
- message("${PROJECT_NAME}: Adding additional cmake dependencies...")
- if (${BUILD_LS_MATH_WITH_TESTS})
- add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/test/lib/${GOOGLE_TEST_MODULE})
- endif ()
- ####################################################################################################################
- ####################################################################################################################
- ####################################################################################################################
- # Source Files Modularization
- ####################################################################################################################
- ####################################################################################################################
- ####################################################################################################################
- set(SOURCE_FILES_LS_MATH_VECTOR
- ${CMAKE_CURRENT_SOURCE_DIR}/source/ls-math/vector/Vector2.cpp)
- ####################################################################################################################
- ####################################################################################################################
- ####################################################################################################################
- # Test Files Modularization
- ####################################################################################################################
- ####################################################################################################################
- ####################################################################################################################
- if (${BUILD_LS_MATH_WITH_TESTS})
- set(TEST_FILES_LS_MATH_VECTOR
- ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/vector/Vector2Test.cpp)
- endif ()
- ####################################################################################################################
- ####################################################################################################################
- ####################################################################################################################
- # Test Suite Builds
- ####################################################################################################################
- ####################################################################################################################
- ####################################################################################################################
- ##########################################################
- # Build Tests (ls-math-vector)
- ##########################################################
- if (${BUILD_LS_MATH_WITH_TESTS})
- message("${MODULE_NAME_LS_MATH_VECTOR}: Building tests...")
- add_executable(${MODULE_NAME_LS_MATH_VECTOR}-test ${TEST_FILES_LS_MATH_VECTOR})
- endif ()
- ####################################################################################################################
- ####################################################################################################################
- ####################################################################################################################
- # Build Library Binaries
- ####################################################################################################################
- ####################################################################################################################
- ####################################################################################################################
- ##########################################################
- # Build Library (ls-math-vector)
- ##########################################################
- message("${PROJECT_NAME}: Building ${MODULE_NAME_LS_MATH_VECTOR} library version ${PROJECT_VERSION}...")
- if (${BUILD_LS_MATH_STATIC})
- add_library("${MODULE_NAME_LS_MATH_VECTOR}" STATIC ${SOURCE_FILES_LS_MATH_VECTOR})
- set_target_properties("${MODULE_NAME_LS_MATH_VECTOR}" PROPERTIES DEBUG_POSTFIX "-d")
- endif ()
- if (${BUILD_LS_MATH_SHARED})
- add_library("${MODULE_NAME_LS_MATH_VECTOR}" SHARED ${SOURCE_FILES_LS_MATH_VECTOR})
- target_link_libraries("${MODULE_NAME_LS_MATH_VECTOR}" ${MODULE_NAME_CORE})
- set_target_properties("${MODULE_NAME_LS_MATH_VECTOR}" PROPERTIES DEBUG_POSTFIX "-d")
- endif ()
- ####################################################################################################################
- ####################################################################################################################
- ####################################################################################################################
- # Test Suite: Linking
- ####################################################################################################################
- ####################################################################################################################
- ####################################################################################################################
- ##########################################################
- # Linking (ls-math-vector)
- ##########################################################
- if (${BUILD_LS_MATH_WITH_TESTS})
- message("${MODULE_NAME_LS_MATH_VECTOR}: Linking libraries for test application...")
- target_link_libraries(${MODULE_NAME_LS_MATH_VECTOR}-test
- gtest
- gmock
- gtest_main
- "${MODULE_NAME_LS_MATH_VECTOR}")
- endif ()
|