@@ -165,9 +165,6 @@ if [ "$host" == "Darwin" ]; then
165165 die $? " not ok - missing build tools, try \" $( advice " libtool" ) \" "
166166 quiet command -v curl
167167 die $? " not ok - missing curl, try \" $( advice " curl" ) \" "
168- if ! brew list | grep libomp > /dev/null 2>&1 ; then
169- die $? " not ok - missing libomp, try \" $( advice " libomp" ) \" "
170- fi
171168fi
172169
173170if [ " $host " == " Linux" ]; then
@@ -598,11 +595,47 @@ function _install {
598595 cp -rfp " $BUILD_DIR /$arch -$platform " /lib$_d /* .a " $SOCKET_HOME /lib$_d /$arch -$platform "
599596 fi
600597
601- if [[ " $host " == " Darwin" ]] && [[ " $platform " != " desktop" ]]; then
602- if (( do_link == 1 )) ; then
603- ln -sf " $BUILD_DIR /$arch -$platform " /lib/* .metallib " $SOCKET_HOME /lib/$arch -$platform "
598+ if [[ " $host " == " Darwin" ]]; then
599+ if [[ " $platform " == " desktop" ]]; then
600+ echo " # locating 'libomp.dylib...'"
601+ local llvms=()
602+ local libomp_path=" "
603+
604+ llvms+=($( find /opt/homebrew/opt/llvm* 2> /dev/null) )
605+ llvms+=($( echo $LLVM_PATHS | tr ' :' ' ' ) )
606+
607+ for path in ${llvms[@]} ; do
608+ local libomp=" $( find -L " $path " -path ' */lib/libomp.dylib' 2> /dev/null | head -n1) "
609+ if [ -n " $libomp " ] && [ -f " $libomp " ]; then
610+ libomp_path=" $libomp "
611+ echo " # found LLVM libomp at: '$libomp_path '"
612+ break
613+ fi
614+ done
615+
616+ if [ -z " $libomp_path " ] || ! [ -f " $libomp_path " ]; then
617+ # Fallback: try to locate a libomp from the standalone libomp package via Homebrew
618+ local fallback_prefix=$( brew --prefix libomp 2> /dev/null || true)
619+ if [ -n " $fallback_prefix " ] && [ -f " $fallback_prefix /lib/libomp.dylib" ]; then
620+ libomp_path=" $fallback_prefix /lib/libomp.dylib"
621+ echo " # found standalone libomp at: '$libomp_path '"
622+ else
623+ die 1 " not ok - could not locate 'libomp.dylib'. Please install an LLVM package (preferred) or the libomp package: \" $( advice " libomp" ) \" "
624+ fi
625+ fi
626+
627+ cp -f " $libomp " " $SOCKET_HOME /lib/$arch -desktop/$( basename " $libomp " ) "
628+ echo " # copied '$libomp_path '"
629+
630+ echo " # modifying the install name of the copied 'libomp.dylib'"
631+ quiet install_name_tool -id " @rpath/$( basename " $libomp_path " ) " " $SOCKET_HOME /lib/$arch -desktop/$( basename " $libomp " ) "
632+ die $? " not ok - failed to modify the install name of copied 'libomp.dylib'"
604633 else
605- cp -rfp " $BUILD_DIR /$arch -$platform " /lib/* .metallib " $SOCKET_HOME /lib/$arch -$platform "
634+ if (( do_link == 1 )) ; then
635+ ln -sf " $BUILD_DIR /$arch -$platform " /lib/* .metallib " $SOCKET_HOME /lib/$arch -$platform "
636+ else
637+ cp -rfp " $BUILD_DIR /$arch -$platform " /lib/* .metallib " $SOCKET_HOME /lib/$arch -$platform "
638+ fi
606639 fi
607640 fi
608641 fi
@@ -934,6 +967,9 @@ function _compile_llama {
934967 if [[ " $host " != " Win32" ]]; then
935968 quiet command -v cmake
936969 die $? " not ok - missing cmake, \" $( advice ' cmake' ) \" "
970+ local cflags=" -fPIC"
971+ export CFLAGS=" $cflags "
972+ export CXXFLAGS=" $cflags "
937973
938974 quiet cmake -S . -B build -DCMAKE_INSTALL_PREFIX=" $BUILD_DIR /$target -$platform " ${cmake_args[@]}
939975 die $? " not ok - libllama.a (desktop)"
0 commit comments