From dbed2c92b4aa9cbda07d6a6809810e650ddcf6a1 Mon Sep 17 00:00:00 2001 From: 0dminnimda <0dminnimda@gmail.com> Date: Thu, 31 Oct 2024 15:56:23 +0300 Subject: [PATCH 1/4] Add support for llvm version 19 --- build_odin.sh | 10 ++++++---- src/llvm_backend.hpp | 6 +++++- src/llvm_backend_expr.cpp | 12 ++++++++++-- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/build_odin.sh b/build_odin.sh index c06004ea8..99114ba92 100755 --- a/build_odin.sh +++ b/build_odin.sh @@ -33,13 +33,15 @@ fi if [ -z "$LLVM_CONFIG" ]; then # darwin, linux, openbsd - if [ -n "$(command -v llvm-config-18)" ]; then LLVM_CONFIG="llvm-config-18" + if [ -n "$(command -v llvm-config-19)" ]; then LLVM_CONFIG="llvm-config-19" + elif [ -n "$(command -v llvm-config-18)" ]; then LLVM_CONFIG="llvm-config-18" elif [ -n "$(command -v llvm-config-17)" ]; then LLVM_CONFIG="llvm-config-17" elif [ -n "$(command -v llvm-config-14)" ]; then LLVM_CONFIG="llvm-config-14" elif [ -n "$(command -v llvm-config-13)" ]; then LLVM_CONFIG="llvm-config-13" elif [ -n "$(command -v llvm-config-12)" ]; then LLVM_CONFIG="llvm-config-12" elif [ -n "$(command -v llvm-config-11)" ]; then LLVM_CONFIG="llvm-config-11" # freebsd + elif [ -n "$(command -v llvm-config19)" ]; then LLVM_CONFIG="llvm-config19" elif [ -n "$(command -v llvm-config18)" ]; then LLVM_CONFIG="llvm-config18" elif [ -n "$(command -v llvm-config17)" ]; then LLVM_CONFIG="llvm-config17" elif [ -n "$(command -v llvm-config14)" ]; then LLVM_CONFIG="llvm-config14" @@ -66,15 +68,15 @@ LLVM_VERSION_MAJOR="$(echo $LLVM_VERSION | awk -F. '{print $1}')" LLVM_VERSION_MINOR="$(echo $LLVM_VERSION | awk -F. '{print $2}')" LLVM_VERSION_PATCH="$(echo $LLVM_VERSION | awk -F. '{print $3}')" -if [ $LLVM_VERSION_MAJOR -lt 11 ] || ([ $LLVM_VERSION_MAJOR -gt 14 ] && [ $LLVM_VERSION_MAJOR -lt 17 ]) || [ $LLVM_VERSION_MAJOR -gt 18 ]; then - error "Invalid LLVM version $LLVM_VERSION: must be 11, 12, 13, 14, 17 or 18" +if [ $LLVM_VERSION_MAJOR -lt 11 ] || ([ $LLVM_VERSION_MAJOR -gt 14 ] && [ $LLVM_VERSION_MAJOR -lt 17 ]) || [ $LLVM_VERSION_MAJOR -gt 18 ] | [ $LLVM_VERSION_MAJOR -gt 19 ]; then + error "Invalid LLVM version $LLVM_VERSION: must be 11, 12, 13, 14, 17, 18 or 19" fi case "$OS_NAME" in Darwin) if [ "$OS_ARCH" = "arm64" ]; then if [ $LLVM_VERSION_MAJOR -lt 13 ]; then - error "Invalid LLVM version $LLVM_VERSION: Darwin Arm64 requires LLVM 13, 14, 17 or 18" + error "Invalid LLVM version $LLVM_VERSION: Darwin Arm64 requires LLVM 13, 14, 17, 18 or 19" fi fi diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index 68f95cb03..cb0add491 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -57,6 +57,10 @@ #define LB_USE_NEW_PASS_SYSTEM 0 #endif +#if LLVM_VERSION_MAJOR >= 19 +#define LLVMDIBuilderInsertDeclareAtEnd(...) LLVMDIBuilderInsertDeclareRecordAtEnd(__VA_ARGS__) +#endif + gb_internal bool lb_use_new_pass_system(void) { return LB_USE_NEW_PASS_SYSTEM; } @@ -741,4 +745,4 @@ gb_global char const *llvm_linkage_strings[] = { "linker private weak linkage" }; -#define ODIN_METADATA_IS_PACKED str_lit("odin-is-packed") \ No newline at end of file +#define ODIN_METADATA_IS_PACKED str_lit("odin-is-packed") diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index b5f6437a4..4fab1a092 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -4594,7 +4594,11 @@ gb_internal lbAddr lb_build_addr_compound_lit(lbProcedure *p, Ast *expr) { auto const &f = fields[i]; LLVMValueRef mask = LLVMConstInt(lit, 1, false); - mask = LLVMConstShl(mask, LLVMConstInt(lit, f.bit_size, false)); + #if LLVM_VERSION_MAJOR >= 19 + mask = LLVMBuildShl(p->builder, mask, LLVMConstInt(lit, f.bit_size, false), ""); + #else + mask = LLVMConstShl(mask, LLVMConstInt(lit, f.bit_size, false)); + #endif mask = LLVMConstSub(mask, LLVMConstInt(lit, 1, false)); LLVMValueRef elem = values[i].value; @@ -4642,7 +4646,11 @@ gb_internal lbAddr lb_build_addr_compound_lit(lbProcedure *p, Ast *expr) { bits_to_set -= mask_width; LLVMValueRef mask = LLVMConstInt(vt, 1, false); - mask = LLVMConstShl(mask, LLVMConstInt(vt, mask_width, false)); + #if LLVM_VERSION_MAJOR >= 19 + mask = LLVMBuildShl(p->builder, mask, LLVMConstInt(vt, mask_width, false), ""); + #else + mask = LLVMConstShl(mask, LLVMConstInt(vt, mask_width, false)); + #endif mask = LLVMConstSub(mask, LLVMConstInt(vt, 1, false)); LLVMValueRef to_set = LLVMBuildAnd(p->builder, val, mask, ""); From d52e80502b55b25da38cda948ec042c9d7ccaf07 Mon Sep 17 00:00:00 2001 From: 0dminnimda <0dminnimda@gmail.com> Date: Thu, 31 Oct 2024 15:59:32 +0300 Subject: [PATCH 2/4] Fix a mistake in build_odin.sh --- build_odin.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_odin.sh b/build_odin.sh index 99114ba92..a2846646f 100755 --- a/build_odin.sh +++ b/build_odin.sh @@ -68,7 +68,7 @@ LLVM_VERSION_MAJOR="$(echo $LLVM_VERSION | awk -F. '{print $1}')" LLVM_VERSION_MINOR="$(echo $LLVM_VERSION | awk -F. '{print $2}')" LLVM_VERSION_PATCH="$(echo $LLVM_VERSION | awk -F. '{print $3}')" -if [ $LLVM_VERSION_MAJOR -lt 11 ] || ([ $LLVM_VERSION_MAJOR -gt 14 ] && [ $LLVM_VERSION_MAJOR -lt 17 ]) || [ $LLVM_VERSION_MAJOR -gt 18 ] | [ $LLVM_VERSION_MAJOR -gt 19 ]; then +if [ $LLVM_VERSION_MAJOR -lt 11 ] || ([ $LLVM_VERSION_MAJOR -gt 14 ] && [ $LLVM_VERSION_MAJOR -lt 17 ]) || [ $LLVM_VERSION_MAJOR -gt 19 ]; then error "Invalid LLVM version $LLVM_VERSION: must be 11, 12, 13, 14, 17, 18 or 19" fi From d06fcbfdd3adfc44c1a9e13ca758f7dc1f3b2459 Mon Sep 17 00:00:00 2001 From: 0dminnimda <0dminnimda@gmail.com> Date: Sat, 2 Nov 2024 00:53:13 +0300 Subject: [PATCH 3/4] Update version in more places --- build_odin.sh | 3 ++- src/main.cpp | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/build_odin.sh b/build_odin.sh index a2846646f..9010d5977 100755 --- a/build_odin.sh +++ b/build_odin.sh @@ -25,7 +25,8 @@ error() { # Brew advises people not to add llvm to their $PATH, so try and use brew to find it. if [ -z "$LLVM_CONFIG" ] && [ -n "$(command -v brew)" ]; then - if [ -n "$(command -v $(brew --prefix llvm@18)/bin/llvm-config)" ]; then LLVM_CONFIG="$(brew --prefix llvm@18)/bin/llvm-config" + if [ -n "$(command -v $(brew --prefix llvm@19)/bin/llvm-config)" ]; then LLVM_CONFIG="$(brew --prefix llvm@19)/bin/llvm-config" + elif [ -n "$(command -v $(brew --prefix llvm@18)/bin/llvm-config)" ]; then LLVM_CONFIG="$(brew --prefix llvm@18)/bin/llvm-config" elif [ -n "$(command -v $(brew --prefix llvm@17)/bin/llvm-config)" ]; then LLVM_CONFIG="$(brew --prefix llvm@17)/bin/llvm-config" elif [ -n "$(command -v $(brew --prefix llvm@14)/bin/llvm-config)" ]; then LLVM_CONFIG="$(brew --prefix llvm@14)/bin/llvm-config" fi diff --git a/src/main.cpp b/src/main.cpp index 1574ac544..772d57619 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -89,8 +89,8 @@ gb_global Timings global_timings = {0}; #if defined(GB_SYSTEM_OSX) #include - #if LLVM_VERSION_MAJOR < 11 || (LLVM_VERSION_MAJOR > 14 && LLVM_VERSION_MAJOR < 17) || LLVM_VERSION_MAJOR > 18 - #error LLVM Version 11..=14 or =18 is required => "brew install llvm@14" + #if LLVM_VERSION_MAJOR < 11 || (LLVM_VERSION_MAJOR > 14 && LLVM_VERSION_MAJOR < 17) || LLVM_VERSION_MAJOR > 19 + #error LLVM Version 11..=14 or 18..=19 is required => "brew install llvm@14" #endif #endif From d04ff6951a194082df6c64a39bae4010e659d9c0 Mon Sep 17 00:00:00 2001 From: 0dminnimda <0dminnimda@gmail.com> Date: Sat, 2 Nov 2024 21:59:15 +0300 Subject: [PATCH 4/4] src/main.cpp: apply suggestion Co-authored-by: Laytan --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 772d57619..d5717425f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -90,7 +90,7 @@ gb_global Timings global_timings = {0}; #if defined(GB_SYSTEM_OSX) #include #if LLVM_VERSION_MAJOR < 11 || (LLVM_VERSION_MAJOR > 14 && LLVM_VERSION_MAJOR < 17) || LLVM_VERSION_MAJOR > 19 - #error LLVM Version 11..=14 or 18..=19 is required => "brew install llvm@14" + #error LLVM Version 11..=14 or 17..=19 is required => "brew install llvm@14" #endif #endif