Skip to content

Commit 70cf1bd

Browse files
author
朱胜
committed
no message
1 parent 2aeb608 commit 70cf1bd

File tree

8 files changed

+202
-81
lines changed

8 files changed

+202
-81
lines changed

CMakeLists.txt

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
2-
PROJECT(coroutine CXX)
2+
PROJECT(coroutine CXX C)
33

44
set(SRC_ROOT ${PROJECT_SOURCE_DIR}/src)
55

@@ -9,12 +9,17 @@ include(halo)
99
add_definitions(-D_XOPEN_SOURCE=1)
1010
add_definitions(-DGTEST_HAS_PTHREAD=1)
1111

12-
add_pkg(libuv uv)
12+
#add_pkg(libuv uv)
1313

1414
add_incs(src)
1515
add_objs(couv src/couv/*.cpp src/log/*.cpp)
16+
set(LIB_OBJS ${LIB_OBJS} ${couv_OBJS})
1617

17-
build_exe(hello src/examples/hello.cpp ${couv_OBJS})
18-
build_exe(lock src/examples/lock.cpp ${couv_OBJS})
19-
build_exe(sem src/examples/sem.cpp ${couv_OBJS})
20-
build_exe(echo src/examples/echo.cpp ${couv_OBJS})
18+
add_subdirectory(${PROJECT_SOURCE_DIR}/deps/libuv-v1.6.1)
19+
20+
message("objs ${LIB_OBJS}")
21+
22+
build_exe(hello src/examples/hello.cpp)
23+
build_exe(lock src/examples/lock.cpp)
24+
build_exe(sem src/examples/sem.cpp)
25+
build_exe(echo src/examples/echo.cpp)

cmake/halo.cmake

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ macro(add_cxx_flags)
7171

7272
if(${tools_len} EQUAL 0 OR ${is_tool_match} GREATER -1)
7373
if(${build_len} EQUAL 0)
74-
message("list(APPEND CMAKE_CXX_FLAGS ${flags})")
74+
#message("list(APPEND CMAKE_CXX_FLAGS ${flags})")
7575
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flags}")
7676
else()
7777
foreach(b ${build})
@@ -99,31 +99,28 @@ endmacro()
9999
##################################################
100100
### add_objs base src/base/*.cpp
101101
macro(add_objs name expr)
102+
include_directories(${LIB_INCS})
102103
file(GLOB ${name}_SRCS ${expr} ${ARGN})
103104
add_library(${name} OBJECT ${${name}_SRCS})
104-
set(${name}_OBJS $<TARGET_OBJECTS:${name}>)
105+
set(${name}_OBJS $<TARGET_OBJECTS:${name}>)
105106
endmacro()
106107

107108
##################################################
108109
### add_incs
109110
macro(add_incs)
110-
list(APPEND LIB_INCS ${ARGN})
111+
set(LIB_INCS ${LIB_INCS} ${ARGN})
111112
endmacro()
112113

113114
##################################################
114115
### add_libs
115116
macro(add_libs)
116-
list(APPEND LIB_LIBS ${ARGN})
117+
set(LIB_LIBS ${LIB_LIBS} ${ARGN})
117118
endmacro()
118119

119120
##################################################
120121
### add_static_libs
121-
macro(add_libs)
122-
list(APPEND LIB_LIBS ${ARGN})
123-
endmacro()
124-
125122
macro(add_static_libs)
126-
list(APPEND LIB_STATIC ${ARGN})
123+
set(LIB_STATIC ${LIB_STATIC} ${ARGN})
127124
endmacro()
128125

129126
# pthread
@@ -150,7 +147,7 @@ endmacro()
150147

151148
macro(build_exe exe)
152149
begin_build(${exe})
153-
add_executable(${exe} ${ARGN})
150+
add_executable(${exe} ${ARGN} ${LIB_OBJS})
154151
end_build(${exe})
155152
endmacro()
156153
##################################################
@@ -193,15 +190,18 @@ set(LIB_STATIC c m z rt dl)
193190

194191
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
195192
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
196-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated -Wno-sign-compare -Wall")
193+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
197194

198195
# c++11
199196
add_flags(-std=c++11 -std=c++0x)
200197
add_flags(-Wno-unused-const-variable)
201198
add_flags(-Wno-unused-but-set-variable)
202199
add_flags(-Wno-unused-private-field)
203-
add_flags(-Wno-deprecated-declarations)
204200
add_flags(-Wno-unused-function)
201+
add_flags(-Wno-deprecated-declarations)
202+
add_flags(-Wno-sign-compare)
203+
add_flags(-Wno-deprecated)
204+
add_flags(-Wno-unused-parameter)
205205

206206
add_cxx_flags(Clang -stdlib=libc++)
207207

deps/libuv-v1.6.1/CMakeLists.txt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
add_incs(${CMAKE_CURRENT_SOURCE_DIR}/include)
2+
add_objs(uv
3+
src/fs-poll.c
4+
src/inet.c
5+
src/threadpool.c
6+
src/uv-common.c
7+
src/version.c
8+
src/unix/async.c
9+
src/unix/core.c
10+
src/unix/dl.c
11+
src/unix/fs.c
12+
src/unix/getaddrinfo.c
13+
src/unix/getnameinfo.c
14+
src/unix/loop-watcher.c
15+
src/unix/loop.c
16+
src/unix/pipe.c
17+
src/unix/poll.c
18+
src/unix/process.c
19+
src/unix/signal.c
20+
src/unix/stream.c
21+
src/unix/tcp.c
22+
src/unix/thread.c
23+
src/unix/timer.c
24+
src/unix/tty.c
25+
src/unix/udp.c
26+
src/unix/darwin.c
27+
src/unix/darwin-proctitle.c
28+
src/unix/fsevents.c
29+
src/unix/kqueue.c
30+
src/unix/proctitle.c
31+
)
32+
33+
message("libuv ${uv_OBJS}}")
34+
35+
set(LIB_INCS ${LIB_INCS} ${CMAKE_CURRENT_SOURCE_DIR}/include PARENT_SCOPE)
36+
set(LIB_OBJS ${LIB_OBJS} ${uv_OBJS} PARENT_SCOPE)

src/couv/channel.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ class channel
3838
if(m_closed)
3939
return;
4040

41-
m_sem.signal();
4241
m_queue.push_back(t);
42+
m_sem.signal();
4343
}
4444

4545
void receive(T& t) {

src/couv/scheduler.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@ namespace couv
1515
//scheduler_t* current_scheduler = &local_scheduler;
1616
scheduler_t* current_scheduler = nullptr;
1717

18-
scheduler_t::scheduler_t()
18+
scheduler_t::scheduler_t(bool install)
1919
{
2020
m_root = std::make_shared<coroutine_base>();
2121
m_current = m_root;
22-
current_scheduler = this;
22+
if(install) {
23+
current_scheduler = this;
24+
}
2325
}
2426

2527
scheduler_t::~scheduler_t()

src/couv/scheduler.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
#define resume couv::current_scheduler->resume
2525

26+
#define go (*couv::current_scheduler)<<[&]
27+
2628
namespace couv
2729
{
2830

@@ -32,7 +34,7 @@ namespace couv
3234
class scheduler_t: public delegate_t
3335
{
3436
public:
35-
scheduler_t();
37+
scheduler_t(bool install=true);
3638
virtual ~scheduler_t();
3739
virtual void run();
3840

@@ -45,6 +47,11 @@ class scheduler_t: public delegate_t
4547

4648
void set_current(coroutine_ptr r) { m_current = r; }
4749
coroutine_ptr current(){ return m_current; }
50+
51+
scheduler_t& operator<<(coroutine_base::func_type&& f){
52+
add(std::move(f));
53+
return *this;
54+
}
4855

4956
protected:
5057
void resume_coroutine(coroutine_ptr r);

0 commit comments

Comments
 (0)