diff --git a/devel/ispc/Makefile b/devel/ispc/Makefile index 05624cbf9db3..45717a4afdf0 100644 --- a/devel/ispc/Makefile +++ b/devel/ispc/Makefile @@ -1,81 +1,84 @@ # Created by: Yuri Victorovich PORTNAME= ispc DISTVERSIONPREFIX= v -DISTVERSION= 1.16.1 -PORTREVISION= 3 +DISTVERSION= 1.17.0 CATEGORIES= devel MAINTAINER= yuri@FreeBSD.org COMMENT= Intel's compiler for high-performance SIMD programming LICENSE= BSD3CLAUSE LICENSE_FILE= ${WRKSRC}/LICENSE.txt ONLY_FOR_ARCHS= aarch64 amd64 i386 ONLY_FOR_ARCHS_REASON= only available for these architectures BUILD_DEPENDS= ${LOCALBASE}/bin/flex:textproc/flex \ m4:devel/m4 LIB_DEPENDS= libLLVM.so:devel/llvm${LLVM_VERSION} USES= bison cmake compiler:c++14-lang python:build,test shebangfix +USE_LDCONFIG= yes USE_GITHUB= yes + SHEBANG_FILES= *.py CONFIGURE_ENV= PATH=${LOCALBASE}/llvm${LLVM_VERSION}/bin:${PATH} CMAKE_OFF= ISPC_NO_DUMPS ISPC_INCLUDE_EXAMPLES BINARY_ALIAS= flex=${LOCALBASE}/bin/flex python=${PYTHON_CMD} m4=${LOCALBASE}/bin/gm4 PLIST_FILES= bin/ispc \ bin/check_isa -OPTIONS_DEFINE_amd64= GENX -OPTIONS_DEFAULT_amd64= GENX +OPTIONS_DEFINE_amd64= XE +OPTIONS_DEFAULT_amd64= XE -GENX_DESC= Intel GPU 8/16-wide SIMD support -GENX_BUILD_DEPENDS= ${LOCALBASE}/llvm${LLVM_VERSION}/lib/libLLVMGenXIntrinsics.a:devel/vc-intrinsics@llvm${LLVM_VERSION} -GENX_LIB_DEPENDS= libze_loader.so:devel/level-zero \ +XE_DESC= Enable Intel Xe support +XE_BUILD_DEPENDS= ${LOCALBASE}/llvm${LLVM_VERSION}/lib/libLLVMGenXIntrinsics.a:devel/vc-intrinsics@llvm${LLVM_VERSION} +XE_LIB_DEPENDS= libze_loader.so:devel/level-zero \ libLLVMSPIRVLib.so.${LLVM_VERSION}:devel/spirv-llvm-translator@llvm${LLVM_VERSION} -GENX_CMAKE_BOOL= GENX_ENABLED -GENX_CMAKE_BOOL_OFF= ISPCRT_BUILD_TESTS -GENX_CMAKE_ON= -DGENX_DEPS_DIR:PATH="${LOCALBASE}/llvm${LLVM_VERSION}" -GENX_PLIST_FILES= include/ispcrt/ispcrt.h \ +XE_CMAKE_BOOL= XE_ENABLED +XE_CMAKE_BOOL_OFF= ISPCRT_BUILD_TESTS +XE_CMAKE_ON= -DXE_DEPS_DIR:PATH="${LOCALBASE}/llvm${LLVM_VERSION}" -DISPC_INCLUDE_XE_EXAMPLES=OFF +XE_PLIST_FILES= include/ispcrt/ispcrt.h \ include/ispcrt/ispcrt.hpp \ include/ispcrt/ispcrt.isph \ + lib/cmake/ispcrt-${PORTVERSION}/Finddpcpp_compiler.cmake \ lib/cmake/ispcrt-${PORTVERSION}/Findlevel_zero.cmake \ + lib/cmake/ispcrt-${PORTVERSION}/interop.cmake \ lib/cmake/ispcrt-${PORTVERSION}/ispc.cmake \ lib/cmake/ispcrt-${PORTVERSION}/ispcrtConfig.cmake \ lib/cmake/ispcrt-${PORTVERSION}/ispcrt_Exports-%%CMAKE_BUILD_TYPE%%.cmake \ lib/cmake/ispcrt-${PORTVERSION}/ispcrt_Exports.cmake \ lib/libispcrt.so \ lib/libispcrt.so.1 \ lib/libispcrt.so.${PORTVERSION} \ lib/libispcrt_static.a #.include #.if ${LLVM_DEFAULT:M[7891]0} || ${LLVM_DEFAULT:M1[12]} # max(LLVM_DEFAULT,13) #LLVM_VERSION= 13 #.else #LLVM_VERSION= ${LLVM_DEFAULT} #.endif -LLVM_VERSION?= 11 # 13 fails on some systems with: Assertion failed: (PointeeType && "Must specify element type"), function Create +LLVM_VERSION?= 13 -do-test: # some tests fail: https://github.com/ispc/ispc/issues/1868 +do-test: # some tests fail: https://github.com/ispc/ispc/issues/1868, https://github.com/ispc/ispc/issues/2244 @cd ${WRKSRC} && ISPC_HOME=${BUILD_WRKSRC}/bin ./run_tests.py test-check-all: # the upstream claims that some of these checks are broken without using their patched llvm version, hence using llvm-devel @cd ${BUILD_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_CMD} ${MAKE_ARGS} check-all run-examples: build @[ -f ${LOCALBASE}/lib/libtbb.so ] || ! echo "ERROR run-examples target requires devel/tbb package installed" .for e in simple sort mandelbrot stencil @cd ${WRKSRC}/examples/${e} && \ ${ECHO} "===> Running example ${e}" && \ ${SETENV} ${MAKE_ENV} ${MAKE_CMD} ${MAKE_ARGS} && \ ./${e} .endfor .include diff --git a/devel/ispc/distinfo b/devel/ispc/distinfo index d4928fc12244..a36a0aa08200 100644 --- a/devel/ispc/distinfo +++ b/devel/ispc/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1626566179 -SHA256 (ispc-ispc-v1.16.1_GH0.tar.gz) = e5dcd0d85df6ed5feb454ad9ec295083a07d7459fcaba00d5dd6266ceb476399 -SIZE (ispc-ispc-v1.16.1_GH0.tar.gz) = 19549428 +TIMESTAMP = 1643247706 +SHA256 (ispc-ispc-v1.17.0_GH0.tar.gz) = 37fb1055d6c6b232e112d8d50145d726824ed4d8da93a7396315dceba6c76e62 +SIZE (ispc-ispc-v1.17.0_GH0.tar.gz) = 19436681 diff --git a/devel/ispc/files/patch-CMakeLists.txt b/devel/ispc/files/patch-CMakeLists.txt index a014710ff101..2c540960cbae 100644 --- a/devel/ispc/files/patch-CMakeLists.txt +++ b/devel/ispc/files/patch-CMakeLists.txt @@ -1,22 +1,22 @@ ---- CMakeLists.txt.orig 2020-08-28 19:43:13 UTC +--- CMakeLists.txt.orig 2022-01-15 08:35:15 UTC +++ CMakeLists.txt @@ -45,12 +45,17 @@ set(ISPC_BUILD TRUE) project(${PROJECT_NAME}) set(X86_HOST FALSE) -if (${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "AMD64|86") +if (${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "amd64|86") set(X86_HOST TRUE) endif() +set(ARM_HOST FALSE) +if (${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "aarch64") + set(ARM_HOST TRUE) +endif() + option(X86_ENABLED "Enable x86 support" ${X86_HOST}) -option(ARM_ENABLED "Enable ARM support" ON) +option(ARM_ENABLED "Enable ARM support" ${ARM_HOST}) option(WASM_ENABLED "Enable experimental Web Assembly support" OFF) - option(GENX_ENABLED "Enable GenX support" OFF) + option(XE_ENABLED "Enable Intel Xe support" OFF) option(ISPC_INCLUDE_EXAMPLES "Generate build targets for the ISPC examples" ON) diff --git a/devel/ispc/files/patch-cmake_GenerateBuiltins.cmake b/devel/ispc/files/patch-cmake_GenerateBuiltins.cmake index e541332c18f1..d256ac87934d 100644 --- a/devel/ispc/files/patch-cmake_GenerateBuiltins.cmake +++ b/devel/ispc/files/patch-cmake_GenerateBuiltins.cmake @@ -1,11 +1,11 @@ ---- cmake/GenerateBuiltins.cmake.orig 2021-07-15 23:04:31 UTC +--- cmake/GenerateBuiltins.cmake.orig 2022-01-15 08:35:15 UTC +++ cmake/GenerateBuiltins.cmake -@@ -289,6 +289,8 @@ function(builtin_genx_to_cpp bit resultFileName) +@@ -312,6 +312,8 @@ function(builtin_xe_to_cpp bit resultFileName) set(os_name "windows") elseif (APPLE) set(SKIP ON) + elseif (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") + set(os_name "freebsd") else () set(os_name "linux") endif() diff --git a/devel/ispc/files/patch-src_func.cpp b/devel/ispc/files/patch-src_func.cpp deleted file mode 100644 index ffbcebe61294..000000000000 --- a/devel/ispc/files/patch-src_func.cpp +++ /dev/null @@ -1,17 +0,0 @@ -Regressed by https://github.com/intel/vc-intrinsics/commit/8ee879314584 - -src/func.cpp:490:44: error: no member named 'Reserved_0' in 'llvm::genx::KernelMDOp' - mdArgs[llvm::genx::KernelMDOp::Reserved_0] = - ~~~~~~~~~~~~~~~~~~~~~~~~^ - ---- src/func.cpp.orig 2021-07-15 23:04:31 UTC -+++ src/func.cpp -@@ -487,7 +487,7 @@ void Function::emitCode(FunctionEmitContext *ctx, llvm - llvm::ValueAsMetadata::get(llvm::ConstantInt::getNullValue(i32Type)); - mdArgs[llvm::genx::KernelMDOp::ArgIOKinds] = llvm::MDNode::get(fContext, argInOutKinds); - mdArgs[llvm::genx::KernelMDOp::ArgTypeDescs] = llvm::MDNode::get(fContext, argTypeDescs); -- mdArgs[llvm::genx::KernelMDOp::Reserved_0] = -+ mdArgs[llvm::genx::KernelMDOp::NBarrierCnt] = - llvm::ValueAsMetadata::get(llvm::ConstantInt::getNullValue(i32Type)); - mdArgs[llvm::genx::KernelMDOp::BarrierCnt] = - llvm::ValueAsMetadata::get(llvm::ConstantInt::getNullValue(i32Type)); diff --git a/devel/ispc/files/patch-src_ispc.cpp b/devel/ispc/files/patch-src_ispc.cpp deleted file mode 100644 index e06e096d9b80..000000000000 --- a/devel/ispc/files/patch-src_ispc.cpp +++ /dev/null @@ -1,25 +0,0 @@ ---- src/ispc.cpp.orig 2021-07-15 23:04:31 UTC -+++ src/ispc.cpp -@@ -1464,10 +1464,22 @@ std::string Target::GetTripleString() const { - triple.setArchName("armv7"); - } else if (m_arch == Arch::aarch64) { - triple.setArchName("aarch64"); -+ } else if (m_arch == Arch::genx32) { -+ triple.setArchName("spir"); -+ } else if (m_arch == Arch::genx64) { -+ triple.setArchName("spir64"); - } else { - Error(SourcePos(), "Unknown arch."); - exit(1); - } -+#ifdef ISPC_GENX_ENABLED -+ if (m_arch == Arch::genx32 || m_arch == Arch::genx64) { -+ //"spir64-unknown-unknown" -+ triple.setVendor(llvm::Triple::VendorType::UnknownVendor); -+ triple.setOS(llvm::Triple::OSType::UnknownOS); -+ return triple.str(); -+ } -+#endif - triple.setVendor(llvm::Triple::VendorType::UnknownVendor); - triple.setOS(llvm::Triple::OSType::FreeBSD); - break; diff --git a/devel/ispc/files/patch-src_llvmutil.cpp b/devel/ispc/files/patch-src_llvmutil.cpp index 53237378ba1e..53e2d9708916 100644 --- a/devel/ispc/files/patch-src_llvmutil.cpp +++ b/devel/ispc/files/patch-src_llvmutil.cpp @@ -1,13 +1,13 @@ ISPC devs insist on using dump() functions which LLVM devs consider a debug functionality, and it isn't available in the LLVM packages. ---- src/llvmutil.cpp.orig 2020-01-25 02:15:35 UTC +--- src/llvmutil.cpp.orig 2022-01-15 08:35:15 UTC +++ src/llvmutil.cpp -@@ -1344,7 +1344,7 @@ static void lDumpValue(llvm::Value *v, std::setdump(); + //v->dump(); done.insert(v); if (inst == NULL) diff --git a/devel/ispc/files/patch-src_module.cpp b/devel/ispc/files/patch-src_module.cpp index 06bfac61b41f..4eb8cb73a255 100644 --- a/devel/ispc/files/patch-src_module.cpp +++ b/devel/ispc/files/patch-src_module.cpp @@ -1,34 +1,11 @@ ---- src/module.cpp.orig 2021-07-15 23:04:31 UTC +--- src/module.cpp.orig 2022-01-15 08:35:15 UTC +++ src/module.cpp -@@ -102,7 +102,7 @@ +@@ -105,7 +105,7 @@ #define OCLOC_LIBRARY_NAME "ocloc64.dll" #elif defined(_WIN32) #define OCLOC_LIBRARY_NAME "ocloc32.dll" -#elif defined(__linux__) +#elif defined(__linux__) || defined(__FreeBSD__) #define OCLOC_LIBRARY_NAME "libocloc.so" #else #error "Unexpected platform" -@@ -1149,7 +1149,7 @@ bool Module::translateToSPIRV(llvm::Module *module, st - llvm::cl::desc("Allow DWARF operations not listed in the OpenCL.DebugInfo.100 " - "specification (experimental, may produce incompatible SPIR-V " - "module)")); --#if ISPC_LLVM_VERSION < ISPC_LLVM_12_0 -+#if ISPC_LLVM_VERSION >= ISPC_LLVM_13_0 - Opts.setSPIRVAllowUnknownIntrinsics({"llvm.genx"}); - #else - llvm::cl::opt SPIRVAllowUnknownIntrinsics( -@@ -1314,7 +1314,12 @@ bool Module::writeObjectFileOrAssembly(llvm::TargetMachine *targetMachine, llvm::Module *module, OutputType outputType, - llvm::CodeGenFileType fileType = (outputType == Object) ? llvm::CGFT_ObjectFile : llvm::CGFT_AssemblyFile; - bool binary = (fileType == llvm::CGFT_ObjectFile); - -- llvm::sys::fs::OpenFlags flags = binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text; -+ llvm::sys::fs::OpenFlags flags = binary ? -+#if ISPC_LLVM_VERSION >= ISPC_LLVM_13_0 -+ llvm::sys::fs::OF_None : llvm::sys::fs::OF_Text; -+#else -+ llvm::sys::fs::F_None : llvm::sys::fs::F_Text; -+#endif - - std::error_code error; - diff --git a/devel/ispc/files/patch-src_opt.cpp b/devel/ispc/files/patch-src_opt.cpp index 3bf08c14a7d0..d396f5dbd312 100644 --- a/devel/ispc/files/patch-src_opt.cpp +++ b/devel/ispc/files/patch-src_opt.cpp @@ -1,79 +1,64 @@ ISPC devs insist on using dump() functions which LLVM devs consider a debug functionality, and it isn't available in the LLVM packages. ---- src/opt.cpp.orig 2020-01-25 02:15:35 UTC +--- src/opt.cpp.orig 2022-01-15 08:35:15 UTC +++ src/opt.cpp -@@ -144,7 +144,7 @@ static llvm::Pass *CreateFixBooleanSelectPass(); +@@ -155,7 +155,7 @@ static llvm::Pass *CreateMangleOpenCLBuiltins(); getenv("FUNC"), strlen(getenv("FUNC")))))) { \ fprintf(stderr, "Start of " NAME "\n"); \ fprintf(stderr, "---------------\n"); \ - bb.dump(); \ + /*bb.dump();*/ \ fprintf(stderr, "---------------\n\n"); \ } else /* eat semicolon */ -@@ -154,7 +154,7 @@ static llvm::Pass *CreateFixBooleanSelectPass(); +@@ -165,7 +165,7 @@ static llvm::Pass *CreateMangleOpenCLBuiltins(); getenv("FUNC"), strlen(getenv("FUNC")))))) { \ fprintf(stderr, "End of " NAME " %s\n", modifiedAny ? "** CHANGES **" : ""); \ fprintf(stderr, "---------------\n"); \ - bb.dump(); \ + /*bb.dump();*/ \ fprintf(stderr, "---------------\n\n"); \ } else /* eat semicolon */ #else -@@ -442,7 +442,7 @@ void Optimize(llvm::Module *module, int optLevel) { +@@ -467,7 +467,7 @@ void ispc::Optimize(llvm::Module *module, int optLevel #ifndef ISPC_NO_DUMPS if (g->debugPrint) { printf("*** Code going into optimization ***\n"); - module->dump(); + //module->dump(); } #endif DebugPassManager optPM; -@@ -655,7 +655,7 @@ void Optimize(llvm::Module *module, int optLevel) { +@@ -811,7 +811,7 @@ void ispc::Optimize(llvm::Module *module, int optLevel #ifndef ISPC_NO_DUMPS if (g->debugPrint) { printf("\n*****\nFINAL OUTPUT\n*****\n"); - module->dump(); + //module->dump(); } #endif } -@@ -1728,11 +1728,11 @@ lExtractUniformsFromOffset(llvm::Value **basePtr, llvm +@@ -1933,11 +1933,11 @@ lExtractUniformsFromOffset(llvm::Value **basePtr, llvm llvm::Value *offsetScale, llvm::Instruction *insertBefore) { #if 1 - (*basePtr)->dump(); + //(*basePtr)->dump(); printf("\n"); - (*offsetVector)->dump(); + //(*offsetVector)->dump(); printf("\n"); - offsetScale->dump(); + //offsetScale->dump(); printf("-----\n"); #endif -@@ -4217,7 +4217,7 @@ char DebugPass::ID = 0; +@@ -4746,7 +4746,7 @@ char DebugPass::ID = 0; bool DebugPass::runOnModule(llvm::Module &module) { fprintf(stderr, "%s", str_output); fflush(stderr); - module.dump(); + //module.dump(); return true; } -@@ -4687,7 +4687,13 @@ void DebugPassFile::run(llvm::Module &module, bool init) - std::error_code EC; - char fname[100]; - snprintf(fname, sizeof(fname), "%s_%d_%s.ll", init ? "init" : "ir", pnum, sanitize(std::string(pname)).c_str()); -- llvm::raw_fd_ostream OS(fname, EC, llvm::sys::fs::F_None); -+ llvm::raw_fd_ostream OS(fname, EC, -+#if ISPC_LLVM_VERSION >= ISPC_LLVM_13_0 -+ llvm::sys::fs::OF_None -+#else -+ llvm::sys::fs::F_None -+#endif -+ ); - Assert(!EC && "IR dump file creation failed!"); - module.print(OS, 0); - }