Skip to content

Commit 3dc8232

Browse files
committed
1.3.1
1 parent 0c0924b commit 3dc8232

File tree

6 files changed

+73
-40
lines changed

6 files changed

+73
-40
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
HISTORY
22
----------------
33

4+
### 1.3.1 (2020-07-06)
5+
6+
1. Fix compiler version checker for C++20 coroutine
7+
2. Add cmake interface option and features for targets
8+
3. Update documents
9+
410
### 1.3.0 (2020-07-02)
511

612
1. [OPTIMIZE] Using cmake export to generate module files

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ project(libcopp C CXX ASM)
99

1010
set(LIBCOPP_VERSION_MAJOR "1")
1111
set(LIBCOPP_VERSION_MINOR "3")
12-
set(LIBCOPP_VERSION_PATCH "0")
12+
set(LIBCOPP_VERSION_PATCH "1")
1313
set(LIBCOPP_VERSION "${LIBCOPP_VERSION_MAJOR}.${LIBCOPP_VERSION_MINOR}.${LIBCOPP_VERSION_PATCH}")
1414

1515
########################################################################

README.rst

Lines changed: 3 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -195,44 +195,10 @@ Using with cmake
195195
.. code-block:: cmake
196196
197197
find_package(Libcopp CONFIG REQUIRED)
198-
target_link_libraries(${CUSTOM_TARGET_NAME} PUBLIC libcopp::cotask)
199-
# Or just using copp by target_link_libraries(${CUSTOM_TARGET_NAME} PUBLIC libcopp::copp)
198+
target_link_libraries(${CUSTOM_TARGET_NAME} libcopp::cotask)
199+
# Or just using copp by target_link_libraries(${CUSTOM_TARGET_NAME} libcopp::copp)
200200
201-
If using modern compilers, it's required to open **C++20 coroutine** support.These codes below may be helpful:
202-
203-
.. code-block:: cmake
204-
205-
set_target_properties(
206-
${CUSTOM_TARGET_NAME}
207-
PROPERTIES CXX_STANDARD 20
208-
)
209-
include(CheckCXXCompilerFlag)
210-
if (MSVC AND MSVC_VERSION GREATER_EQUAL 1910)
211-
check_cxx_compiler_flag("/await" CHECK_CXX_FLAGS_AWAIT)
212-
if (CHECK_CXX_FLAGS_AWAIT)
213-
target_compile_options(${CUSTOM_TARGET_NAME} PRIVATE /await)
214-
endif()
215-
elseif (
216-
(${CMAKE_CXX_COMPILER_ID} STREQUAL "AppleClang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "10.0.1") OR
217-
(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "8.0")
218-
)
219-
check_cxx_compiler_flag("-fcoroutine" CHECK_CXX_FLAGS_FCONTEXT)
220-
if (CHECK_CXX_FLAGS_FCONTEXT)
221-
target_compile_options(${CUSTOM_TARGET_NAME} PRIVATE -fcoroutine)
222-
else ()
223-
check_cxx_compiler_flag("-fcoroutine-ts" CHECK_CXX_FLAGS_FCONTEXT_TS)
224-
if (CHECK_CXX_FLAGS_FCONTEXT_TS)
225-
target_compile_options(${CUSTOM_TARGET_NAME} PRIVATE -fcoroutine-ts)
226-
endif()
227-
endif()
228-
elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "10.0")
229-
check_cxx_compiler_flag("-fcoroutine" CHECK_CXX_FLAGS_FCONTEXT)
230-
if (CHECK_CXX_FLAGS_FCONTEXT)
231-
target_compile_options(${CUSTOM_TARGET_NAME} PRIVATE -fcoroutine)
232-
endif ()
233-
endif ()
234-
235-
If using MSVC, CRT must match the triplet of vcpkg, these codes below may be helpful:
201+
If using MSVC and vcpkg, CRT must match the triplet of vcpkg, these codes below may be helpful:
236202

237203
.. code-block:: cmake
238204

project/cmake/CompilerOption.cmake

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,36 @@ if(NOT DEFINED __COMPILER_OPTION_LOADED)
6464
endforeach()
6565
endmacro(add_linker_flags_for_all)
6666

67+
function(add_target_properties)
68+
list(GET ARGV 0 TARGET_NAME)
69+
list(GET ARGV 1 PROPERTY_NAME)
70+
list(SUBLIST ARGV 2 -1 PROPERTY_VALUES)
71+
if (TARGET ${TARGET_NAME} AND PROPERTY_VALUES)
72+
get_target_property(PROPERTY_OLD_VALUES ${TARGET_NAME} ${PROPERTY_NAME})
73+
if (PROPERTY_OLD_VALUES)
74+
list(APPEND PROPERTY_OLD_VALUES ${PROPERTY_VALUES})
75+
else ()
76+
set(PROPERTY_OLD_VALUES ${PROPERTY_VALUES})
77+
endif ()
78+
set_target_properties(${TARGET_NAME} PROPERTIES ${PROPERTY_NAME} ${PROPERTY_OLD_VALUES})
79+
endif ()
80+
endfunction(add_target_properties)
81+
82+
function(remove_target_properties)
83+
list(GET ARGV 0 TARGET_NAME)
84+
list(GET ARGV 1 PROPERTY_NAME)
85+
list(SUBLIST ARGV 2 -1 PROPERTY_VALUES)
86+
if (TARGET ${TARGET_NAME} AND PROPERTY_VALUES)
87+
get_target_property(PROPERTY_OLD_VALUES ${TARGET_NAME} ${PROPERTY_NAME})
88+
if (PROPERTY_OLD_VALUES)
89+
foreach(def ${PROPERTY_VALUES})
90+
list(REMOVE_ITEM PROPERTY_OLD_VALUES ${def})
91+
endforeach()
92+
set_target_properties(${TARGET_NAME} PROPERTIES ${PROPERTY_NAME} ${PROPERTY_OLD_VALUES})
93+
endif ()
94+
endif ()
95+
endfunction(remove_target_properties)
96+
6797
# Auto compiler options, support gcc,MSVC,Clang,AppleClang
6898
if( ${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
6999
# add_compile_options(-Wall -Werror)

src/libcopp/CMakeLists.txt

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ else ()
3535
)
3636
endif()
3737

38-
target_include_directories(${PROJECT_LIBCOPP_LIB_LINK}
38+
target_include_directories(${PROJECT_LIBCOPP_LIB_LINK}
39+
INTERFACE "$<INSTALL_INTERFACE:include>"
3940
PUBLIC
4041
"$<BUILD_INTERFACE:${PROJECT_LIBCOPP_ROOT_INC_DIR}>"
41-
"$<INSTALL_INTERFACE:include>"
4242
)
4343
if (PROJECT_LIBCOPP_DEP_INC_DIR)
4444
target_include_directories(${PROJECT_LIBCOPP_LIB_LINK}
@@ -47,6 +47,20 @@ if (PROJECT_LIBCOPP_DEP_INC_DIR)
4747
)
4848
endif()
4949

50+
if (LIBCOPP_MACRO_ENABLE_STD_COROUTINE)
51+
add_target_properties(${PROJECT_LIBCOPP_LIB_LINK} INTERFACE_COMPILE_FEATURES cxx_std_20)
52+
if (MSVC)
53+
add_target_properties(${PROJECT_LIBCOPP_LIB_LINK} INTERFACE_COMPILE_OPTIONS "/await")
54+
else ()
55+
string(FIND "${CMAKE_CXX_FLAGS}" "-fcoroutines-ts" LIBCOPP_FIND_COROUTINE_OPTION)
56+
if (LIBCOPP_FIND_COROUTINE_OPTION GREATER_EQUAL 0)
57+
add_target_properties(${PROJECT_LIBCOPP_LIB_LINK} INTERFACE_COMPILE_OPTIONS "-fcoroutines-ts")
58+
else ()
59+
add_target_properties(${PROJECT_LIBCOPP_LIB_LINK} INTERFACE_COMPILE_OPTIONS "-fcoroutines")
60+
endif ()
61+
endif ()
62+
endif ()
63+
5064
install(TARGETS ${PROJECT_LIBCOPP_LIB_LINK}
5165
EXPORT ${PROJECT_LIBCOPP_EXPORT_NAME}
5266
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}

src/libcotask/CMakeLists.txt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,23 @@ else ()
4040
endif()
4141

4242
target_link_libraries(${PROJECT_LIBCOTASK_LIB_LINK} PUBLIC ${PROJECT_LIBCOPP_LIB_LINK})
43+
target_include_directories(${PROJECT_LIBCOPP_LIB_LINK}
44+
INTERFACE "$<INSTALL_INTERFACE:include>"
45+
)
46+
47+
if (LIBCOPP_MACRO_ENABLE_STD_COROUTINE)
48+
add_target_properties(${PROJECT_LIBCOTASK_LIB_LINK} INTERFACE_COMPILE_FEATURES cxx_std_20)
49+
if (MSVC)
50+
add_target_properties(${PROJECT_LIBCOTASK_LIB_LINK} INTERFACE_COMPILE_OPTIONS "/await")
51+
else ()
52+
string(FIND "${CMAKE_CXX_FLAGS}" "-fcoroutines-ts" LIBCOPP_FIND_COROUTINE_OPTION)
53+
if (LIBCOPP_FIND_COROUTINE_OPTION GREATER_EQUAL 0)
54+
add_target_properties(${PROJECT_LIBCOTASK_LIB_LINK} INTERFACE_COMPILE_OPTIONS "-fcoroutines-ts")
55+
else ()
56+
add_target_properties(${PROJECT_LIBCOTASK_LIB_LINK} INTERFACE_COMPILE_OPTIONS "-fcoroutines")
57+
endif ()
58+
endif ()
59+
endif ()
4360

4461
install(TARGETS ${PROJECT_LIBCOTASK_LIB_LINK}
4562
EXPORT ${PROJECT_LIBCOTASK_EXPORT_NAME}

0 commit comments

Comments
 (0)