From 91384548920f9b9503e0ee54e3ad28ce01bcd1f6 Mon Sep 17 00:00:00 2001 From: David Gonzalez Martin Date: Wed, 28 May 2025 21:25:48 -0600 Subject: [PATCH] Separate LLVM binding library --- CMakeLists.txt | 16 +++++++++------- src/compiler.cpp | 15 +++++++++++---- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dfe795d..e65a14e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,19 +18,17 @@ add_executable(bb src/compiler.cpp src/parser.cpp src/emitter.cpp - src/llvm.cpp ) add_library(c_abi tests/c_abi.c) +add_library(llvm_bindings src/llvm.cpp) -target_include_directories(bb PUBLIC src) -target_compile_definitions(bb PUBLIC +include_directories(src) +add_compile_definitions( $<$:BB_DEBUG=1> $<$>:BB_DEBUG=0> ) -target_link_libraries(bb PUBLIC ${LLVM_AVAILABLE_LIBS}) - find_library(LLD_COMMON NAMES liblldCommon.dylib lldCommon.lib lldCommon.a liblldCommon.dll.a liblldCommon.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH) find_library(LLD_ELF NAMES liblldELF.dylib lldELF.lib lldELF.a liblldELF.dll.a liblldELF.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH) # find_library(LLD_COFF NAMES liblldCOFF.dylib lldCOFF.lib lldCOFF.a liblldCOFF.dll.a liblldCOFF.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH) @@ -38,7 +36,8 @@ find_library(LLD_ELF NAMES liblldELF.dylib lldELF.lib lldELF.a liblldELF.dll.a l # find_library(LLD_MINGW NAMES liblldMinGW.dylib lldMinGW.lib lldMinGW.a liblldMinGW.dll.a liblldMinGW.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH) # find_library(LLD_WASM NAMES liblldWasm.dylib lldWasm.lib lldWasm.a liblldWasm.dll.a liblldWasm.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH) -target_link_libraries(bb PUBLIC +target_link_libraries(llvm_bindings PUBLIC + ${LLVM_AVAILABLE_LIBS} ${LLD_COMMON} # ${LLD_COFF} ${LLD_ELF} @@ -47,4 +46,7 @@ target_link_libraries(bb PUBLIC # ${LLD_WASM} ) -target_compile_options(bb PRIVATE -Wall -Wextra -pedantic -Wpedantic -Werror -Wno-c99-extensions -Wno-unused-function -Wno-missing-designated-field-initializers -funsigned-char -fwrapv -fno-strict-aliasing) +target_link_libraries(bb PUBLIC llvm_bindings) + +add_compile_options(-Wall -Wextra -pedantic -Wpedantic -Werror -Wno-c99-extensions -Wno-unused-function -Wno-missing-designated-field-initializers -funsigned-char -fwrapv -fno-strict-aliasing) +add_compile_definitions(CMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}") diff --git a/src/compiler.cpp b/src/compiler.cpp index 028816c..a2c9ebb 100644 --- a/src/compiler.cpp +++ b/src/compiler.cpp @@ -1,5 +1,7 @@ #include +global_variable Slice environment; + fn void compile(Arena* arena, Options options) { Module module; @@ -174,13 +176,17 @@ fn String compile_file(Arena* arena, Compile options) }; Slice object_slice = array_to_slice(objects); - String libraries[] = { + String c_abi_libraries[] = { string_literal("build/libc_abi.a"), }; Slice library_slice = {}; - if (base_name.equal(string_literal("c_abi"))) + + if (is_compiler) { - library_slice = array_to_slice(libraries); + } + else if (base_name.equal(string_literal("c_abi"))) + { + library_slice = array_to_slice(c_abi_libraries); } compile(arena, { @@ -321,8 +327,9 @@ global_variable String names[] = string_literal("basic_struct_passing"), }; -void entry_point(Slice arguments, Slice environment) +void entry_point(Slice arguments, Slice envp) { + environment = envp; Arena* arena = arena_initialize_default(16 * mb); if (arguments.length < 2)