Separate LLVM binding library
All checks were successful
All checks were successful
This commit is contained in:
parent
dfe5ea43cd
commit
9138454892
@ -18,19 +18,17 @@ add_executable(bb
|
|||||||
src/compiler.cpp
|
src/compiler.cpp
|
||||||
src/parser.cpp
|
src/parser.cpp
|
||||||
src/emitter.cpp
|
src/emitter.cpp
|
||||||
src/llvm.cpp
|
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(c_abi tests/c_abi.c)
|
add_library(c_abi tests/c_abi.c)
|
||||||
|
add_library(llvm_bindings src/llvm.cpp)
|
||||||
|
|
||||||
target_include_directories(bb PUBLIC src)
|
include_directories(src)
|
||||||
target_compile_definitions(bb PUBLIC
|
add_compile_definitions(
|
||||||
$<$<CONFIG:Debug>:BB_DEBUG=1>
|
$<$<CONFIG:Debug>:BB_DEBUG=1>
|
||||||
$<$<NOT:$<CONFIG:Debug>>:BB_DEBUG=0>
|
$<$<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_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_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)
|
# 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_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)
|
# 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_COMMON}
|
||||||
# ${LLD_COFF}
|
# ${LLD_COFF}
|
||||||
${LLD_ELF}
|
${LLD_ELF}
|
||||||
@ -47,4 +46,7 @@ target_link_libraries(bb PUBLIC
|
|||||||
# ${LLD_WASM}
|
# ${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}")
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#include <compiler.hpp>
|
#include <compiler.hpp>
|
||||||
|
|
||||||
|
global_variable Slice<char* const> environment;
|
||||||
|
|
||||||
fn void compile(Arena* arena, Options options)
|
fn void compile(Arena* arena, Options options)
|
||||||
{
|
{
|
||||||
Module module;
|
Module module;
|
||||||
@ -174,13 +176,17 @@ fn String compile_file(Arena* arena, Compile options)
|
|||||||
};
|
};
|
||||||
Slice<String> object_slice = array_to_slice(objects);
|
Slice<String> object_slice = array_to_slice(objects);
|
||||||
|
|
||||||
String libraries[] = {
|
String c_abi_libraries[] = {
|
||||||
string_literal("build/libc_abi.a"),
|
string_literal("build/libc_abi.a"),
|
||||||
};
|
};
|
||||||
Slice<String> library_slice = {};
|
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, {
|
compile(arena, {
|
||||||
@ -321,8 +327,9 @@ global_variable String names[] =
|
|||||||
string_literal("basic_struct_passing"),
|
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);
|
Arena* arena = arena_initialize_default(16 * mb);
|
||||||
|
|
||||||
if (arguments.length < 2)
|
if (arguments.length < 2)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user