|
|
@@ -32,7 +32,7 @@ int32_t _ghf_genrWS( _GHT_WRKSET* const pwSet,
|
|
|
const _GHT_LOG Log,
|
|
|
const int32_t i32ExclusiveLogFlag,
|
|
|
const cl_device_id clWrkDev,
|
|
|
- const char** const ppcCLProgramSources,
|
|
|
+ char** const ppcCLProgramSources,
|
|
|
const _GHE_SRCTYPE SourceType,
|
|
|
const char* const pcOCLBuildOpts,
|
|
|
const _GHE_LOGLVL LogLvl,
|
|
|
@@ -47,12 +47,20 @@ int32_t _ghf_genrWS( _GHT_WRKSET* const pwSet,
|
|
|
) {
|
|
|
/**/
|
|
|
#define __CLAPI_ERR_ROUTINE_WITH_RET(___CLAPI_CALL) \
|
|
|
-{ const cl_int tmp=pwSet->APIErr; \
|
|
|
- char pcLogMsg[_GHM_MAXLEN_OF_LOGMSG]; \
|
|
|
- snprintf(pcLogMsg, _GHM_MAXLEN_OF_LOGMSG, "%s/%s", __func__, ___CLAPI_CALL); \
|
|
|
- _ghf_logWS_APIErr(*pwSet, pcLogMsg); \
|
|
|
- _ghf_wipeWS(pwSet); \
|
|
|
- return(tmp); }
|
|
|
+{ const cl_int tmp=pwSet->APIErr; \
|
|
|
+ char pcLogMsg[_GHM_MAXLEN_OF_LOGMSG]; \
|
|
|
+ snprintf(pcLogMsg, _GHM_MAXLEN_OF_LOGMSG, \
|
|
|
+ "%s/%s", __func__, ___CLAPI_CALL); \
|
|
|
+ _ghf_logWS_APIErr(*pwSet, pcLogMsg); \
|
|
|
+ _ghf_wipeWS(pwSet); \
|
|
|
+ return(tmp); }
|
|
|
+#define __CLAPI_CREATE_PROGRAM_ERR_TO_STDOUT(___CLAPI_CALL) \
|
|
|
+{ FILE* pTmpFilePtr=pwSet->Log.pfOut; \
|
|
|
+ pwSet->Log.pfOut=stdout; \
|
|
|
+ _ghf_logWS_DevInfoShort(*pwSet,_ghf_getWS_Dev(*pwSet),NULL); \
|
|
|
+ snprintf(pcLogMsg,_GHM_MAXLEN_OF_LOGMSG,___CLAPI_CALL); \
|
|
|
+ _ghf_logWS_APIErr(*pwSet, pcLogMsg); _ghf_logWS_Delim(*pwSet); \
|
|
|
+ pwSet->Log.pfOut=pTmpFilePtr; }
|
|
|
/**/
|
|
|
char pcLogMsg[_GHM_MAXLEN_OF_LOGMSG];
|
|
|
if(!pwSet) return(_GHM_NULL_POINTER_RECEIVED_ERROR);
|
|
|
@@ -164,29 +172,21 @@ int32_t _ghf_genrWS( _GHT_WRKSET* const pwSet,
|
|
|
* исходных текстов препятствует созданию
|
|
|
* ядерных функций. Необходимо разобраться в
|
|
|
* причинах. */
|
|
|
- /*((size_t**)ppcCLProgramSources)[cluNofListings+1],*/
|
|
|
+ /*((size_t**)ppcCLProgramSources)[cluNofListings+1],*/
|
|
|
&pwSet->APIErr);
|
|
|
if(pwSet->APIErr) {
|
|
|
#ifdef __OCLH_BUILD_LOG_TO_STDOUT_FLAG
|
|
|
- {
|
|
|
- FILE* pTmpFilePtr=pwSet->Log.pfOut;
|
|
|
- pwSet->Log.pfOut=stdout;
|
|
|
- _ghf_logWS_DevInfoShort(*pwSet,_ghf_getWS_Dev(*pwSet),
|
|
|
- NULL);
|
|
|
- snprintf(pcLogMsg, _GHM_MAXLEN_OF_LOGMSG,
|
|
|
- "clCreateProgramWithSource");
|
|
|
- _ghf_logWS_APIErr(*pwSet, pcLogMsg);
|
|
|
- _ghf_logWS_Delim(*pwSet);
|
|
|
- pwSet->Log.pfOut=pTmpFilePtr;
|
|
|
- }
|
|
|
+ __CLAPI_CREATE_PROGRAM_ERR_TO_STDOUT("clCreateProgramWithSource");
|
|
|
#endif /* __OCLH_BUILD_LOG_TO_STDOUT_FLAG */
|
|
|
__CLAPI_ERR_ROUTINE_WITH_RET("clCreateProgramWithSource")
|
|
|
- } }
|
|
|
+ }
|
|
|
+ }
|
|
|
break;
|
|
|
case _GHE_IR_LISTINGS:
|
|
|
{ /* TODO: make IR output and processing */
|
|
|
_ghf_logWS_Msg(*pwSet, "_GHE_IR_LISTINGS");
|
|
|
- _ghf_wipeWS(pwSet); return(1); }
|
|
|
+ _ghf_wipeWS(pwSet); return(1);
|
|
|
+ }
|
|
|
break;
|
|
|
case _GHE_SEPARATED_OBJECTS:
|
|
|
{ cl_device_id cldev=_ghf_getWS_Dev(*pwSet);
|
|
|
@@ -220,17 +220,7 @@ int32_t _ghf_genrWS( _GHT_WRKSET* const pwSet,
|
|
|
_ghf_freeHostZ(&pPrograms);
|
|
|
pwSet->APIErr=err;
|
|
|
#ifdef __OCLH_BUILD_LOG_TO_STDOUT_FLAG
|
|
|
- {
|
|
|
- FILE* pTmpFilePtr=pwSet->Log.pfOut;
|
|
|
- pwSet->Log.pfOut=stdout;
|
|
|
- _ghf_logWS_DevInfoShort(*pwSet,_ghf_getWS_Dev(*pwSet),
|
|
|
- NULL);
|
|
|
- snprintf(pcLogMsg, _GHM_MAXLEN_OF_LOGMSG,
|
|
|
- "clCreateProgramWithBinary");
|
|
|
- _ghf_logWS_APIErr(*pwSet, pcLogMsg);
|
|
|
- _ghf_logWS_Delim(*pwSet);
|
|
|
- pwSet->Log.pfOut=pTmpFilePtr;
|
|
|
- }
|
|
|
+ __CLAPI_CREATE_PROGRAM_ERR_TO_STDOUT("clCreateProgramWithBinary");
|
|
|
#endif /* __OCLH_BUILD_LOG_TO_STDOUT_FLAG */
|
|
|
__CLAPI_ERR_ROUTINE_WITH_RET("clCreateProgramWithBinary")
|
|
|
}
|
|
|
@@ -248,24 +238,15 @@ int32_t _ghf_genrWS( _GHT_WRKSET* const pwSet,
|
|
|
_ghf_freeHostZ(&pPrograms);
|
|
|
pwSet->APIErr=err;
|
|
|
#ifdef __OCLH_BUILD_LOG_TO_STDOUT_FLAG
|
|
|
- {
|
|
|
- FILE* pTmpFilePtr=pwSet->Log.pfOut;
|
|
|
- pwSet->Log.pfOut=stdout;
|
|
|
- _ghf_logWS_DevInfoShort(*pwSet,_ghf_getWS_Dev(*pwSet),
|
|
|
- NULL);
|
|
|
- snprintf(pcLogMsg, _GHM_MAXLEN_OF_LOGMSG,
|
|
|
- "clLinkProgram");
|
|
|
- _ghf_logWS_APIErr(*pwSet, pcLogMsg);
|
|
|
- _ghf_logWS_Delim(*pwSet);
|
|
|
- pwSet->Log.pfOut=pTmpFilePtr;
|
|
|
- }
|
|
|
+ __CLAPI_CREATE_PROGRAM_ERR_TO_STDOUT("clLinkProgram");
|
|
|
#endif /* __OCLH_BUILD_LOG_TO_STDOUT_FLAG */
|
|
|
__CLAPI_ERR_ROUTINE_WITH_RET("clLinkProgram")
|
|
|
}
|
|
|
for(i=0u; i<cluNofBinaries; i++)
|
|
|
if(pPrograms[i])
|
|
|
pwSet->APIErr=clReleaseProgram(pPrograms[i]);
|
|
|
- _ghf_freeHostZ(&pPrograms); }
|
|
|
+ _ghf_freeHostZ(&pPrograms);
|
|
|
+ }
|
|
|
break;
|
|
|
case _GHE_LINKED_OBJECTS:
|
|
|
{ cl_device_id cldev=_ghf_getWS_Dev(*pwSet);
|
|
|
@@ -281,20 +262,11 @@ int32_t _ghf_genrWS( _GHT_WRKSET* const pwSet,
|
|
|
&cliBinStatus, &pwSet->APIErr);
|
|
|
if(pwSet->APIErr) {
|
|
|
#ifdef __OCLH_BUILD_LOG_TO_STDOUT_FLAG
|
|
|
- {
|
|
|
- FILE* pTmpFilePtr=pwSet->Log.pfOut;
|
|
|
- pwSet->Log.pfOut=stdout;
|
|
|
- _ghf_logWS_DevInfoShort(*pwSet,_ghf_getWS_Dev(*pwSet),
|
|
|
- NULL);
|
|
|
- snprintf(pcLogMsg, _GHM_MAXLEN_OF_LOGMSG,
|
|
|
- "clCreateProgramWithBinary");
|
|
|
- _ghf_logWS_APIErr(*pwSet, pcLogMsg);
|
|
|
- _ghf_logWS_Delim(*pwSet);
|
|
|
- pwSet->Log.pfOut=pTmpFilePtr;
|
|
|
- }
|
|
|
+ __CLAPI_CREATE_PROGRAM_ERR_TO_STDOUT("clCreateProgramWithBinary");
|
|
|
#endif /* __OCLH_BUILD_LOG_TO_STDOUT_FLAG */
|
|
|
__CLAPI_ERR_ROUTINE_WITH_RET("clCreateProgramWithBinary")
|
|
|
- } }
|
|
|
+ }
|
|
|
+ }
|
|
|
break;
|
|
|
default:
|
|
|
{ char pcLogMsg[_GHM_MAXLEN_OF_LOGMSG];
|
|
|
@@ -302,7 +274,8 @@ int32_t _ghf_genrWS( _GHT_WRKSET* const pwSet,
|
|
|
"Unknown program source");
|
|
|
_ghf_logWS_APIErr(*pwSet, pcLogMsg);
|
|
|
_ghf_wipeWS(pwSet);
|
|
|
- return(_GHM_UNKNOWN_PROGRAM_SOURCE_ERROR); }
|
|
|
+ return(_GHM_UNKNOWN_PROGRAM_SOURCE_ERROR);
|
|
|
+ }
|
|
|
}
|
|
|
{
|
|
|
cl_int cliBuildCLAPIErr=CL_SUCCESS;
|
|
|
@@ -337,9 +310,8 @@ int32_t _ghf_genrWS( _GHT_WRKSET* const pwSet,
|
|
|
#endif /* defined(__OCLH_COMPILER_ONLY_FLAG) &&
|
|
|
!defined(__OCLH_LINKER_ONLY_FLAG) */
|
|
|
cliBuildCLAPIErr=pwSet->APIErr;
|
|
|
- while(_ghf_getWS_BuildStatus(*pwSet)==CL_BUILD_IN_PROGRESS) ;
|
|
|
- _ghf_logWS_BuildInfo(*pwSet, pwSet->Program, clWrkDev,
|
|
|
- LogLvl, _GHE_NO_BUILD_LOG);
|
|
|
+ while(_ghf_getWS_BuildStatus(*pwSet)==CL_BUILD_IN_PROGRESS)
|
|
|
+ ;
|
|
|
{
|
|
|
_GHT_LOG TmpLog=_ghf_declLog();
|
|
|
/* cl_uint cluNofKernels=0u; */
|
|
|
@@ -347,6 +319,8 @@ int32_t _ghf_genrWS( _GHT_WRKSET* const pwSet,
|
|
|
cl_build_status clBuildStatus=
|
|
|
_ghf_getWS_BuildStatus(*pwSet);
|
|
|
cl_program_binary_type clBinType=0u;
|
|
|
+ _ghf_logWS_BuildInfo(*pwSet, pwSet->Program, clWrkDev,
|
|
|
+ LogLvl, BuildLogMode);
|
|
|
if(BuildLogMode==_GHE_BUILD_LOG_IN_SEPARATED_FILES) {
|
|
|
TmpLog=pwSet->Log;
|
|
|
int32_t err=0;
|
|
|
@@ -384,23 +358,15 @@ int32_t _ghf_genrWS( _GHT_WRKSET* const pwSet,
|
|
|
_ghf_wipeWS(pwSet); return(err); }
|
|
|
_ghf_logWS_DevInfoShort(*pwSet,
|
|
|
_ghf_getWS_Dev(*pwSet), NULL);
|
|
|
-#ifdef __OCLH_BUILD_LOG_TO_STDOUT_FLAG
|
|
|
- {
|
|
|
- FILE* pTmpFilePtr=pwSet->Log.pfOut;
|
|
|
- pwSet->Log.pfOut=stdout;
|
|
|
- _ghf_logWS_DevInfoShort(*pwSet,
|
|
|
- _ghf_getWS_Dev(*pwSet),
|
|
|
- NULL);
|
|
|
- pwSet->Log.pfOut=pTmpFilePtr;
|
|
|
- }
|
|
|
-#endif /* __OCLH_BUILD_LOG_TO_STDOUT_FLAG */
|
|
|
+ _ghf_logWS_BuildInfo(*pwSet, pwSet->Program, clWrkDev,
|
|
|
+ LogLvl, BuildLogMode);
|
|
|
}
|
|
|
- _ghf_logWS_BuildInfo(*pwSet, pwSet->Program, clWrkDev,
|
|
|
- LogLvl, BuildLogMode);
|
|
|
#ifdef __OCLH_BUILD_LOG_TO_STDOUT_FLAG
|
|
|
{
|
|
|
FILE* pTmpFilePtr=pwSet->Log.pfOut;
|
|
|
pwSet->Log.pfOut=stdout;
|
|
|
+ _ghf_logWS_DevInfoShort(*pwSet,_ghf_getWS_Dev(*pwSet),
|
|
|
+ NULL);
|
|
|
_ghf_logWS_BuildInfo(*pwSet, pwSet->Program, clWrkDev,
|
|
|
LogLvl, BuildLogMode);
|
|
|
pwSet->Log.pfOut=pTmpFilePtr;
|
|
|
@@ -604,6 +570,7 @@ int32_t _ghf_genrWS( _GHT_WRKSET* const pwSet,
|
|
|
_ghf_logWS_Delim(*pwSet);
|
|
|
return(_GHM_OK);
|
|
|
/**/
|
|
|
+#undef __CLAPI_CREATE_PROGRAM_ERR_TO_STDOUT
|
|
|
#undef __CLAPI_ERR_ROUTINE_WITH_RET
|
|
|
/**/
|
|
|
}
|
|
|
@@ -1038,9 +1005,9 @@ int32_t _ghf_saveWS_ProgramBinaries(_GHT_WRKSET wSet,
|
|
|
return(_GHM_OK);
|
|
|
}
|
|
|
|
|
|
-int32_t _ghf_wdcChkWS_APIErr (_GHT_WRKSET wSet,
|
|
|
- const char* const pcAPICall,
|
|
|
- const int32_t i32FlashFlag) {
|
|
|
+int32_t _ghf_wdcChkWS_APIErr(_GHT_WRKSET wSet,
|
|
|
+ const char* const pcAPICall,
|
|
|
+ const int32_t i32FlashFlag) {
|
|
|
if(wSet.APIErr) {
|
|
|
_ghf_logWS_APIErr(wSet,pcAPICall);
|
|
|
if(wSet.pvDat) wSet.pfnDatCleaner(wSet);
|
|
|
@@ -1169,7 +1136,7 @@ _GHT_AWSS _ghf_declAWSs(const _GHE_LOGLVL LogLvl,
|
|
|
int32_t _ghf_genrAWSs( _GHT_AWSS* const pAWSs,
|
|
|
const _GHT_LOG Log,
|
|
|
const _GHT_DEVLIST_DESC DevLstDesc,
|
|
|
- const char** const ppcCLProgramSources,
|
|
|
+ char** const ppcCLProgramSources,
|
|
|
const _GHE_SRCTYPE SourceType,
|
|
|
const char* const OCLBuildOpts
|
|
|
#if defined(__OCLH_BUILDER_FLAG) || \
|
|
|
@@ -1248,12 +1215,14 @@ int32_t _ghf_genrAWSs( _GHT_AWSS* const pAWSs,
|
|
|
} else { /* подразумевается валидное описание устройств */
|
|
|
cl_uint j=0u;
|
|
|
while(DevLst[j]) {
|
|
|
- if(__ghf_cmpCharPtrAndWC(
|
|
|
- _ghf_getDevInf_charptr(DevLst[j],CL_DEVICE_NAME,
|
|
|
- &tmpWS.APIErr),
|
|
|
- DevLstDesc.pcWC, __GHE_CASE_SENSITIVE)) {
|
|
|
+ char* pcDevName=_ghf_getDevInf_charptr(DevLst[j],
|
|
|
+ CL_DEVICE_NAME,
|
|
|
+ &tmpWS.APIErr);
|
|
|
+ if(__ghf_cmpCharPtrAndWC(pcDevName,DevLstDesc.pcWC,
|
|
|
+ __GHE_CASE_SENSITIVE)) {
|
|
|
err=_ghf_addDevIdxToDevLstDesc(&TmpDevLstDesc,j);
|
|
|
if(err) {
|
|
|
+ if(pcDevName) { free(pcDevName); pcDevName =NULL; }
|
|
|
_ghf_wipeDevLstDesc(&TmpDevLstDesc);
|
|
|
_ghf_wipeAWSs(pAWSs);
|
|
|
_ghf_wipeDevList(&DevLst);
|
|
|
@@ -1262,6 +1231,7 @@ int32_t _ghf_genrAWSs( _GHT_AWSS* const pAWSs,
|
|
|
}
|
|
|
cluNofWS++;
|
|
|
}
|
|
|
+ if(pcDevName) { free(pcDevName); pcDevName=NULL; }
|
|
|
j++;
|
|
|
}
|
|
|
}
|
|
|
@@ -1450,8 +1420,8 @@ int32_t __ghf_setWS_TextProgramId(_GHT_WRKSET wSet,
|
|
|
char* const pcOutputPrefix) {
|
|
|
char pcDefProgName[64]="\0",
|
|
|
pcDefDevName[64]="\0",
|
|
|
- *pcApiDevName=_ghf_getDevInf_charptr(_ghf_getWS_Dev(wSet),
|
|
|
- CL_DEVICE_NAME, &wSet.APIErr);
|
|
|
+ *pcApiDevName=_ghf_getDevInf_charptr(_ghf_getWS_Dev(wSet),
|
|
|
+ CL_DEVICE_NAME, &wSet.APIErr);
|
|
|
snprintf(pcDefProgName, 64ul,
|
|
|
"program_0x%04lx", __GHM_U64STRIPTO2B((uint64_t)wSet.Program));
|
|
|
snprintf(pcDefDevName, 64ul,
|
|
|
@@ -1462,6 +1432,7 @@ int32_t __ghf_setWS_TextProgramId(_GHT_WRKSET wSet,
|
|
|
}
|
|
|
if(pcApiDevName) {
|
|
|
__ghf_removePreNPostSpacesFromCharPtr(pcApiDevName);
|
|
|
+ __ghf_replaceIllegalFSCharsInCharPtr(pcApiDevName);
|
|
|
__ghf_replaceSpacesWithUnderscoreInCharPtr(pcApiDevName);
|
|
|
}
|
|
|
snprintf(pcDst,_GHM_MAX_PATH_LENGTH,"%s/%s-%s",_GHM_LOG_PATH,
|