Skip to content

Commit

Permalink
build: update cmakelists
Browse files Browse the repository at this point in the history
  • Loading branch information
Napolitain committed Sep 26, 2024
1 parent 77801db commit 6a4346a
Show file tree
Hide file tree
Showing 7 changed files with 174 additions and 11 deletions.
1 change: 1 addition & 0 deletions .github/workflows/cpp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ jobs:
$ENV:CFLAGS='-I C:\vcpkg\installed\x64-windows\include';
$ENV:LDFLAGS='-L C:\vcpkg\installed\x64-windows\lib';
$ENV:CXX='clang++'; $ENV:EXEC_SUFFIX='.exe'; $ENV:WITH_LIBUV='1'; nmake
cmake -G "NMake Makefiles" -B build -S .
ls
- name: Run smoke test
run: |
Expand Down
22 changes: 13 additions & 9 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
cmake_minimum_required(VERSION 3.10)

# If project is not already defined, define it (for monorepo)
if (NOT CMAKE_PROJECT_NAME)
project(uWebSockets)
endif()
message(STATUS "Building uWebSockets")
project(uWebSockets)
message(STATUS "Building ${PROJECT_NAME}")

# Compiler flags
set(CMAKE_CXX_STANDARD 20)
Expand Down Expand Up @@ -84,9 +81,10 @@ set(EXAMPLE_FILES "CachingApp" "HelloWorldThreaded" "Http3Server" "Broadcast" "H
string(STRIP "${LDFLAGS_UWS}" LDFLAGS_STRIPPED_UWS) # Strip leading/trailing whitespace

foreach(EXAMPLE_FILE IN LISTS EXAMPLE_FILES)
add_executable(${EXAMPLE_FILE} examples/${EXAMPLE_FILE}.cpp)
target_link_libraries(${EXAMPLE_FILE} uSockets ${LDFLAGS_STRIPPED_UWS})
target_compile_options(${EXAMPLE_FILE} PRIVATE ${CXXFLAGS})
set(target_name ${PROJECT_NAME}${EXAMPLE_FILE})
add_executable(${target_name} examples/${EXAMPLE_FILE}.cpp)
target_link_libraries(${target_name} uSockets ${LDFLAGS_STRIPPED_UWS})
target_compile_options(${target_name} PRIVATE ${CXXFLAGS})
endforeach()


Expand All @@ -99,4 +97,10 @@ install(DIRECTORY src/ DESTINATION ${CMAKE_INSTALL_PREFIX}/include/uWebSockets)
# Default target is all
add_custom_target(all_examples DEPENDS ${EXAMPLE_FILES})

#add_subdirectory(benchmarks)
add_subdirectory(tests)
add_subdirectory(benchmarks)
# If linux, add epoll benchmarker
if (UNIX AND NOT APPLE)
add_subdirectory(libEpollBenchmarker)
endif ()

47 changes: 47 additions & 0 deletions benchmarks/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
cmake_minimum_required(VERSION 3.16)
project(uWebSocketsBenchmarks)
message(STATUS "Building ${PROJECT_NAME}")

# Set C and C++ standards
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

# Enable LTO if supported
include(CheckIPOSupported)
check_ipo_supported(RESULT lto_supported OUTPUT error)
if(lto_supported)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
else()
message(WARNING "IPO / LTO is not supported: ${error}")
endif()

# Compile options: enable optimizations, march=native
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -march=native")

# Add uSockets include directory
include_directories(${CMAKE_SOURCE_DIR}/libs/uWebSockets/uSockets/src)

# Define the parser executable
add_executable(${PROJECT_NAME}parser parser.cpp)
target_compile_options(${PROJECT_NAME}parser PRIVATE -flto)
target_link_options(${PROJECT_NAME}parser PRIVATE -flto)

# Compile tests with uSockets
add_executable(${PROJECT_NAME}broadcast_test broadcast_test.c)
target_compile_definitions(${PROJECT_NAME}broadcast_test PRIVATE -DLIBUS_USE_OPENSSL)
target_link_libraries(${PROJECT_NAME}broadcast_test ssl crypto ${LDFLAGS_STRIPPED_UWS} uSockets)
target_compile_options(${PROJECT_NAME}broadcast_test PRIVATE -flto)
target_link_options(${PROJECT_NAME}broadcast_test PRIVATE -flto)

add_executable(${PROJECT_NAME}load_test load_test.c)
target_compile_definitions(${PROJECT_NAME}load_test PRIVATE -DLIBUS_USE_OPENSSL)
target_link_libraries(${PROJECT_NAME}load_test ssl crypto ${LDFLAGS_STRIPPED_UWS} uSockets)
target_compile_options(${PROJECT_NAME}load_test PRIVATE -flto)
target_link_options(${PROJECT_NAME}load_test PRIVATE -flto)

add_executable(${PROJECT_NAME}scale_test scale_test.c)
target_compile_definitions(${PROJECT_NAME}scale_test PRIVATE -DLIBUS_USE_OPENSSL)
target_link_libraries(${PROJECT_NAME}scale_test ssl crypto ${LDFLAGS_STRIPPED_UWS} uSockets)
target_compile_options(${PROJECT_NAME}scale_test PRIVATE -flto)
target_link_options(${PROJECT_NAME}scale_test PRIVATE -flto)
24 changes: 23 additions & 1 deletion benchmarks/load_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,30 @@
#define htole64(x) OSSwapHostToLittleInt64(x)
#define be64toh(x) OSSwapBigToHostInt64(x)
#define le64toh(x) OSSwapLittleToHostInt64(x)
#else

#elif defined(_WIN32)
#include <windows.h>

#define htobe16(x) _byteswap_ushort(x)
#define htole16(x) (x)
#define be16toh(x) _byteswap_ushort(x)
#define le16toh(x) (x)

#define htobe32(x) _byteswap_ulong(x)
#define htole32(x) (x)
#define be32toh(x) _byteswap_ulong(x)
#define le32toh(x) (x)

#define htobe64(x) _byteswap_uint64(x)
#define htole64(x) (x)
#define be64toh(x) _byteswap_uint64(x)
#define le64toh(x) (x)

#elif defined(__linux__)
#include <endian.h>

#else
#error "Platform not supported"
#endif


Expand Down
22 changes: 22 additions & 0 deletions libEpollBenchmarker/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Set the CMake minimum version
cmake_minimum_required(VERSION 3.10)

# Project name
project(uWSLibEpollBenchmarker)
message(STATUS "Building ${PROJECT_NAME}")

# Set C++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Include directories
include_directories(../src ../uSockets/src)

# Linker flags for wrapped syscalls
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--wrap=recv,--wrap=bind,--wrap=listen,--wrap=send,--wrap=socket,--wrap=epoll_wait,--wrap=accept4,--wrap=epoll_ctl")

# Add the executable
add_executable(${PROJECT_NAME} ../examples/HelloWorld.cpp epoll_benchmarker.cpp)

# Link with uSockets library
target_link_libraries(${PROJECT_NAME} PRIVATE uSockets)
67 changes: 67 additions & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
cmake_minimum_required(VERSION 3.10)

# Project name and language
project(uWebSocketsTests)
message(STATUS "Building ${PROJECT_NAME}")

# Set the C++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Address sanitizer flag
set(SANITIZE_FLAGS "-fsanitize=address")

# Define targets names with ${PROJECT_NAME} prefix
set(Query ${PROJECT_NAME}Query)
set(ChunkedEncoding ${PROJECT_NAME}ChunkedEncoding)
set(TopicTree ${PROJECT_NAME}TopicTree)
set(HttpRouter ${PROJECT_NAME}HttpRouter)
set(BloomFilter ${PROJECT_NAME}BloomFilter)
set(ExtensionsNegotiator ${PROJECT_NAME}ExtensionsNegotiator)
set(HttpParser ${PROJECT_NAME}HttpParser)

# Define the executables and their sources
add_executable(${Query} Query.cpp)
add_executable(${ChunkedEncoding} ChunkedEncoding.cpp)
add_executable(${TopicTree} TopicTree.cpp)
add_executable(${HttpRouter} HttpRouter.cpp)
add_executable(${BloomFilter} BloomFilter.cpp)
add_executable(${ExtensionsNegotiator} ExtensionsNegotiator.cpp)
add_executable(${HttpParser} HttpParser.cpp)

# Add the address sanitizer flags to each target
target_compile_options(${Query} PRIVATE ${SANITIZE_FLAGS})
target_link_options(${Query} PRIVATE ${SANITIZE_FLAGS})

target_compile_options(${ChunkedEncoding} PRIVATE ${SANITIZE_FLAGS})
target_link_options(${ChunkedEncoding} PRIVATE ${SANITIZE_FLAGS})

target_compile_options(${TopicTree} PRIVATE ${SANITIZE_FLAGS})
target_link_options(${TopicTree} PRIVATE ${SANITIZE_FLAGS})

target_compile_options(${HttpRouter} PRIVATE ${SANITIZE_FLAGS})
target_link_options(${HttpRouter} PRIVATE ${SANITIZE_FLAGS})

target_compile_options(${BloomFilter} PRIVATE ${SANITIZE_FLAGS})
target_link_options(${BloomFilter} PRIVATE ${SANITIZE_FLAGS})

target_compile_options(${ExtensionsNegotiator} PRIVATE ${SANITIZE_FLAGS})
target_link_options(${ExtensionsNegotiator} PRIVATE ${SANITIZE_FLAGS})

target_compile_options(${HttpParser} PRIVATE ${SANITIZE_FLAGS})
target_link_options(${HttpParser} PRIVATE ${SANITIZE_FLAGS})

# Performance target
add_custom_target(${PROJECT_NAME}performance
COMMAND ${CMAKE_COMMAND} -E env CXXFLAGS=-O3 ${CMAKE_COMMAND} --build . --target HttpRouter
COMMAND ./HttpRouter
)

# Smoke test target
add_custom_target(${PROJECT_NAME}smoke
COMMAND ../Crc32 &
COMMAND ${CMAKE_COMMAND} -E sleep 1
COMMAND ~/.deno/bin/deno run --allow-net smoke.mjs
COMMAND node smoke.mjs
COMMAND pkill Crc32
)
2 changes: 1 addition & 1 deletion uSockets
Submodule uSockets updated 1 files
+18 −19 CMakeLists.txt

0 comments on commit 6a4346a

Please sign in to comment.