Skip to content
Open
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
8 changes: 4 additions & 4 deletions .github/workflows/run-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,14 @@ jobs:
run: ninja
working-directory: build

- name: Run unit tests
run: ninja check
working-directory: build

- name: Check rules
run: ninja check-rules
working-directory: build

- name: Run unit tests
run: ninja check
working-directory: build

- name: Check benchmarks (don't run)
run: ninja check-benchmarks
working-directory: build
Expand Down
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,5 @@ tmp
*.LOCAL.*
*.REMOTE.*

# Integration tests
tests/cpp2rust-tests/
# Generated by cpp-rule-preprocessor at build time.
rules/*/ir_src.json
29 changes: 25 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -135,20 +135,41 @@ add_custom_target("check"
DEPENDS check-libcc2rs check-unit
)

add_custom_target("check-rules"
COMMAND find ${PROJECT_SOURCE_DIR}/rules -name "ir*.json" -delete
file(GLOB rule_src_files ${PROJECT_SOURCE_DIR}/rules/*/src.cpp)
set(cpp_rules_ir_outputs)
foreach(_src IN LISTS rule_src_files)
get_filename_component(_rule_dir ${_src} DIRECTORY)
set(_out ${_rule_dir}/ir_src.json)
add_custom_command(
OUTPUT ${_out}
COMMAND $<TARGET_FILE:cpp-rule-preprocessor> --file ${_src}
DEPENDS ${_src} cpp-rule-preprocessor
VERBATIM
)
list(APPEND cpp_rules_ir_outputs ${_out})
endforeach()

add_custom_target("preprocess-cpp-rules" DEPENDS ${cpp_rules_ir_outputs})

add_custom_target("preprocess-rust-rules"
COMMAND find ${PROJECT_SOURCE_DIR}/rules -name "ir_unsafe.json" -delete
COMMAND find ${PROJECT_SOURCE_DIR}/rules -name "ir_refcount.json" -delete
COMMAND cargo build
COMMAND ${CMAKE_COMMAND} -E chdir ${PROJECT_SOURCE_DIR}/rule-preprocessor
${CMAKE_COMMAND} -E env
CARGO_TARGET_DIR=${PROJECT_SOURCE_DIR}/rule-preprocessor/target
cargo run
COMMAND ${CMAKE_COMMAND} -E chdir ${PROJECT_SOURCE_DIR}
git diff --exit-code -- rules/
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/rules"
DEPENDS install-rust-toolchain
USES_TERMINAL
)

add_custom_target("check-rules"
COMMAND ${CMAKE_COMMAND} -E chdir ${PROJECT_SOURCE_DIR}
git diff --exit-code -- rules/
DEPENDS preprocess-cpp-rules preprocess-rust-rules
)

add_custom_target("check-all"
DEPENDS check-libcc2rs check-rules check-unit check-benchmarks
)
35 changes: 23 additions & 12 deletions cpp2rust/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
file(GLOB_RECURSE SOURCES "*.cpp")
add_clang_executable(cpp2rust ${SOURCES})
file(GLOB_RECURSE CORE_SOURCES "*.cpp")
list(REMOVE_ITEM CORE_SOURCES
"${CMAKE_CURRENT_SOURCE_DIR}/cpp2rust.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/cpp_rule_preprocessor.cpp"
)

add_library(cpp2rust_core STATIC ${CORE_SOURCES})

target_link_libraries(cpp2rust PRIVATE
target_link_libraries(cpp2rust_core PUBLIC
clangAST
clangASTMatchers
clangBasic
Expand All @@ -10,22 +15,28 @@ target_link_libraries(cpp2rust PRIVATE
clangSerialization
clangTooling
)
target_include_directories(cpp2rust PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories(cpp2rust PUBLIC SYSTEM ${CLANG_INCLUDE_DIRS} ${LLVM_INCLUDE_DIRS})
target_compile_definitions(cpp2rust PUBLIC ${LLVM_DEFINITIONS})
target_compile_definitions(cpp2rust PUBLIC "-DCLANG_C_COMPILER=\"${CMAKE_C_COMPILER}\"")
target_compile_definitions(cpp2rust PUBLIC "-DCLANG_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\"")
target_compile_definitions(cpp2rust PUBLIC "-DCLANG_RESOURCE_DIR=\"${LLVM_LIBRARY_DIR}/clang/${LLVM_VERSION_MAJOR}\"")
target_compile_definitions(cpp2rust PUBLIC "-DCOMPAT_INCLUDE_DIR=\"${CMAKE_CURRENT_SOURCE_DIR}/compat\"")
target_include_directories(cpp2rust_core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories(cpp2rust_core SYSTEM PUBLIC ${CLANG_INCLUDE_DIRS} ${LLVM_INCLUDE_DIRS})
target_compile_definitions(cpp2rust_core PUBLIC ${LLVM_DEFINITIONS})
target_compile_definitions(cpp2rust_core PUBLIC "-DCLANG_C_COMPILER=\"${CMAKE_C_COMPILER}\"")
target_compile_definitions(cpp2rust_core PUBLIC "-DCLANG_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\"")
target_compile_definitions(cpp2rust_core PUBLIC "-DCLANG_RESOURCE_DIR=\"${LLVM_LIBRARY_DIR}/clang/${LLVM_VERSION_MAJOR}\"")
target_compile_definitions(cpp2rust_core PUBLIC "-DCOMPAT_INCLUDE_DIR=\"${CMAKE_CURRENT_SOURCE_DIR}/compat\"")

if (APPLE)
execute_process(
COMMAND xcrun --show-sdk-path
OUTPUT_VARIABLE MACOS_SDK_PATH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
target_compile_definitions(cpp2rust PUBLIC "-DMACOS_SDK_PATH=\"${MACOS_SDK_PATH}\"")
target_compile_definitions(cpp2rust_core PUBLIC "-DMACOS_SDK_PATH=\"${MACOS_SDK_PATH}\"")
endif()

llvm_map_components_to_libnames(llvm_libs support)
target_link_libraries(cpp2rust PRIVATE ${llvm_libs})
target_link_libraries(cpp2rust_core PUBLIC ${llvm_libs})

add_clang_executable(cpp2rust PARTIAL_SOURCES_INTENDED cpp2rust.cpp)
target_link_libraries(cpp2rust PRIVATE cpp2rust_core)

add_clang_executable(cpp-rule-preprocessor PARTIAL_SOURCES_INTENDED cpp_rule_preprocessor.cpp)
target_link_libraries(cpp-rule-preprocessor PRIVATE cpp2rust_core)
Loading
Loading