Separate LLVM binding library
This commit is contained in:
parent
dfe5ea43cd
commit
6b89fb9c49
@ -12,25 +12,23 @@ project(bb)
|
||||
find_package(LLVM REQUIRED CONFIG)
|
||||
find_package(LLD REQUIRED CONFIG)
|
||||
|
||||
add_executable(bb
|
||||
add_executable(bloat_buster
|
||||
src/lib.cpp
|
||||
src/entry_point.cpp
|
||||
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(bloat_buster 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}")
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user