Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
54f1824
Updated README.md to include release info
tanmay-9 Dec 9, 2025
2255015
Merge branch 'ad-freiburg:master' into master
tanmay-9 Dec 10, 2025
06dfb7d
Merge branch 'ad-freiburg:master' into master
tanmay-9 Dec 11, 2025
56541b0
Update CMakeLists.txt for debian
tanmay-9 Dec 11, 2025
fe0c95d
Add space
Dec 11, 2025
97a5764
Merge remote-tracking branch 'origin/master' into debian-cpack
tanmay-9 Dec 15, 2025
64a5aea
First attempt at adding version number to IndexBuilderMain and Server…
tanmay-9 Dec 21, 2025
b48fbdc
Add ProjectVersion.h.in and move git describe logic to CMakeLists.txt…
tanmay-9 Dec 21, 2025
644cc9c
Change CPACK_PROJECT_VERSION to use Debian packaging naming scheme
tanmay-9 Dec 21, 2025
26d75b8
Merge branch 'ad-freiburg:master' into debian-cpack
tanmay-9 Dec 21, 2025
be4b568
Remove old code and improve debian cpack version number logic
tanmay-9 Dec 22, 2025
bd45e84
Remove README changes
tanmay-9 Dec 22, 2025
16ebc3b
Merge remote-tracking branch 'origin/master' into debian-cpack
Dec 22, 2025
2c1dc65
Make clang-format happy
Dec 22, 2025
6ff8e41
Merge branch 'ad-freiburg:master' into debian-cpack
tanmay-9 Jan 3, 2026
b58f63b
Install only necessary components to avoid EXCLUDE_FROM_ALL hack
tanmay-9 Jan 6, 2026
56bfdd3
Use EXCLUDE_FROM_ALL in FetchContent_Declare for all external librari…
tanmay-9 Jan 6, 2026
0d7e354
Try AppleClang support
tanmay-9 Jan 7, 2026
656ea61
More apple-clang changes and O2 optimization
tanmay-9 Jan 7, 2026
4fa172f
Fix some compiler issues to make the build work on AppleClang
tanmay-9 Jan 9, 2026
97f3904
Merge remote-tracking branch 'origin/master' into apple-native-build
tanmay-9 Jan 12, 2026
e60648f
Use std::promise instead of std::packaged_task to work around AppleCl…
tanmay-9 Jan 12, 2026
751abb0
Update qlever binary names and remove old apple .dmg cpack block
tanmay-9 Jan 12, 2026
10d37d2
Add dynamic homebrew prefix detection and fix formatting
tanmay-9 Jan 13, 2026
7470c5f
Update e2e.sh with new binary names
tanmay-9 Jan 14, 2026
8782de2
Add MacOS AppleClang native github workflow
tanmay-9 Jan 14, 2026
12a674f
Add icu and pkg-config to path for macos native workflow
tanmay-9 Jan 14, 2026
3b74908
Add build directory explicitly to cmake build in macos native runner
tanmay-9 Jan 14, 2026
b12639c
Fix configure cmake step in macos native runner
tanmay-9 Jan 14, 2026
2d7fa61
Delete github workflows temporarily
tanmay-9 Jan 14, 2026
1456cea
Add ICU_ROOT for cmake to find icu in macos native runner
tanmay-9 Jan 14, 2026
b4c9dd9
Remove repeated wrong sections
tanmay-9 Jan 14, 2026
db7940f
Merge remote-tracking branch 'origin/master' into debian-cpack
tanmay-9 Jan 15, 2026
3195507
Move project version logic to CompilationInfo.cmake
tanmay-9 Jan 15, 2026
a20c28e
Clean up cpack code and change maintainer to Julian
tanmay-9 Jan 16, 2026
0de5c51
Take in the latest changes from debian cpack branch
tanmay-9 Jan 16, 2026
03b44c5
Fix cmake generated package version number
tanmay-9 Jan 18, 2026
bda94ae
Fix PROJECT_VERSION bug
tanmay-9 Jan 18, 2026
d56a31e
Merge branch 'debian-cpack' into apple-native-build
tanmay-9 Jan 19, 2026
6f524df
Move ICU_ROOT to cmake instruction in workflow
tanmay-9 Jan 20, 2026
798b3dc
Merge branch 'ad-freiburg:master' into debian-cpack
tanmay-9 Jan 20, 2026
081b289
Add VERSION_SUFFIX and PACKAGE_REVISION variables for cpack Debian pa…
tanmay-9 Jan 20, 2026
efa82b5
In debian package name, change commits ahead separator from - to +
tanmay-9 Jan 20, 2026
e7315bd
Change package name from qlever to qlever-bin
tanmay-9 Jan 20, 2026
76c39c9
complement distribution detection
Qup42 Jan 21, 2026
0861eea
Remove UBUNTU_CODENAME based logic and have a fully automated way of …
tanmay-9 Jan 21, 2026
8bcae9f
Add GitVersion.cmake copy step to Dockerfile
tanmay-9 Jan 21, 2026
547d422
Add GitVersion.cmake to dockerignore file as well
tanmay-9 Jan 21, 2026
7387dc3
Merge remote-tracking branch 'origin/debian-cpack' into apple-native-…
tanmay-9 Jan 21, 2026
c970c62
Merge remote-tracking branch 'origin/master' into apple-native-build
tanmay-9 Jan 21, 2026
e0b90bf
Merge remote-tracking branch 'origin/master' into apple-native-build
tanmay-9 Jan 29, 2026
76f3001
Add binary version to qlever-index and qlever-server first log line
tanmay-9 Jan 29, 2026
5b76433
Revert "Delete github workflows temporarily"
tanmay-9 Jan 29, 2026
485a052
Integrate back the lost workflow changes
tanmay-9 Jan 29, 2026
d305ab3
Remove unnecessary comments and fix formatting
tanmay-9 Jan 30, 2026
ab9b62f
Merge remote-tracking branch 'origin/master' into apple-native-build
tanmay-9 Jan 30, 2026
aba0bb8
Use index-based iteration to avoid copying CompactVectorOfStrings (wh…
tanmay-9 Jan 30, 2026
f9c469b
Merge branch 'ad-freiburg:master' into apple-native-build
tanmay-9 Feb 3, 2026
01dce2b
Implement pr review suggestions
tanmay-9 Feb 3, 2026
5601763
Implement more pr review suggestions
tanmay-9 Feb 3, 2026
51b4c46
Merge branch 'ad-freiburg:master' into apple-native-build
tanmay-9 Feb 5, 2026
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
65 changes: 65 additions & 0 deletions .github/workflows/macos-appleclang-native.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: Native build with AppleClang on MacOS

on:
push:
branches: [master]
pull_request:
branches: [master]
merge_group:

concurrency:
group: "${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}"
cancel-in-progress: true

jobs:
build:
# The CMake configure and build commands are platform-agnostic and should work equally
# well on Windows or Mac. You can convert this to a matrix build if you need
# cross-platform coverage.
# See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
strategy:
fail-fast: false
matrix:
build-type: [Release]
runs-on: macos-15
steps:
- uses: actions/checkout@v4

- name: Install dependencies via Homebrew
run: |
brew update
brew install boost icu4c openssl@3 zstd jemalloc pkg-config
echo PATH="$(brew --prefix icu4c)/bin:$(brew --prefix icu4c)/sbin:$PATH" >> $GITHUB_ENV
echo PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$(brew --prefix icu4c)/lib/pkgconfig" >> $GITHUB_ENV

- name: Install python dependencies for E2E tests
run: |
pip3 install --break-system-packages pyaml --no-binary=:pyicu: pyicu

- name: Print clang version
run: clang++ --version

- name: Create build directory
run: mkdir ${{github.workspace}}/build

- name: Configure CMake
working-directory: ${{ github.workspace }}/build
run: cmake -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DCMAKE_OSX_DEPLOYMENT_TARGET=11.0 -DLOGLEVEL=INFO -DUSE_PARALLEL=false -D_NO_TIMING_TESTS=ON -DCOMPILER_SUPPORTS_MARCH_NATIVE=FALSE -DICU_ROOT=$(brew --prefix icu4c) -GNinja ..

- name: Build
# Build your program with the given configuration
run: |
cmake --build ${{github.workspace}}/build --config ${{matrix.build-type}} -- -j $(sysctl -n hw.ncpu)
id: build

- name: Test
id: complete_tests
working-directory: ${{github.workspace}}/build/test
run: env CTEST_OUTPUT_ON_FAILURE=1 ctest -C ${{matrix.build-type}} .

- name: Running and printing the benchmark examples.
working-directory: ${{github.workspace}}/build
run: benchmark/BenchmarkExamples -p

- name: E2E
run: ${{github.workspace}}/e2e/e2e.sh
28 changes: 22 additions & 6 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,25 @@ if (POLICY CMP0167)
endif ()
project(QLever C CXX)

if (APPLE)
# Dynamically detect Homebrew prefix
execute_process(
COMMAND brew --prefix
OUTPUT_VARIABLE HOMEBREW_PREFIX
OUTPUT_STRIP_TRAILING_WHITESPACE
RESULT_VARIABLE BREW_RESULT
ERROR_QUIET
)
if (BREW_RESULT EQUAL 0 AND HOMEBREW_PREFIX)
message(STATUS "Found Homebrew at: ${HOMEBREW_PREFIX}")
list(APPEND CMAKE_PREFIX_PATH "${HOMEBREW_PREFIX}")
link_directories(${HOMEBREW_PREFIX}/lib)
include_directories(${HOMEBREW_PREFIX}/include)
else()
message(WARNING "Homebrew not found. You may need to manually set CMAKE_PREFIX_PATH to locate dependencies (Boost, ICU, OpenSSL, etc.)")
endif()
endif ()

# C/C++ Versions
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
Expand Down Expand Up @@ -51,7 +70,7 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
add_compile_options(-fcoroutines)
endif ()

elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" )
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "16.0.0" AND NOT COMPILER_VERSION_CHECK_DEACTIVATED)
MESSAGE(FATAL_ERROR "Clang++ versions older than 16.0 are not supported by QLever")
endif ()
Expand All @@ -62,7 +81,7 @@ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(RANGE_V3_REQUIRED_BY_COMPILER ON)
endif ()
else ()
MESSAGE(FATAL_ERROR "QLever currently only supports the G++ or LLVM-Clang++ compilers. Found ${CMAKE_CXX_COMPILER_ID}")
MESSAGE(FATAL_ERROR "QLever currently only supports the G++, LLVM-Clang++ or AppleClang compilers. Found ${CMAKE_CXX_COMPILER_ID}")
endif ()

## Build targets for address sanitizer
Expand All @@ -80,7 +99,7 @@ set(CMAKE_CXX_FLAGS_ASAN
if ("${CMAKE_GENERATOR}" STREQUAL "Ninja")
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
add_compile_options(-fdiagnostics-color=always)
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
add_compile_options(-fcolor-diagnostics)
endif ()
endif ()
Expand Down Expand Up @@ -271,10 +290,8 @@ if (${ALLOW_SHUTDOWN})
message(STATUS "Adding -DALLOW_SHUTDOWN")
endif ()


set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")


set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")

Expand Down Expand Up @@ -434,7 +451,6 @@ set(LOG_LEVEL_DEBUG DEBUG)
set(LOG_LEVEL_TIMING TIMING)
set(LOG_LEVEL_TRACE TRACE)


if (CMAKE_BUILD_TYPE MATCHES DEBUG)
set(LOGLEVEL DEBUG CACHE STRING "The loglevel")
else ()
Expand Down
7 changes: 4 additions & 3 deletions src/ServerMain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -201,9 +201,10 @@ int main(int argc, char** argv) {
return EXIT_FAILURE;
}

AD_LOG_INFO << EMPH_ON << "QLever server, compiled on "
<< qlever::version::DatetimeOfCompilation << " using git hash "
<< qlever::version::GitShortHash << EMPH_OFF << std::endl;
AD_LOG_INFO << EMPH_ON << "QLever server " << qlever::version::ProjectVersion
<< ", compiled on " << qlever::version::DatetimeOfCompilation
<< " using git hash " << qlever::version::GitShortHash << EMPH_OFF
<< std::endl;

try {
Server server(port, numSimultaneousQueries, memoryMaxSize,
Expand Down
12 changes: 6 additions & 6 deletions src/engine/GroupByImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -123,12 +123,12 @@ class LazyGroupByRange
currentGroupBlock_);
groupSplitAcrossTables_ = false;
} else {
// This processes the whole block in batches if possible
IdTableStatic<OUT_WIDTH> table =
std::move(resultTable_).toStatic<OUT_WIDTH>();
parent_->processBlock<OUT_WIDTH>(table, aggregates_, evaluationContext,
blockStart, blockEnd,
&currentLocalVocab_, groupByCols_);
// This processes the whole block in batches if possible.
IdTableStatic<OUT_WIDTH> table{
std::move(resultTable_).template toStatic<OUT_WIDTH>()};
parent_->template processBlock<OUT_WIDTH>(
table, aggregates_, evaluationContext, blockStart, blockEnd,
&currentLocalVocab_, groupByCols_);
resultTable_ = std::move(table).toDynamic();
}
}
Expand Down
3 changes: 2 additions & 1 deletion src/index/IndexBuilderMain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,8 @@ int main(int argc, char** argv) {
return EXIT_FAILURE;
}

AD_LOG_INFO << EMPH_ON << "QLever index builder, compiled on "
AD_LOG_INFO << EMPH_ON << "QLever index builder "
<< qlever::version::ProjectVersion << ", compiled on "
<< qlever::version::DatetimeOfCompilation << " using git hash "
<< qlever::version::GitShortHash << EMPH_OFF << std::endl;

Expand Down
5 changes: 4 additions & 1 deletion src/rdfTypes/GeometryInfoHelpersImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#include "util/GeoConverters.h"
#include "util/Log.h"
#include "util/TypeTraits.h"
#include "util/Views.h"

// This file contains functions used for parsing and processing WKT geometries
// using `pb_util`. To avoid unnecessarily compiling expensive modules, this
Expand Down Expand Up @@ -341,7 +342,9 @@ struct MetricLengthVisitor {
static_assert(ad_utility::similarToInstantiation<T, std::vector>);

return ::ranges::accumulate(
::ranges::transform_view(multiGeom, MetricLengthVisitor{}), 0);
::ranges::transform_view(ad_utility::allView(multiGeom),
MetricLengthVisitor{}),
0);
}

// Compute the length for the custom container type `AnyGeometry` from
Expand Down
4 changes: 3 additions & 1 deletion src/util/JoinAlgorithms/IndexNestedLoopJoin.h
Original file line number Diff line number Diff line change
Expand Up @@ -238,8 +238,10 @@ class IndexNestedLoopJoin {
for (const auto& rightRow : rightTable) {
size_t leftOffset = 0;
size_t leftSize = leftTable.size();
// Use `ql::ranges::ref_view` to avoid copying `RowReference` (which has a
// deleted copy constructor) on AppleClang.
for (const auto& [rightId, leftCol] :
::ranges::zip_view(rightRow, leftColumns)) {
::ranges::views::zip(ql::ranges::ref_view{rightRow}, leftColumns)) {
AD_EXPENSIVE_CHECK(!rightId.isUndefined());
auto currentStart = leftCol.begin() + leftOffset;
auto subrange = ql::ranges::equal_range(
Expand Down
5 changes: 4 additions & 1 deletion test/CompactStringVectorTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,10 @@ TYPED_TEST(CompactVectorOfStringsFixture, cloneAndRemap) {
auto copy2 = original.cloneAndRemap(mappingFunction);

ASSERT_EQ(original.size(), copy2.size());
for (auto [reference, element] : ::ranges::zip_view(original, copy2)) {
// Use `ql::ranges::ref_view` to avoid copying `CompactVectorOfStrings` (which
// has a deleted copy constructor) on AppleClang.
for (const auto& [reference, element] : ::ranges::views::zip(
ql::ranges::ref_view{original}, ql::ranges::ref_view{copy2})) {
ASSERT_EQ(reference.size(), element.size());
auto modifiedReference = ::ranges::to<typename CompactVector::vector_type>(
reference | ql::views::transform(mappingFunction));
Expand Down
7 changes: 5 additions & 2 deletions test/util/AsyncTestHelpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,15 @@ template <typename Func>
requires(TestableCoroutine<Func> || TestableFunction<Func>)
void runAsyncTest(Func innerRun, size_t numThreads) {
auto ioContext = std::make_shared<net::io_context>();

auto future = [&]() {
if constexpr (TestableCoroutine<Func>) {
return net::co_spawn(*ioContext, innerRun(*ioContext), net::use_future);
} else {
return net::post(*ioContext, std::packaged_task<void()>{
[&] { innerRun(*ioContext); }});
// Use a named variable to work around AppleClang compiler crash when
// passing a temporary `packaged_task` directly to `net::post`.
std::packaged_task<void()> task{[&] { innerRun(*ioContext); }};
return net::post(*ioContext, std::move(task));
}
}();

Expand Down
Loading