fix async++ as static library
Some checks failed
linux-arm-gcc / linux-gcc-armhf (push) Successful in 1m41s
linux-mips64-gcc / linux-gcc-mips64el (Release) (pull_request) Successful in 1m48s
linux-x64-gcc / linux-gcc (Debug) (push) Failing after 1m14s
linux-aarch64-cpu-gcc / linux-gcc-aarch64 (push) Failing after 1m25s
linux-x64-gcc / linux-gcc (Release) (push) Successful in 1m35s
linux-aarch64-cpu-gcc / linux-gcc-aarch64 (pull_request) Failing after 1m34s
linux-arm-gcc / linux-gcc-armhf (pull_request) Successful in 1m40s
linux-mips64-gcc / linux-gcc-mips64el (Release) (push) Successful in 2m4s
linux-mips64-gcc / linux-gcc-mips64el (Debug) (push) Successful in 2m8s
linux-mips64-gcc / linux-gcc-mips64el (Debug) (pull_request) Successful in 1m59s
linux-x64-gcc / linux-gcc (Release) (pull_request) Successful in 1m18s
linux-x64-gcc / linux-gcc (Debug) (pull_request) Failing after 12m17s
Some checks failed
linux-arm-gcc / linux-gcc-armhf (push) Successful in 1m41s
linux-mips64-gcc / linux-gcc-mips64el (Release) (pull_request) Successful in 1m48s
linux-x64-gcc / linux-gcc (Debug) (push) Failing after 1m14s
linux-aarch64-cpu-gcc / linux-gcc-aarch64 (push) Failing after 1m25s
linux-x64-gcc / linux-gcc (Release) (push) Successful in 1m35s
linux-aarch64-cpu-gcc / linux-gcc-aarch64 (pull_request) Failing after 1m34s
linux-arm-gcc / linux-gcc-armhf (pull_request) Successful in 1m40s
linux-mips64-gcc / linux-gcc-mips64el (Release) (push) Successful in 2m4s
linux-mips64-gcc / linux-gcc-mips64el (Debug) (push) Successful in 2m8s
linux-mips64-gcc / linux-gcc-mips64el (Debug) (pull_request) Successful in 1m59s
linux-x64-gcc / linux-gcc (Release) (pull_request) Successful in 1m18s
linux-x64-gcc / linux-gcc (Debug) (pull_request) Failing after 12m17s
This commit is contained in:
parent
fd5eadd9a2
commit
65a269bcc5
@ -7,71 +7,71 @@
|
|||||||
# copies of the Software, and to permit persons to whom the Software is
|
# copies of the Software, and to permit persons to whom the Software is
|
||||||
# furnished to do so, subject to the following conditions:
|
# furnished to do so, subject to the following conditions:
|
||||||
#
|
#
|
||||||
# The above copyright notice and this permission notice shall be included in
|
# The above copyright notice and this permission notice shall be included in all
|
||||||
# all copies or substantial portions of the Software.
|
# copies or substantial portions of the Software.
|
||||||
#
|
#
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
# THE SOFTWARE.
|
# SOFTWARE.
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.1)
|
cmake_minimum_required(VERSION 3.1)
|
||||||
project(Async++ C CXX)
|
project(Async++ C CXX)
|
||||||
|
|
||||||
option(BUILD_SHARED_LIBS "Build Async++ as a shared library" ON)
|
option(BUILD_SHARED_LIBS "Build Async++ as a shared library" OFF)
|
||||||
option(USE_CXX_EXCEPTIONS "Enable C++ exception support" ON)
|
option(USE_CXX_EXCEPTIONS "Enable C++ exception support" ON)
|
||||||
if (APPLE)
|
if(APPLE)
|
||||||
option(BUILD_FRAMEWORK "Build a Mac OS X framework instead of a library" OFF)
|
option(BUILD_FRAMEWORK "Build a Mac OS X framework instead of a library" OFF)
|
||||||
if (BUILD_FRAMEWORK AND NOT BUILD_SHARED_LIBS)
|
if(BUILD_FRAMEWORK AND NOT BUILD_SHARED_LIBS)
|
||||||
message(FATAL_ERROR "Can't build a framework with static libraries")
|
message(FATAL_ERROR "Can't build a framework with static libraries")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
|
||||||
# Add all source and header files so IDEs can see them
|
# Add all source and header files so IDEs can see them
|
||||||
set(ASYNCXX_INCLUDE
|
set(ASYNCXX_INCLUDE
|
||||||
${PROJECT_SOURCE_DIR}/include/async++/aligned_alloc.h
|
${PROJECT_SOURCE_DIR}/include/async++/aligned_alloc.h
|
||||||
${PROJECT_SOURCE_DIR}/include/async++/cancel.h
|
${PROJECT_SOURCE_DIR}/include/async++/cancel.h
|
||||||
${PROJECT_SOURCE_DIR}/include/async++/continuation_vector.h
|
${PROJECT_SOURCE_DIR}/include/async++/continuation_vector.h
|
||||||
${PROJECT_SOURCE_DIR}/include/async++/parallel_for.h
|
${PROJECT_SOURCE_DIR}/include/async++/parallel_for.h
|
||||||
${PROJECT_SOURCE_DIR}/include/async++/parallel_invoke.h
|
${PROJECT_SOURCE_DIR}/include/async++/parallel_invoke.h
|
||||||
${PROJECT_SOURCE_DIR}/include/async++/parallel_reduce.h
|
${PROJECT_SOURCE_DIR}/include/async++/parallel_reduce.h
|
||||||
${PROJECT_SOURCE_DIR}/include/async++/partitioner.h
|
${PROJECT_SOURCE_DIR}/include/async++/partitioner.h
|
||||||
${PROJECT_SOURCE_DIR}/include/async++/range.h
|
${PROJECT_SOURCE_DIR}/include/async++/range.h
|
||||||
${PROJECT_SOURCE_DIR}/include/async++/ref_count.h
|
${PROJECT_SOURCE_DIR}/include/async++/ref_count.h
|
||||||
${PROJECT_SOURCE_DIR}/include/async++/scheduler.h
|
${PROJECT_SOURCE_DIR}/include/async++/scheduler.h
|
||||||
${PROJECT_SOURCE_DIR}/include/async++/scheduler_fwd.h
|
${PROJECT_SOURCE_DIR}/include/async++/scheduler_fwd.h
|
||||||
${PROJECT_SOURCE_DIR}/include/async++/task.h
|
${PROJECT_SOURCE_DIR}/include/async++/task.h
|
||||||
${PROJECT_SOURCE_DIR}/include/async++/task_base.h
|
${PROJECT_SOURCE_DIR}/include/async++/task_base.h
|
||||||
${PROJECT_SOURCE_DIR}/include/async++/traits.h
|
${PROJECT_SOURCE_DIR}/include/async++/traits.h
|
||||||
${PROJECT_SOURCE_DIR}/include/async++/when_all_any.h
|
${PROJECT_SOURCE_DIR}/include/async++/when_all_any.h)
|
||||||
)
|
|
||||||
set(ASYNCXX_SRC
|
set(ASYNCXX_SRC
|
||||||
${PROJECT_SOURCE_DIR}/src/internal.h
|
${PROJECT_SOURCE_DIR}/src/internal.h
|
||||||
${PROJECT_SOURCE_DIR}/src/fifo_queue.h
|
${PROJECT_SOURCE_DIR}/src/fifo_queue.h
|
||||||
${PROJECT_SOURCE_DIR}/src/scheduler.cpp
|
${PROJECT_SOURCE_DIR}/src/scheduler.cpp
|
||||||
${PROJECT_SOURCE_DIR}/src/singleton.h
|
${PROJECT_SOURCE_DIR}/src/singleton.h
|
||||||
${PROJECT_SOURCE_DIR}/src/task_wait_event.h
|
${PROJECT_SOURCE_DIR}/src/task_wait_event.h
|
||||||
${PROJECT_SOURCE_DIR}/src/threadpool_scheduler.cpp
|
${PROJECT_SOURCE_DIR}/src/threadpool_scheduler.cpp
|
||||||
${PROJECT_SOURCE_DIR}/src/work_steal_queue.h
|
${PROJECT_SOURCE_DIR}/src/work_steal_queue.h)
|
||||||
)
|
source_group(include FILES ${PROJECT_SOURCE_DIR}/include/async++.h
|
||||||
source_group(include FILES ${PROJECT_SOURCE_DIR}/include/async++.h ${ASYNCXX_INCLUDE})
|
${ASYNCXX_INCLUDE})
|
||||||
source_group(src FILES ${ASYNCXX_SRC})
|
source_group(src FILES ${ASYNCXX_SRC})
|
||||||
add_library(Async++ ${PROJECT_SOURCE_DIR}/include/async++.h ${ASYNCXX_INCLUDE} ${ASYNCXX_SRC})
|
add_library(Async++ ${PROJECT_SOURCE_DIR}/include/async++.h ${ASYNCXX_INCLUDE}
|
||||||
|
${ASYNCXX_SRC})
|
||||||
|
|
||||||
# Async++ only depends on the C++11 standard libraries, but some implementations
|
# Async++ only depends on the C++11 standard libraries, but some implementations
|
||||||
# require the -pthread compiler flag to enable threading functionality.
|
# require the -pthread compiler flag to enable threading functionality.
|
||||||
if (NOT MSVC)
|
if(NOT MSVC)
|
||||||
target_compile_options(Async++ PRIVATE -std=c++11)
|
target_compile_options(Async++ PRIVATE -std=c++11)
|
||||||
endif()
|
endif()
|
||||||
if (APPLE)
|
if(APPLE)
|
||||||
# Use libc++ on Mac because the shipped libstdc++ version is ancient
|
# Use libc++ on Mac because the shipped libstdc++ version is ancient
|
||||||
target_compile_options(Async++ PRIVATE -stdlib=libc++)
|
target_compile_options(Async++ PRIVATE -stdlib=libc++)
|
||||||
set_target_properties(Async++ PROPERTIES LINK_FLAGS -stdlib=libc++)
|
set_target_properties(Async++ PROPERTIES LINK_FLAGS -stdlib=libc++)
|
||||||
endif()
|
endif()
|
||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
@ -80,86 +80,90 @@ target_link_libraries(Async++ PUBLIC Threads::Threads)
|
|||||||
# Set up preprocessor definitions
|
# Set up preprocessor definitions
|
||||||
target_include_directories(Async++ PRIVATE ${PROJECT_SOURCE_DIR}/include)
|
target_include_directories(Async++ PRIVATE ${PROJECT_SOURCE_DIR}/include)
|
||||||
set_target_properties(Async++ PROPERTIES DEFINE_SYMBOL LIBASYNC_BUILD)
|
set_target_properties(Async++ PROPERTIES DEFINE_SYMBOL LIBASYNC_BUILD)
|
||||||
if (BUILD_SHARED_LIBS)
|
if(BUILD_SHARED_LIBS)
|
||||||
# Minimize the set of symbols exported by libraries
|
# Minimize the set of symbols exported by libraries
|
||||||
set_target_properties(Async++ PROPERTIES CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN ON)
|
set_target_properties(Async++ PROPERTIES CXX_VISIBILITY_PRESET hidden
|
||||||
|
VISIBILITY_INLINES_HIDDEN ON)
|
||||||
else()
|
else()
|
||||||
target_compile_definitions(Async++ PUBLIC LIBASYNC_STATIC)
|
target_compile_definitions(Async++ PUBLIC LIBASYNC_STATIC)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Enable warnings for strict C++ standard conformance
|
# Enable warnings for strict C++ standard conformance
|
||||||
if (NOT MSVC)
|
if(NOT MSVC)
|
||||||
target_compile_options(Async++ PRIVATE -Wall -Wextra -pedantic)
|
target_compile_options(Async++ PRIVATE -Wall -Wextra -pedantic)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Async++ doesn't make use of RTTI information, so don't generate it.
|
# Async++ doesn't make use of RTTI information, so don't generate it. There are
|
||||||
# There are issues on Apple platforms with exceptions and -fno-rtti, so keep it
|
# issues on Apple platforms with exceptions and -fno-rtti, so keep it enabled
|
||||||
# enabled there.
|
# there. See
|
||||||
# See https://stackoverflow.com/questions/21737201/problems-throwing-and-catching-exceptions-on-os-x-with-fno-rtti
|
# https://stackoverflow.com/questions/21737201/problems-throwing-and-catching-exceptions-on-os-x-with-fno-rtti
|
||||||
if (MSVC)
|
if(MSVC)
|
||||||
target_compile_options(Async++ PRIVATE /GR-)
|
target_compile_options(Async++ PRIVATE /GR-)
|
||||||
elseif(NOT APPLE)
|
elseif(NOT APPLE)
|
||||||
target_compile_options(Async++ PRIVATE -fno-rtti)
|
target_compile_options(Async++ PRIVATE -fno-rtti)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Allow disabling exceptions, but warn the user about the consequences
|
# Allow disabling exceptions, but warn the user about the consequences
|
||||||
if (NOT USE_CXX_EXCEPTIONS)
|
if(NOT USE_CXX_EXCEPTIONS)
|
||||||
message(WARNING "Exceptions have been disabled. Any operation that would "
|
message(
|
||||||
"throw an exception will result in a call to std::abort() instead.")
|
WARNING "Exceptions have been disabled. Any operation that would "
|
||||||
target_compile_definitions(Async++ PUBLIC LIBASYNC_NO_EXCEPTIONS)
|
"throw an exception will result in a call to std::abort() instead.")
|
||||||
if (MSVC)
|
target_compile_definitions(Async++ PUBLIC LIBASYNC_NO_EXCEPTIONS)
|
||||||
target_compile_options(Async++ PUBLIC /EHs-c-)
|
if(MSVC)
|
||||||
else()
|
target_compile_options(Async++ PUBLIC /EHs-c-)
|
||||||
target_compile_options(Async++ PUBLIC -fno-exceptions)
|
else()
|
||||||
endif()
|
target_compile_options(Async++ PUBLIC -fno-exceptions)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# /Zc:__cplusplus is required to make __cplusplus accurate
|
# /Zc:__cplusplus is required to make __cplusplus accurate /Zc:__cplusplus is
|
||||||
# /Zc:__cplusplus is available starting with Visual Studio 2017 version 15.7
|
# available starting with Visual Studio 2017 version 15.7 (according to
|
||||||
# (according to https://docs.microsoft.com/en-us/cpp/build/reference/zc-cplusplus)
|
# https://docs.microsoft.com/en-us/cpp/build/reference/zc-cplusplus) That
|
||||||
# That version is equivalent to _MSC_VER==1914
|
# version is equivalent to _MSC_VER==1914 (according to
|
||||||
# (according to https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=vs-2019)
|
# https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=vs-2019)
|
||||||
# CMake's ${MSVC_VERSION} is equivalent to _MSC_VER
|
# CMake's ${MSVC_VERSION} is equivalent to _MSC_VER (according to
|
||||||
# (according to https://cmake.org/cmake/help/latest/variable/MSVC_VERSION.html#variable:MSVC_VERSION)
|
# https://cmake.org/cmake/help/latest/variable/MSVC_VERSION.html#variable:MSVC_VERSION)
|
||||||
# GREATER and EQUAL are used because GREATER_EQUAL is available starting with CMake 3.7
|
# GREATER and EQUAL are used because GREATER_EQUAL is available starting with
|
||||||
# (according to https://cmake.org/cmake/help/v3.7/release/3.7.html#commands)
|
# CMake 3.7 (according to
|
||||||
if ((MSVC) AND ((MSVC_VERSION GREATER 1914) OR (MSVC_VERSION EQUAL 1914)))
|
# https://cmake.org/cmake/help/v3.7/release/3.7.html#commands)
|
||||||
target_compile_options(Async++ PUBLIC /Zc:__cplusplus)
|
if((MSVC) AND ((MSVC_VERSION GREATER 1914) OR (MSVC_VERSION EQUAL 1914)))
|
||||||
|
target_compile_options(Async++ PUBLIC /Zc:__cplusplus)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(CMakePackageConfigHelpers)
|
include(CMakePackageConfigHelpers)
|
||||||
configure_package_config_file("${CMAKE_CURRENT_LIST_DIR}/Async++Config.cmake.in"
|
configure_package_config_file(
|
||||||
"${PROJECT_BINARY_DIR}/Async++Config.cmake"
|
"${CMAKE_CURRENT_LIST_DIR}/Async++Config.cmake.in"
|
||||||
INSTALL_DESTINATION cmake
|
"${PROJECT_BINARY_DIR}/Async++Config.cmake" INSTALL_DESTINATION cmake)
|
||||||
)
|
|
||||||
|
|
||||||
install(FILES "${PROJECT_BINARY_DIR}/Async++Config.cmake"
|
install(FILES "${PROJECT_BINARY_DIR}/Async++Config.cmake" DESTINATION cmake)
|
||||||
DESTINATION cmake
|
|
||||||
)
|
|
||||||
|
|
||||||
# Install the library and produce a CMake export script
|
# Install the library and produce a CMake export script
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
install(TARGETS Async++
|
install(
|
||||||
EXPORT Async++
|
TARGETS Async++
|
||||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
EXPORT Async++
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
FRAMEWORK DESTINATION Frameworks
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
)
|
FRAMEWORK DESTINATION Frameworks)
|
||||||
export(EXPORT Async++)
|
export(EXPORT Async++)
|
||||||
install(EXPORT Async++ DESTINATION cmake)
|
install(EXPORT Async++ DESTINATION cmake)
|
||||||
if (APPLE AND BUILD_FRAMEWORK)
|
if(APPLE AND BUILD_FRAMEWORK)
|
||||||
set_target_properties(Async++ PROPERTIES OUTPUT_NAME Async++ FRAMEWORK ON)
|
set_target_properties(Async++ PROPERTIES OUTPUT_NAME Async++ FRAMEWORK ON)
|
||||||
set_source_files_properties(${ASYNCXX_INCLUDE} PROPERTIES MACOSX_PACKAGE_LOCATION Headers/async++)
|
set_source_files_properties(
|
||||||
set_source_files_properties(${PROJECT_SOURCE_DIR}/include/async++.h PROPERTIES MACOSX_PACKAGE_LOCATION Headers)
|
${ASYNCXX_INCLUDE} PROPERTIES MACOSX_PACKAGE_LOCATION Headers/async++)
|
||||||
|
set_source_files_properties(${PROJECT_SOURCE_DIR}/include/async++.h
|
||||||
|
PROPERTIES MACOSX_PACKAGE_LOCATION Headers)
|
||||||
else()
|
else()
|
||||||
set_target_properties(Async++ PROPERTIES OUTPUT_NAME async++)
|
set_target_properties(Async++ PROPERTIES OUTPUT_NAME async++)
|
||||||
target_include_directories(Async++ INTERFACE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include>)
|
target_include_directories(
|
||||||
install(FILES ${PROJECT_SOURCE_DIR}/include/async++.h DESTINATION include)
|
Async++ INTERFACE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
|
||||||
install(FILES ${ASYNCXX_INCLUDE} DESTINATION include/async++)
|
$<INSTALL_INTERFACE:include>)
|
||||||
|
install(FILES ${PROJECT_SOURCE_DIR}/include/async++.h DESTINATION include)
|
||||||
|
install(FILES ${ASYNCXX_INCLUDE} DESTINATION include/async++)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
SET(CPACK_GENERATOR "DEB")
|
set(CPACK_GENERATOR "DEB")
|
||||||
SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "none") #required
|
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "none") # required
|
||||||
|
|
||||||
INCLUDE(CPack)
|
include(CPack)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user