From d49e7258467514c4937e3181702591b3f8de6ffb Mon Sep 17 00:00:00 2001 From: Max <51083570+DRdrProfessor@users.noreply.github.com> Date: Sun, 3 Dec 2023 16:04:09 +0100 Subject: [PATCH] refactor(shared): Library order changed Changed library linking order: cli (executable) <= runtime(static) <= based (shared) --- include/CMakeLists.txt | 3 +++ {src/based/include => include}/base.h | 5 +++-- include/based/CMakeLists.txt | 1 + include/based/env/CMakeLists.txt | 4 ++++ {src/based/include => include/based}/env/envb.h | 0 src/based/CMakeLists.txt | 5 +++-- src/based/base.c | 7 +++++++ src/based/include/CMakeLists.txt | 6 +++--- src/based/include/env/CMakeLists.txt | 3 --- src/cli/CMakeLists.txt | 2 +- src/runtime/CMakeLists.txt | 2 +- src/runtime/system/unix/crt.S | 2 +- src/runtime/system/unix/unixrt.c | 5 +++-- 13 files changed, 30 insertions(+), 15 deletions(-) rename {src/based/include => include}/base.h (85%) create mode 100755 include/based/env/CMakeLists.txt rename {src/based/include => include/based}/env/envb.h (100%) delete mode 100755 src/based/include/env/CMakeLists.txt diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index dea8318..912aa19 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -1,3 +1,6 @@ # Public include +target_sources(based PUBLIC + "base.h") + add_subdirectory(based) \ No newline at end of file diff --git a/src/based/include/base.h b/include/base.h similarity index 85% rename from src/based/include/base.h rename to include/base.h index d676594..1ce34c1 100755 --- a/src/based/include/base.h +++ b/include/base.h @@ -8,8 +8,9 @@ #ifndef BASE_H #define BASE_H -#include "env/envb.h" - +#include "based/env/envb.h" +extern int main(int argc, char** argv, char** envp); +extern int rt_initialize_lib(); // ======================================== // Definitions // ======================================== diff --git a/include/based/CMakeLists.txt b/include/based/CMakeLists.txt index 7c6a618..1fa1857 100644 --- a/include/based/CMakeLists.txt +++ b/include/based/CMakeLists.txt @@ -1,2 +1,3 @@ # Public based include +add_subdirectory(env) \ No newline at end of file diff --git a/include/based/env/CMakeLists.txt b/include/based/env/CMakeLists.txt new file mode 100755 index 0000000..82df6ea --- /dev/null +++ b/include/based/env/CMakeLists.txt @@ -0,0 +1,4 @@ +# based => include => env + +target_sources(based PUBLIC + "envb.h") \ No newline at end of file diff --git a/src/based/include/env/envb.h b/include/based/env/envb.h similarity index 100% rename from src/based/include/env/envb.h rename to include/based/env/envb.h diff --git a/src/based/CMakeLists.txt b/src/based/CMakeLists.txt index e6fb62b..848aff5 100755 --- a/src/based/CMakeLists.txt +++ b/src/based/CMakeLists.txt @@ -3,7 +3,7 @@ add_library(based SHARED "base.c") target_compile_features(based PRIVATE c_std_99) -target_link_libraries(based PUBLIC runtime) +#target_link_libraries(based PUBLIC runtime) target_include_directories(based PUBLIC @@ -13,5 +13,6 @@ target_include_directories(based ${CMAKE_SOURCE_DIR}/src) -add_subdirectory(include) +#add_subdirectory(include) +#add_subdirectory(rt) add_subdirectory(system) \ No newline at end of file diff --git a/src/based/base.c b/src/based/base.c index 4a44aeb..87e3f20 100755 --- a/src/based/base.c +++ b/src/based/base.c @@ -6,3 +6,10 @@ EXPORT int test() return 69; } +EXPORT int rt_initialize_lib() +{ + // Setup + int result = main(0, NULL, NULL); + // Exiting + return result; +} \ No newline at end of file diff --git a/src/based/include/CMakeLists.txt b/src/based/include/CMakeLists.txt index c4ce907..1889998 100755 --- a/src/based/include/CMakeLists.txt +++ b/src/based/include/CMakeLists.txt @@ -1,6 +1,6 @@ # based => include -target_sources(based PUBLIC - "base.h") +#target_sources(based PUBLIC +# "base.h") -add_subdirectory(env) \ No newline at end of file +#add_subdirectory(env) \ No newline at end of file diff --git a/src/based/include/env/CMakeLists.txt b/src/based/include/env/CMakeLists.txt deleted file mode 100755 index a7ae083..0000000 --- a/src/based/include/env/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -# based => include => env - -target_sources(based PRIVATE "envb.h") \ No newline at end of file diff --git a/src/cli/CMakeLists.txt b/src/cli/CMakeLists.txt index 4659da6..297a848 100755 --- a/src/cli/CMakeLists.txt +++ b/src/cli/CMakeLists.txt @@ -2,4 +2,4 @@ add_executable(bcli "main.c") -target_link_libraries(bcli PUBLIC based) \ No newline at end of file +target_link_libraries(bcli PUBLIC runtime) \ No newline at end of file diff --git a/src/runtime/CMakeLists.txt b/src/runtime/CMakeLists.txt index 9038b01..0e6e4db 100755 --- a/src/runtime/CMakeLists.txt +++ b/src/runtime/CMakeLists.txt @@ -4,7 +4,7 @@ add_library(runtime STATIC "rtinternal.h" "runtime.c") -#target_link_libraries(runtime PUBLIC based) +target_link_libraries(runtime PUBLIC based) target_include_directories(runtime PUBLIC diff --git a/src/runtime/system/unix/crt.S b/src/runtime/system/unix/crt.S index 634fbf1..c46c1b8 100755 --- a/src/runtime/system/unix/crt.S +++ b/src/runtime/system/unix/crt.S @@ -13,7 +13,7 @@ _start: lea 0x8(%rsp), %rsi // Get the argv address lea 16(%rsp,%rdi,8), %rdx // Get the envp address - //call rt_unix_start // Start c function + call rt_unix_start // Start c function // Use exit_group syscall movq $231, %rax movq $0, %rdi diff --git a/src/runtime/system/unix/unixrt.c b/src/runtime/system/unix/unixrt.c index 90351f8..be41969 100755 --- a/src/runtime/system/unix/unixrt.c +++ b/src/runtime/system/unix/unixrt.c @@ -1,6 +1,7 @@ -//#include "base.h" +#include "base.h" void rt_unix_start(int argc, char** argv, char** envp) { - //TODO: Callback => main & syscall to exit group + int init_result = rt_initialize_lib(); + // unix exit } \ No newline at end of file