diff --git a/devel/ispc/Makefile b/devel/ispc/Makefile index 8bcfa95a296a..9008d20dd145 100644 --- a/devel/ispc/Makefile +++ b/devel/ispc/Makefile @@ -1,77 +1,79 @@ # Created by: Yuri Victorovich PORTNAME= ispc DISTVERSIONPREFIX= v DISTVERSION= 1.16.1 -PORTREVISION= 1 +PORTREVISION= 2 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_GITHUB= yes SHEBANG_FILES= *.py -#LLVM_VERSION= -devel # fails with 12: call to non-static member function without an object argument: llvm::DebugLoc::get - # Release notes https://github.com/ispc/ispc/blob/master/docs/ReleaseNotes.txt list compatible LLVM versions, but they assume that extra patches are applied to LLVM - # LLVM build script: https://github.com/ispc/ispc/blob/master/scripts/build.sh -LLVM_VERSION= 11 # it fails with -devel (13.0.d20210308), with 12.0.0.r2 it also fails, using 11 that it succeeds with - 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 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 \ 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 \ include/ispcrt/ispcrt.hpp \ include/ispcrt/ispcrt.isph \ lib/cmake/ispcrt-${PORTVERSION}/Findlevel_zero.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 + do-test: # some tests fail: https://github.com/ispc/ispc/issues/1868 @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/files/patch-src_module.cpp b/devel/ispc/files/patch-src_module.cpp index 987c2fcb2fd6..06bfac61b41f 100644 --- a/devel/ispc/files/patch-src_module.cpp +++ b/devel/ispc/files/patch-src_module.cpp @@ -1,20 +1,34 @@ --- src/module.cpp.orig 2021-07-15 23:04:31 UTC +++ src/module.cpp @@ -102,7 +102,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 de3ecdcbd15f..3bf08c14a7d0 100644 --- a/devel/ispc/files/patch-src_opt.cpp +++ b/devel/ispc/files/patch-src_opt.cpp @@ -1,64 +1,79 @@ 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 @@ -144,7 +144,7 @@ static llvm::Pass *CreateFixBooleanSelectPass(); 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(); 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) { #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) { #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 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; 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); + }