From 5c62a20be716576b6522200844dfc596981e8d4f Mon Sep 17 00:00:00 2001
From: Konstantin Romanov <konstantinsromanov@gmail.com>
Date: Fri, 12 Jul 2024 22:04:19 -0400
Subject: [PATCH] Enable LLVM 18.

Signed-off-by: Konstantin Romanov <konstantinsromanov@gmail.com>
---
 .travis.yml                      | 21 +++++++++++++--------
 Dockerfile                       |  7 ++++---
 src/tool_application_support.cpp |  6 ++++++
 3 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 9161f51..9516ba4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -8,38 +8,43 @@ matrix:
           compiler: gcc
           language: cpp
           sudo: true
-          script: docker build --build-arg TARGET_LLVM_VERSION=10 .
+          script: docker build --progress plain --build-arg TARGET_LLVM_VERSION=10 .
         - os: linux
           compiler: gcc
           language: cpp
           sudo: true
-          script: docker build --build-arg TARGET_LLVM_VERSION=11 .
+          script: docker build --progress plain --build-arg TARGET_LLVM_VERSION=11 .
         - os: linux
           compiler: gcc
           language: cpp
           sudo: true
-          script: docker build --build-arg TARGET_LLVM_VERSION=12 .
+          script: docker build --progress plain --build-arg TARGET_LLVM_VERSION=12 .
         - os: linux
           compiler: gcc
           language: cpp
           sudo: true
-          script: docker build --build-arg TARGET_LLVM_VERSION=13 .
+          script: docker build --progress plain --build-arg TARGET_LLVM_VERSION=13 .
         - os: linux
           dist: jammy
           compiler: gcc
           language: cpp
           sudo: true
-          script: docker build --build-arg TARGET_LLVM_VERSION=14 --build-arg BASE_IMAGE=ubuntu:22.04 --build-arg GCC_VERSION=9 --build-arg IMAGE_REPO=jammy .
+          script: docker build --progress plain --build-arg TARGET_LLVM_VERSION=14 --build-arg BASE_IMAGE=ubuntu:22.04 --build-arg GCC_VERSION=9 --build-arg IMAGE_REPO=jammy .
         - os: linux
           dist: jammy
           compiler: gcc
           language: cpp
           sudo: true
-          script: docker build --build-arg TARGET_LLVM_VERSION=15 --build-arg BASE_IMAGE=ubuntu:22.04 --build-arg GCC_VERSION=9 --build-arg IMAGE_REPO=jammy .
+          script: docker build --progress plain --build-arg TARGET_LLVM_VERSION=15 --build-arg BASE_IMAGE=ubuntu:22.04 --build-arg GCC_VERSION=9 --build-arg IMAGE_REPO=jammy .
         - os: linux
           dist: jammy
           compiler: gcc
           language: cpp
           sudo: true
-          script: docker build --build-arg TARGET_LLVM_VERSION=17 --build-arg BASE_IMAGE=ubuntu:22.04 --build-arg GCC_VERSION=9 --build-arg IMAGE_REPO=jammy .
-
+          script: docker build --progress plain --build-arg TARGET_LLVM_VERSION=17 --build-arg BASE_IMAGE=ubuntu:22.04 --build-arg GCC_VERSION=9 --build-arg IMAGE_REPO=jammy .
+        - os: linux
+          dist: jammy
+          compiler: gcc
+          language: cpp
+          sudo: true
+          script: docker build --progress plain --build-arg TARGET_LLVM_VERSION=18 --build-arg BASE_IMAGE=ubuntu:22.04 --build-arg GCC_VERSION=12 --build-arg IMAGE_REPO=jammy .
diff --git a/Dockerfile b/Dockerfile
index 5152bc0..1de0f1d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -38,9 +38,10 @@ RUN apt-get install -y \
         # Clang & friends
         clang-"$TARGET_LLVM_VERSION" \
         libclang-common-"$TARGET_LLVM_VERSION"-dev \
-        libclang-"$TARGET_LLVM_VERSION"-dev \
-        # libc++
-        libc++-"$TARGET_LLVM_VERSION"-dev
+        libclang-"$TARGET_LLVM_VERSION"-dev
+
+# LLVM 18 produces an ABI conflict
+RUN if [ $TARGET_LLVM_VERSION -lt 18 ] ; then apt-get install -y libc++-"$TARGET_LLVM_VERSION"-dev; fi
 
 # Set up build environment
 ENV CC=/usr/bin/gcc-"$GCC_VERSION" \
diff --git a/src/tool_application_support.cpp b/src/tool_application_support.cpp
index b3c508b..00d0d8b 100644
--- a/src/tool_application_support.cpp
+++ b/src/tool_application_support.cpp
@@ -8,7 +8,13 @@
 #include <llvm/Option/Option.h>
 #include <llvm/Support/ErrorHandling.h>
 #include <llvm/Support/FileSystem.h>
+
+#if LLVM_VERSION_MAJOR >= 18
+#include <llvm/TargetParser/Host.h>
+#else
 #include <llvm/Support/Host.h>
+#endif
+
 #include <llvm/Support/Path.h>
 #include <llvm/Support/Process.h>