diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b90e6f..cd4c10f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,11 +1,18 @@ cmake_minimum_required(VERSION 3.18) -project(asyncio) -set(CMAKE_CXX_STANDARD 20) +set(PROJECT_VERSION 1.0.0) +set(TARGET_NAME "asyncio") +project(${TARGET_NAME} + VERSION ${PROJECT_VERSION} + LANGUAGES CXX) set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address") set (CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address") message(CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + ############################################################################### set(ASYNCIO_INC include/asyncio/asyncio_ns.h @@ -25,6 +32,7 @@ set(ASYNCIO_INC include/asyncio/sleep.h include/asyncio/schedule_task.h include/asyncio/concept/awaitable.h + include/asyncio/concept/promise.h include/asyncio/gather.h include/asyncio/result.h include/asyncio/callstack.h @@ -35,11 +43,43 @@ set(ASYNCIO_INC ) include_directories(${CMAKE_SOURCE_DIR}/include) - -add_library(asyncio STATIC +add_library(asyncio SHARED ${ASYNC_INC} src/event_loop.cpp) target_link_libraries(asyncio PUBLIC fmt::fmt) add_subdirectory(test) add_subdirectory(third_party) + +set(MODELS_CMAKE_FILES + "cmake/asyncioConfig.cmake" + "cmake/asyncioConfigVersion.cmake" +) + +add_compile_options(-fPIC) + +set_target_properties(${PROJECT_NAME} +PROPERTIES + SOVERSION ${PROJECT_VERSION_MAJOR} + VERSION ${PROJECT_VERSION} + OUTPUT_NAME ${PROJECT_NAME} + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" +) + +set(MODELS_LIBRARY_INSTALL_DIR "/usr/lib/") +set(MODELS_CMAKE_FILES_INSTALL_DIR "/usr/lib/cmake/asyncio/") +set(MODELS_HEADER_INSTALL_DIR "/usr/") + +# INSTALL CONFIGURATIONS +include(GNUInstallDirs) + +foreach ( file ${ASYNCIO_INC} ) + get_filename_component( dir ${file} DIRECTORY ) + install( FILES ${file} DESTINATION "${MODELS_HEADER_INSTALL_DIR}${dir}") +endforeach() + +install(TARGETS ${TARGET_NAME} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + +install(FILES ${MODELS_CMAKE_FILES} + DESTINATION ${MODELS_CMAKE_FILES_INSTALL_DIR}) diff --git a/cmake/asyncioConfig.cmake b/cmake/asyncioConfig.cmake new file mode 100644 index 0000000..9365d40 --- /dev/null +++ b/cmake/asyncioConfig.cmake @@ -0,0 +1,5 @@ +get_filename_component(ASYNCIO_INCLUDES "${CMAKE_CURRENT_LIST_DIR}/../include/" ABSOLUTE) + +set(asyncio_INCLUDE_DIRS "${ASYNCIO_INCLUDES}") +set(asyncio_LIBRARIES asyncio) +set(asyncio_LIBRARY_DIRS "lib") diff --git a/cmake/asyncioConfigVersion.cmake b/cmake/asyncioConfigVersion.cmake new file mode 100644 index 0000000..3efb5a8 --- /dev/null +++ b/cmake/asyncioConfigVersion.cmake @@ -0,0 +1,11 @@ +set(PACKAGE_VERSION "1.0.0") + +# Check whether the requested PACKAGE_FIND_VERSION is compatible +if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") + set(PACKAGE_VERSION_EXACT TRUE) + endif() +endif()