Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ jobs:
if: ${{ matrix.generator == 'Ninja' }}
run: sudo apt install ninja-build

- name: Install Capstone
run: sudo apt install libcapstone-dev

- name: Install Clang 21
if: ${{ matrix.compiler == 'clang++-21' }}
run: |
Expand Down
10 changes: 10 additions & 0 deletions cmake/dependencies.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -83,3 +83,13 @@ CPMAddPackage(
set(BUILD_TESTING
${BUILD_TESTING_SAVE}
CACHE BOOL "" FORCE)

# ir
CPMAddPackage(
NAME ir
GITHUB_REPOSITORY dstogov/ir
GIT_TAG e9ae5bd2927c3b15dc45de8736aef4b54cc604e0
EXCLUDE_FROM_ALL True
SYSTEM True
DOWNLOAD_ONLY True
)
1 change: 1 addition & 0 deletions src/jit/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@ add_subdirectory(lightning)
add_subdirectory(llvm)
add_subdirectory(asmjit)
add_subdirectory(mir)
add_subdirectory(ir)
add_subdirectory(factory)
add_subdirectory(tpde)
3 changes: 2 additions & 1 deletion src/jit/factory/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ target_link_libraries(
PROT::JIT::llvmbased
PROT::JIT::lightning
PROT::JIT::mir
PROT::JIT::tpde)
PROT::JIT::tpde
PROT::JIT::ir)

target_include_directories(prot_jit_factory PUBLIC include)

Expand Down
4 changes: 3 additions & 1 deletion src/jit/factory/factory.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

#include "prot/jit/asmjit.hh"
#include "prot/jit/base.hh"
#include "prot/jit/ir.hh"
#include "prot/jit/lightning.hh"
#include "prot/jit/llvmbasedjit.hh"
#include "prot/jit/mir.hh"
Expand All @@ -21,7 +22,8 @@ const std::unordered_map<std::string_view,
{"llvm", []() { return makeLLVMBasedJIT(); }},
{"lightning", []() { return makeLightning(); }},
{"mir", []() { return makeMirJit(); }},
{"tpde", []() { return makeTPDE(); }}};
{"tpde", []() { return makeTPDE(); }},
{"ir", []() { return makeIrJit(); }}};

std::vector<std::string_view> JitFactory::backends() {
std::vector<std::string_view> res(kFactories.size());
Expand Down
38 changes: 38 additions & 0 deletions src/jit/ir/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
find_program(MAKE_EXECUTABLE NAMES make REQUIRED)

set(IR_INSTALL_DIR ${ir_BINARY_DIR})
set(IR_LIBRARY
"${IR_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}ir${CMAKE_STATIC_LIBRARY_SUFFIX}"
)

ExternalProject_Add(
ir_makefile_build
SOURCE_DIR ${ir_SOURCE_DIR}
UPDATE_DISCONNECTED TRUE # Do not check git updates
BUILD_IN_SOURCE 1
CONFIGURE_COMMAND ""
BUILD_COMMAND ${MAKE_EXECUTABLE} CC=${CMAKE_C_COMPILER} -j
INSTALL_COMMAND ${MAKE_EXECUTABLE} PREFIX=${IR_INSTALL_DIR} install
LOG_CONFIGURE False
LOG_BUILD True
LOG_MERGED_STDOUTERR False
LOG_OUTPUT_ON_FAILURE True
BUILD_BYPRODUCTS ${IR_LIBRARY})

set(IR_INCLUDE_DIR "${IR_INSTALL_DIR}/include")
make_directory(${IR_INCLUDE_DIR})

add_library(ir_iface STATIC IMPORTED)
target_include_directories(ir_iface SYSTEM INTERFACE ${IR_INCLUDE_DIR})
set_target_properties(ir_iface PROPERTIES IMPORTED_LOCATION ${IR_LIBRARY})
add_dependencies(ir_iface ir_makefile_build)
set_target_properties(ir_iface PROPERTIES EXCLUDE_FROM_ALL True)

add_library(prot_jit_ir STATIC ir.cc)
target_link_libraries(
prot_jit_ir
PUBLIC PROT::isa PROT::exec_engine
PRIVATE PROT::defaults ir_iface PROT::JIT::base)
target_include_directories(prot_jit_ir PUBLIC include)

add_library(PROT::JIT::ir ALIAS prot_jit_ir)
12 changes: 12 additions & 0 deletions src/jit/ir/include/prot/jit/ir.hh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#ifndef PROT_JIT_IR_HH_INCLUDED
#define PROT_JIT_IR_HH_INCLUDED

#include <memory>

#include "prot/jit/base.hh"

namespace prot::engine {
std::unique_ptr<Translator> makeIrJit();
}

#endif // PROT_JIT_IR_HH_INCLUDED
Loading
Loading