summaryrefslogtreecommitdiff
path: root/cmake/ipcp/eth.cmake
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri@ouroboros.rocks>2025-12-23 11:59:45 +0100
committerSander Vrijders <sander@ouroboros.rocks>2026-01-07 10:00:06 +0100
commit48c294105f5123dc876fbad199ec1e0166d82a18 (patch)
treec49ce8ac75a7d63c10ea1ff960eeff750c680a8e /cmake/ipcp/eth.cmake
parent145be13e8c18fcb39476d8f65fed23d82320f22f (diff)
downloadouroboros-48c294105f5123dc876fbad199ec1e0166d82a18.tar.gz
ouroboros-48c294105f5123dc876fbad199ec1e0166d82a18.zip
build: Refactor CMake modules
This moves the CMake build logic out of the source tree and splits it up into a more modular form. The tests now have a CMakeLists.txt file in their respective source directory. Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks> Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
Diffstat (limited to 'cmake/ipcp/eth.cmake')
-rw-r--r--cmake/ipcp/eth.cmake40
1 files changed, 40 insertions, 0 deletions
diff --git a/cmake/ipcp/eth.cmake b/cmake/ipcp/eth.cmake
new file mode 100644
index 00000000..0d37bf9b
--- /dev/null
+++ b/cmake/ipcp/eth.cmake
@@ -0,0 +1,40 @@
+set(ETH_SOURCE_DIR "${IPCP_SOURCE_DIR}/eth")
+
+set(IPCP_ETH_LLC_TARGET ipcpd-eth-llc CACHE INTERNAL "")
+set(IPCP_ETH_DIX_TARGET ipcpd-eth-dix CACHE INTERNAL "")
+
+set(IPCP_ETH_RD_THR 1 CACHE STRING
+ "Number of reader threads in Ethernet IPCP")
+set(IPCP_ETH_WR_THR 1 CACHE STRING
+ "Number of writer threads in Ethernet IPCP")
+set(IPCP_ETH_QDISC_BYPASS false CACHE BOOL
+ "Bypass the Qdisc in the kernel when using raw sockets")
+set(IPCP_ETH_LO_MTU 1500 CACHE STRING
+ "Restrict Ethernet MTU over loopback interfaces")
+set(IPCP_ETH_MPL 100 CACHE STRING
+ "Default maximum packet lifetime for the Ethernet IPCPs, in ms")
+
+if (HAVE_RAW_SOCKETS OR HAVE_BPF OR HAVE_NETMAP)
+ set(HAVE_ETH TRUE)
+else ()
+ unset(HAVE_ETH)
+endif ()
+
+if (HAVE_ETH)
+ add_executable(${IPCP_ETH_LLC_TARGET} "${ETH_SOURCE_DIR}/llc.c" ${IPCP_SOURCES})
+ add_executable(${IPCP_ETH_DIX_TARGET} "${ETH_SOURCE_DIR}/dix.c" ${IPCP_SOURCES})
+
+ foreach(target ${IPCP_ETH_LLC_TARGET} ${IPCP_ETH_DIX_TARGET})
+ target_include_directories(${target} PRIVATE ${IPCP_INCLUDE_DIRS})
+ if (HAVE_BPF AND NOT APPLE)
+ target_include_directories(${target} PRIVATE ${BPF_C_INCLUDE_DIR})
+ endif ()
+ if (HAVE_NETMAP AND NOT APPLE)
+ set_target_properties(${target} PROPERTIES COMPILE_FLAGS "${CMAKE_C_FLAGS} -std=c99")
+ target_include_directories(${target} PRIVATE ${NETMAP_C_INCLUDE_DIR})
+ endif ()
+ target_link_libraries(${target} PUBLIC ouroboros-dev)
+ endforeach()
+
+ install(TARGETS ${IPCP_ETH_LLC_TARGET} ${IPCP_ETH_DIX_TARGET} RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR})
+endif ()