hunting/external/httpserver.h-master/src/CMakeLists.txt
2024-04-02 10:45:45 +08:00

78 lines
2.2 KiB
CMake

add_library(
httpsrv
api.c connection.c io_events.c ${CMAKE_CURRENT_BINARY_DIR}/parser.c
read_socket.c request_util.c respond.c server.c write_socket.c
)
set_property(TARGET httpsrv PROPERTY C_STANDARD 99)
target_compile_options(
httpsrv
PRIVATE -Wall -Wextra -Werror
# $<$<CONFIG:DEBUG>:-fsanitize=address -fsanitize=undefined -fno-sanitize-recover=all>
)
# target_link_options(
# httpsrv
# PUBLIC $<$<CONFIG:DEBUG>:-fsanitize=address -fsanitize=undefined -fno-sanitize-recover=all>
# )
set_source_files_properties(
${CMAKE_CURRENT_BINARY_DIR}/parser.c
PROPERTIES COMPILE_FLAGS -Wno-unused-variable
)
find_program(M4 m4)
if(NOT M4)
message(FATAL_ERROR "m4 not found. Please install before continuing.")
endif()
add_custom_target(
httpserver.h
ALL
COMMAND ${M4} -I${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/httpserver.m4 > ${CMAKE_CURRENT_BINARY_DIR}/httpserver.h
DEPENDS api.h api.c buffer_util.h common.h connection.h connection.c
io_events.h io_events.c parser.h ${CMAKE_CURRENT_BINARY_DIR}/parser.c
read_socket.h read_socket.c request_util.h request_util.c respond.h respond.c
server.h server.c write_socket.h write_socket.c httpserver.m4
)
find_program(RAGEL ragel)
if(NOT RAGEL)
message(FATAL_ERROR "ragel not found. Please install before continuing.")
endif()
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/parser.c
COMMAND ${RAGEL} ${CMAKE_CURRENT_SOURCE_DIR}/parser.rl -o ${CMAKE_CURRENT_BINARY_DIR}/parser.c
DEPENDS parser.rl
)
target_include_directories(
httpsrv
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
)
include(CheckFunctionExists)
check_function_exists(epoll_wait EPOLL)
check_function_exists(kqueue KQUEUE)
# target_compile_definitions(httpsrv PRIVATE $<$<CONFIG:DEBUG>:DEBUG>)
if(KQUEUE)
target_compile_definitions(httpsrv PRIVATE KQUEUE)
endif()
if(EPOLL)
target_compile_definitions(httpsrv PRIVATE EPOLL)
endif()
message("${PLATFORM_PATH}/cmake-shell${SUBMODULE_PATH_OF_IPC_SDK}/httpserver.h-master/src/libhttpsrv.a")
add_custom_command(
TARGET httpsrv
POST_BUILD
COMMAND cp ${PLATFORM_PATH}/cmake-shell${SUBMODULE_PATH_OF_IPC_SDK}/external/httpserver.h-master/src/libhttpsrv.a ${EXTERNAL_LIBS_OUTPUT_PATH}
WORKING_DIRECTORY ${PLATFORM_PATH}/cmake-shell/
)