Separate LLVM binding library
All checks were successful
CI / ci (MinSizeRel, ubuntu-latest) (push) Successful in 1m10s
CI / ci (Release, ubuntu-latest) (push) Successful in 1m7s
CI / ci (RelWithDebInfo, ubuntu-latest) (push) Successful in 1m9s
CI / ci (Debug, ubuntu-latest) (push) Successful in 3m30s

This commit is contained in:
David Gonzalez Martin 2025-05-28 21:25:48 -06:00
parent dfe5ea43cd
commit 9138454892
2 changed files with 20 additions and 11 deletions

View File

@ -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(
$<$<CONFIG:Debug>:BB_DEBUG=1>
$<$<NOT:$<CONFIG:Debug>>: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}")

View File

@ -1,5 +1,7 @@
#include <compiler.hpp>
global_variable Slice<char* const> environment;
fn void compile(Arena* arena, Options options)
{
Module module;
@ -174,13 +176,17 @@ fn String compile_file(Arena* arena, Compile options)
};
Slice<String> object_slice = array_to_slice(objects);
String libraries[] = {
String c_abi_libraries[] = {
string_literal("build/libc_abi.a"),
};
Slice<String> 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<const char*> arguments, Slice<char* const> environment)
void entry_point(Slice<const char*> arguments, Slice<char* const> envp)
{
environment = envp;
Arena* arena = arena_initialize_default(16 * mb);
if (arguments.length < 2)