Skip to content

Commit 484eb45

Browse files
authored
Merge pull request #4 from Shfdis/big-refactor
Big refactor
2 parents a5d4a68 + 9948424 commit 484eb45

23 files changed

Lines changed: 938 additions & 630 deletions

.clangd

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
CompileFlags:
2+
Remove:
3+
- -fmodules
4+
- -fcxx-modules
5+
- -fmodule-map-file=*
6+
- -fmodule-file=*

.gitignore

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ compile_commands.json
1818
echo_server
1919

2020
# IDE/Editor
21-
.cache/
22-
.vscode/
23-
.idea/
21+
*.cache/
22+
*.vscode/
23+
*.idea/
24+
*.agents/
25+
*.codex/
2426
*.swp
2527
*.swo
2628
*~

README.md

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,7 @@ int main() {
4242
});
4343

4444
auto server = builder.Build();
45-
server.Start();
46-
47-
// Keep running
48-
std::promise<void>().get_future().wait();
45+
server.Start().Get();
4946
}
5047
```
5148
## Benchmarks

example/CMakeLists.txt

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,26 @@
11
cmake_minimum_required(VERSION 3.12)
2-
project(example_echo_server CXX)
2+
33
set(CMAKE_CXX_STANDARD 20)
44
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
5-
6-
get_filename_component(SERVER_DIR "${CMAKE_CURRENT_LIST_DIR}/../server" ABSOLUTE)
7-
execute_process(COMMAND ${CMAKE_COMMAND} -S "${SERVER_DIR}" -B build_dep -DCMAKE_INSTALL_PREFIX=install_dep -DCMAKE_CXX_STANDARD=20)
8-
execute_process(COMMAND ${CMAKE_COMMAND} --build build_dep --target install)
9-
10-
set(CMAKE_PREFIX_PATH ${CMAKE_CURRENT_BINARY_DIR}/install_dep)
11-
find_package(coro_http_server REQUIRED)
5+
project(example_echo_server CXX)
6+
set(BIN_OUTPUT_DIR ${CMAKE_CURRENT_LIST_DIR}/../bin)
7+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIR})
8+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIR})
9+
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIR})
10+
foreach(cfg ${CMAKE_CONFIGURATION_TYPES})
11+
string(TOUPPER ${cfg} cfg_upper)
12+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${cfg_upper} ${BIN_OUTPUT_DIR})
13+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${cfg_upper} ${BIN_OUTPUT_DIR})
14+
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${cfg_upper} ${BIN_OUTPUT_DIR})
15+
endforeach()
1216

1317
option(ENABLE_ASAN "Enable AddressSanitizer" OFF)
14-
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../server coro_server_build)
18+
set(CORO_SERVER_DIR ${CMAKE_CURRENT_LIST_DIR}/../server)
19+
add_subdirectory(${CORO_SERVER_DIR} coro_server_build)
1520
add_executable(echo_server main.cpp)
21+
target_compile_options(echo_server PRIVATE -O3 -g -fno-omit-frame-pointer)
22+
if (ENABLE_ASAN)
23+
target_compile_options(echo_server PRIVATE -fsanitize=address)
24+
target_link_options(echo_server PRIVATE -fsanitize=address)
25+
endif()
1626
target_link_libraries(echo_server PRIVATE coro_http_server::coro_http_server)

example/main.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include "request_data.h"
22
#include "server.h"
3-
#include <future>
3+
#include <string_view>
44
int main() {
55
HTTP::ServerBuilder builder;
66
builder.SetPort(8080);
@@ -29,8 +29,6 @@ int main() {
2929
return response;
3030
});
3131
auto server = builder.Build();
32-
server.Start();
33-
std::promise<void> keep_alive;
34-
keep_alive.get_future().wait();
32+
server.Start().Get();
3533
return 0;
3634
}

server/CMakeLists.txt

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,44 @@
11
cmake_minimum_required(VERSION 3.12)
2-
project(coro_http_server CXX)
32
set(CMAKE_CXX_STANDARD 20)
3+
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
44

5+
project(coro_http_server CXX)
6+
set(BIN_OUTPUT_DIR ${CMAKE_CURRENT_LIST_DIR}/../bin)
7+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIR})
8+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIR})
9+
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIR})
10+
foreach(cfg ${CMAKE_CONFIGURATION_TYPES})
11+
string(TOUPPER ${cfg} cfg_upper)
12+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${cfg_upper} ${BIN_OUTPUT_DIR})
13+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${cfg_upper} ${BIN_OUTPUT_DIR})
14+
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${cfg_upper} ${BIN_OUTPUT_DIR})
15+
endforeach()
516
find_package(PkgConfig REQUIRED)
617
pkg_check_modules(LIBURING REQUIRED liburing)
718

8-
file(GLOB SRCS *.cpp)
9-
file(GLOB HDRS *.h)
10-
11-
add_library(coro_http_server ${SRCS})
12-
target_include_directories(coro_http_server PUBLIC
13-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
19+
option(ENABLE_ASAN "Enable AddressSanitizer" OFF)
20+
add_library(coro_http_server
21+
src/io_uring.cpp
22+
src/read_iterator.cpp
23+
src/http_error.cpp
24+
src/trie.cpp
25+
src/server.cpp
26+
)
27+
add_library(coro_http_server::coro_http_server ALIAS coro_http_server)
28+
target_compile_options(coro_http_server PUBLIC -fmodules)
29+
target_include_directories(coro_http_server PUBLIC
30+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
1431
$<INSTALL_INTERFACE:include>
1532
${LIBURING_INCLUDE_DIRS}
1633
)
34+
target_compile_options(coro_http_server PRIVATE -O3 -g -fno-omit-frame-pointer)
35+
if (ENABLE_ASAN)
36+
target_compile_options(coro_http_server PRIVATE -fsanitize=address)
37+
target_link_options(coro_http_server PUBLIC -fsanitize=address)
38+
endif()
1739
target_link_libraries(coro_http_server PUBLIC ${LIBURING_LIBRARIES})
1840

1941
include(GNUInstallDirs)
2042
install(TARGETS coro_http_server EXPORT MyServerConfig DESTINATION ${CMAKE_INSTALL_LIBDIR})
2143
install(EXPORT MyServerConfig FILE coro_http_serverConfig.cmake NAMESPACE coro_http_server:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/coro_http_server)
22-
install(FILES ${HDRS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
44+
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

server/coroutine.h

Lines changed: 0 additions & 100 deletions
This file was deleted.

0 commit comments

Comments
 (0)