Skip to content

Commit 7679d31

Browse files
CarlWachtermkroening
authored andcommitted
feat: remove lwIP and use kernel network stack
1 parent 4d7674b commit 7679d31

File tree

10 files changed

+25
-294
lines changed

10 files changed

+25
-294
lines changed

.gitmodules

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
11
[submodule "librs"]
22
path = librs
33
url = https://github.com/hermit-os/kernel.git
4-
[submodule "lwip"]
5-
path = lwip
6-
url = https://github.com/hermit-os/LwIP.git

cmake/HermitCore-librs.cmake

Lines changed: 21 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -4,105 +4,47 @@ add_custom_target(hermit_rs
44
COMMAND
55
cargo run --package=xtask --target-dir ${CMAKE_BINARY_DIR}/hermit_rs --
66
build --arch ${HERMIT_ARCH} --target-dir ${CMAKE_BINARY_DIR}/hermit_rs ${CARGO_BUILDTYPE_PARAMETER}
7-
--no-default-features --features pci,smp,acpi,newlib
7+
--no-default-features --features pci,smp,acpi,newlib,tcp,dhcpv4
88
WORKING_DIRECTORY
99
${CMAKE_CURRENT_LIST_DIR}/../librs)
1010

11-
set(LWIP_SRC lwip/src)
12-
add_kernel_module_sources("lwip" "${LWIP_SRC}/api/*.c")
13-
add_kernel_module_sources("lwip" "${LWIP_SRC}/arch/*.c")
14-
add_kernel_module_sources("lwip" "${LWIP_SRC}/core/*.c")
15-
add_kernel_module_sources("lwip" "${LWIP_SRC}/core/ipv4/*.c")
16-
add_kernel_module_sources("lwip" "${LWIP_SRC}/core/ipv6/*.c")
17-
add_kernel_module_sources("lwip" "${LWIP_SRC}/netif/*.c")
18-
19-
get_kernel_modules(KERNEL_MODULES)
20-
foreach(MODULE ${KERNEL_MODULES})
21-
get_kernel_module_sources(SOURCES ${MODULE})
22-
23-
# maintain list of all objects that will end up in libhermit.a
24-
list(APPEND KERNEL_OBJECTS $<TARGET_OBJECTS:${MODULE}>)
25-
26-
add_library(${MODULE} OBJECT ${SOURCES})
27-
28-
# this is kernel code
29-
target_compile_definitions(${MODULE}
30-
PRIVATE -D__KERNEL__)
31-
32-
target_compile_definitions(${MODULE}
33-
PRIVATE -DMAX_ARGC_ENVC=${MAX_ARGC_ENVC})
34-
35-
target_compile_options(${MODULE}
36-
PRIVATE ${HERMIT_KERNEL_FLAGS})
37-
38-
target_include_directories(${MODULE}
39-
PUBLIC ${HERMIT_KERNEL_INCLUDES})
40-
41-
# suppress all LwIP compiler warnings. Not our code, so we cannot fix
42-
if("${MODULE}" STREQUAL "lwip")
43-
target_compile_options(${MODULE}
44-
PRIVATE -w)
45-
endif()
46-
endforeach()
47-
48-
# Build all kernel modules into a single static library.
49-
add_library(hermit-bootstrap STATIC ${KERNEL_OBJECTS})
50-
set_target_properties(hermit-bootstrap PROPERTIES LINKER_LANGUAGE C)
51-
add_dependencies(hermit-bootstrap hermit_rs)
52-
set_target_properties(hermit-bootstrap PROPERTIES ARCHIVE_OUTPUT_NAME hermit)
53-
54-
# Post-process the static library.
55-
add_custom_command(
56-
TARGET hermit-bootstrap POST_BUILD
57-
58-
# Merge the Rust library into this static library.
59-
COMMAND
60-
${CMAKE_AR} x ${HERMIT_RS}
61-
COMMAND
62-
${CMAKE_AR} rcs $<TARGET_FILE:hermit-bootstrap> *.o
63-
COMMAND
64-
${CMAKE_COMMAND} -E remove *.o
65-
66-
# Convert the combined library to osabi "Standalone"
67-
COMMAND
68-
${CMAKE_ELFEDIT} --output-osabi Standalone $<TARGET_FILE:hermit-bootstrap>
11+
# Require hermit_rs to be built for hermit
12+
add_custom_target(hermit
13+
DEPENDS hermit_rs
6914

7015
# Copy libhermit.a into local prefix directory so that all subsequent
7116
# targets can link against the freshly built version (as opposed to
7217
# linking against the one supplied by the toolchain)
18+
7319
COMMAND
7420
${CMAKE_COMMAND} -E make_directory ${LOCAL_PREFIX_ARCH_LIB_DIR}
7521
COMMAND
76-
${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:hermit-bootstrap> ${LOCAL_PREFIX_ARCH_LIB_DIR}/
22+
${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/hermit_rs/${HERMIT_ARCH}/release/libhermit.a ${LOCAL_PREFIX_ARCH_LIB_DIR}/
7723

7824
# and also copy headers into local prefix
7925
COMMAND
8026
${CMAKE_COMMAND} -E make_directory ${LOCAL_PREFIX_ARCH_INCLUDE_DIR}/hermit
8127
COMMAND
8228
${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/include/hermit/*.h ${LOCAL_PREFIX_ARCH_INCLUDE_DIR}/hermit/)
8329

84-
# Deploy libhermit.a and headers for package creation
85-
install(TARGETS hermit-bootstrap
86-
DESTINATION ${HERMIT_ARCH}-hermit/lib
87-
COMPONENT bootstrap)
88-
89-
install(DIRECTORY include/hermit
90-
DESTINATION ${HERMIT_ARCH}-hermit/include/
91-
COMPONENT bootstrap
92-
FILES_MATCHING PATTERN *.h)
93-
9430
# Provide custom target to only install libhermit without its runtimes which is
9531
# needed during the compilation of the cross toolchain
96-
add_custom_target(hermit-bootstrap-install
32+
add_custom_target(hermit_rs-install
9733
DEPENDS
98-
hermit-bootstrap
34+
hermit_rs
9935
COMMAND
10036
${CMAKE_COMMAND}
101-
-DCMAKE_INSTALL_COMPONENT=bootstrap
37+
-DCMAKE_INSTALL_COMPONENT=hermit_rs
10238
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
103-
-P cmake_install.cmake)
104-
105-
# The target 'hermit' includes the HermitCore kernel and several runtimes.
106-
# Applications should depend on this target if they link against HermitCore.
107-
add_custom_target(hermit
108-
DEPENDS hermit-bootstrap)
39+
-P cmake_install.cmake
40+
)
41+
42+
# Install libhermit.a and headers
43+
install(FILES ${HERMIT_RS}
44+
DESTINATION ${HERMIT_ARCH}-hermit/lib
45+
COMPONENT bootstrap)
46+
47+
install(DIRECTORY include/hermit
48+
DESTINATION ${HERMIT_ARCH}-hermit/include/
49+
COMPONENT bootstrap
50+
FILES_MATCHING PATTERN *.h)

cmake/HermitCore.cmake

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,7 @@ endif()
5050
set(HERMIT_KERNEL_INCLUDES
5151
${CMAKE_BINARY_DIR}/include
5252
${HERMIT_ROOT}/include
53-
${HERMIT_ROOT}/include/hermit/${HERMIT_ARCH}
54-
${HERMIT_ROOT}/lwip/src/include)
53+
${HERMIT_ROOT}/include/hermit/${HERMIT_ARCH})
5554

5655
# HACK: when CMake detects compilers it taints CMAKE_INSTALL_PREFIX, so in
5756
# order to rely on that variable (we redefine it), enable all languages

include/hermit/mailbox.h

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

include/hermit/mailbox_types.h

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

include/hermit/syscall.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,6 @@ int sys_close(int fd);
107107
void sys_acquire_putchar_lock(void);
108108
void sys_putchar(const unsigned char character);
109109
void sys_release_putchar_lock(void);
110-
int sys_lwip_get_errno();
111-
void sys_lwip_register_tcpip_task(tid_t id);
112-
void sys_lwip_set_errno(int errno);
113110
void sys_usleep(unsigned long usecs);
114111
int sys_nanosleep(const HermitTimespec* rqtp, HermitTimespec* rmtp);
115112
void sys_msleep(unsigned int ms);

include/netinet/tcp.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@
1111
#ifndef __NETINET_TCP_H__
1212
#define __NETINET_TCP_H__
1313

14-
#include <lwip/tcp.h>
14+
#include <tcp.h>
1515

1616
#endif /* __NETINET_TCP_H__ */

librs

Submodule librs updated 186 files

lwip

Lines changed: 0 additions & 1 deletion
This file was deleted.

usr/benchmarks/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ target_link_libraries(basic pthread)
99

1010
add_executable(hg hg.c hist.c rdtsc.c run.c init.c opt.c report.c setup.c)
1111

12-
add_executable(netio netio.c)
12+
# add_executable(netio netio.c) # temporarily removed due to lack of select() support
1313

1414
add_executable(stream stream.c)
1515
target_compile_options(stream PRIVATE -fopenmp)

0 commit comments

Comments
 (0)