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
18 changes: 13 additions & 5 deletions .github/workflows/premerge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ on:
branches: [ "main" ]

env:
BUILD_TYPE: Release
CMAKE_PRESET: release

jobs:
build:
Expand All @@ -25,13 +25,21 @@ jobs:
sudo ./llvm.sh 20
sudo apt install libmlir-20-dev mlir-20-tools

- name: ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
create-symlink: true

- name: Configure CMake
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DENABLE_CACHE=OFF
run: cmake --preset ${{env.CMAKE_PRESET}}

- name: Build
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}
run: cmake --build --preset ${{env.CMAKE_PRESET}}

- name: Test
working-directory: ${{github.workspace}}/build
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --target test
run: |
ctest --preset ${{env.CMAKE_PRESET}} -E integration-tests
# only run the integration-tests with verbose so we can see the
# whole output which includes which python scripts passed
ctest --preset ${{env.CMAKE_PRESET}} -R integration-tests -V

1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
__pycache__/
build/
.cache/
3 changes: 2 additions & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ repos:
- repo: https://github.com/pre-commit/mirrors-clang-format
rev: 'v20.1.8'
hooks:
- id: clang-format
- id: clang-format
types_or: [c++, c]
4 changes: 1 addition & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,6 @@ if(NOT MATH_LIBRARY)
message(FATAL_ERROR "Could not find math library")
endif()

enable_testing()
add_subdirectory(src)
add_subdirectory(integration)

add_custom_target(test)
add_dependencies(test run-unittests integration-tests)
52 changes: 52 additions & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
{
"version": 6,
"configurePresets": [
{
"name": "debug",
"displayName": "Debug",
"generator": "Ninja",
"binaryDir": "build/debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CPM_SOURCE_CACHE": ".cache/CPM"
}
},
{
"name": "release",
"displayName": "Release",
"generator": "Ninja",
"binaryDir": "build/release",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CPM_SOURCE_CACHE": ".cache/CPM"
}
}
],
"buildPresets": [
{
"name": "debug",
"displayName": "Debug Build",
"configurePreset": "debug",
"configuration": "Debug"
},
{
"name": "release",
"displayName": "Release Build",
"configurePreset": "release",
"configuration": "Release"
}
],
"testPresets": [
{
"name": "debug",
"displayName": "Test all in Debug mode",
"configurePreset": "debug"
},
{
"name": "release",
"displayName": "Test all in Release mode",
"configurePreset": "release"
}
]

}
40 changes: 18 additions & 22 deletions integration/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,25 +1,21 @@
include(GoogleTest)

add_executable(integration-tests_ program.cpp ../src/testing/main.cpp)
target_link_libraries(integration-tests_ PRIVATE python-cpp gtest gtest_main cxxopts project_options project_warnings tsl::ordered_map)
# gtest_add_tests(TARGET integration-tests_)
# gtest_discover_tests(integration-tests_)

add_test(
NAME integration-tests
COMMAND ${PROJECT_SOURCE_DIR}/integration/run_integration_tests.sh $<TARGET_FILE:python>
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/integration
)

# Ensure the test only runs after the required targets are built
set_tests_properties(integration-tests PROPERTIES
FIXTURES_REQUIRED "python_built"
)

# cmake-format: off
add_custom_target(
integration-tests
COMMAND # $<TARGET_FILE:integration-tests_>
echo "------------------------"
&& echo "Running python scripts:"
&& echo "------------------------"
&& echo ""
&& $<TARGET_FILE:python> ${PROJECT_SOURCE_DIR}/integration/fibonacci/main.py --gc-frequency 1
&& $<TARGET_FILE:python> ${PROJECT_SOURCE_DIR}/integration/mandelbrot/mandelbrot.py --gc-frequency 1
&& ${PROJECT_SOURCE_DIR}/integration/run_python_tests.sh $<TARGET_FILE:python>
&& echo ""
&& echo "------------------------"
&& echo "Testing LLVM backend:"
&& echo "------------------------"
&& echo ""
&& ${PROJECT_SOURCE_DIR}/integration/run_llvm_python_tests.sh $<TARGET_FILE:python>
DEPENDS integration-tests_ python)
# cmake-format: on
# Add a setup test that depends on building python
add_test(NAME setup-python COMMAND ${CMAKE_COMMAND} -E echo "Python built")
set_tests_properties(setup-python PROPERTIES
FIXTURES_SETUP "python_built"
DEPENDS python # This may not work in all CMake versions
)
19 changes: 19 additions & 0 deletions integration/run_integration_tests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/bin/bash
set -e # Exit on any error

echo "------------------------"
echo "Running python scripts:"
echo "------------------------"
echo ""

"$1" fibonacci/main.py --gc-frequency 1
"$1" mandelbrot/mandelbrot.py --gc-frequency 1
./run_python_tests.sh "$1"

echo ""
echo "------------------------"
echo "Testing LLVM backend:"
echo "------------------------"
echo ""

./run_llvm_python_tests.sh "$1"
3 changes: 1 addition & 2 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -349,8 +349,7 @@ elseif(ENABLE_LLVM_BACKEND AND LLVM_FOUND)
endif()

target_link_libraries(unittests_ PRIVATE python-cpp gtest gtest_main cxxopts project_options project_warnings tsl::ordered_map)
set_target_properties(unittests_ PROPERTIES OUTPUT_NAME "unittests")
add_custom_target(run-unittests COMMAND $<TARGET_FILE:unittests_> DEPENDS unittests_)
gtest_discover_tests(unittests_)

add_executable(python repl/repl.cpp)
target_link_libraries(python PRIVATE linenoise cxxopts python-cpp project_options project_warnings stdc++)
Expand Down