Explorar o código

compiler fairly usable

hk %!s(int64=5) %!d(string=hai) anos
pai
achega
bf2a2e6384

+ 70 - 48
Makefile

@@ -1,80 +1,102 @@
--include makefile.init
-#-include makefile.defs
-RM := rm -rf
-CC := gcc
-LINKER := gcc
-CFLAGS := -std=c11 -pedantic -Wall -Wextra -Wconversion
-LDFLAGS := -L/usr/local/cuda/lib64 -L/opt/intel/opencl/lib64
-OUTPUTFLAGS := -c -fmessage-length=0
-MISCFLAGS := -pthread
-INCLUDES := -I"src/include_h/" -I"src/include_hd/" \
-            -I"/usr/local/cuda/include"
-DEFS :=
 # for debug
 MODEFLAGS := -O0 -g3
 TARGETDIR := build/Debug
 # for release
 ### MODEFLAGS := -O3
 ### TARGETDIR := build/Release
-# All of the sources participating in the build are defined here
-# -include sources.mk
-OBJS :=
-C_DEPS :=
-# Every subdirectory with source files must be described here
-SRCDIR := src
-# -include subdir.mk
-# Add inputs and outputs from these tool invocations to the build variables
-C_SRCS += $(wildcard $(SRCDIR)/*.c)
-#OBJS += $(wildcard $(TARGETDIR)/*.o)
-OBJS += $(patsubst $(SRCDIR)/%.c,$(TARGETDIR)/%.o,$(C_SRCS))
-C_DEPS += $(wildcard $(TARGETDIR)/*.d)
 
 OCLH_BUILDER_NAME  := oclh_br
 OCLH_COMPILER_NAME := oclh_cr
 OCLH_LINKER_NAME   := oclh_lr
 OCLH_LIBRARY_NAME  := liboclh.so
 
+RM          := rm -rf
+CC          := gcc
+LINKER      := gcc
+CFLAGS      := -std=c11 -pedantic -Wall -Wextra -Wconversion
+LDFLAGS     := -L/usr/local/cuda/lib64 -L/opt/intel/opencl/lib64
+OUTPUTFLAGS := -c -fmessage-length=0
+MISCFLAGS   := -pthread
+INCLUDES    := -I"src/include_h/" -I"src/include_hd/" \
+               -I"/usr/local/cuda/include"
+LIBS        := -lOpenCL
+DEFS        :=
+
+# Every subdirectory with source files must be described here
+SRCDIR := src
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += $(wildcard $(SRCDIR)/*.c)
+
+TARGETDIR_BR := $(TARGETDIR)/br.o
+OBJS_BR   += $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_BR)/%.o,$(C_SRCS))
+C_DEPS_BR :=
+C_DEPS_BR += $(wildcard $(TARGETDIR_BR)/*.d)
+TARGETDIR_CR := $(TARGETDIR)/cr.o
+OBJS_CR   += $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_CR)/%.o,$(C_SRCS))
+C_DEPS_CR :=
+C_DEPS_CR += $(wildcard $(TARGETDIR_CR)/*.d)
+TARGETDIR_LR := $(TARGETDIR)/lr.o
+OBJS_LR   += $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_LR)/%.o,$(C_SRCS))
+C_DEPS_LR :=
+C_DEPS_LR += $(wildcard $(TARGETDIR_LR)/*.d)
+TARGETDIR_LIB := $(TARGETDIR)/lib.o
+OBJS_LIB   += $(patsubst $(SRCDIR)/%.c,$(TARGETDIR_LIB)/%.o,$(C_SRCS))
+C_DEPS_LIB :=
+C_DEPS_LIB += $(wildcard $(TARGETDIR_LIB)/*.d)
+
 # Each subdirectory must supply rules for building sources it contributes
-$(TARGETDIR)/%.o: $(SRCDIR)/%.c
-	@echo 'Building file: $<'
-	@echo 'Invoking: GCC C Compiler'
-	mkdir -p $(TARGETDIR); \
+$(TARGETDIR_BR)/%.o: $(SRCDIR)/%.c
+	mkdir -p $(TARGETDIR_BR); \
 	$(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \
-	-MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" \
-	-o "$@" "$<"
-	@echo 'Finished building: $<'
-	@echo ' '
-# -include objects.mk
-USER_OBJS :=
-LIBS := -lOpenCL
+	-MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
+$(TARGETDIR_CR)/%.o: $(SRCDIR)/%.c
+	mkdir -p $(TARGETDIR_CR); \
+	$(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \
+	-MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
+$(TARGETDIR_LR)/%.o: $(SRCDIR)/%.c
+	mkdir -p $(TARGETDIR_LR); \
+	$(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \
+	-MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
+$(TARGETDIR_LIB)/%.o: $(SRCDIR)/%.c
+	mkdir -p $(TARGETDIR_LIB); \
+	$(CC) $(INCLUDES) $(MODEFLAGS) $(CFLAGS) $(DEFS) $(OUTPUTFLAGS) \
+	-MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
 
-ifneq ($(MAKECMDGOALS),clean)
-ifneq ($(strip $(C_DEPS)),)
--include $(C_DEPS)
-endif
-endif
-# Add inputs and outputs from these tool invocations to the build variables 
+# Add inputs and outputs from these tool invocations to the build variables
 # All Target
-all: oclh_builder
+all: oclh_compiler oclh_builder
 # Tool invocations
 oclh_builder: DEFS= -D__OCLH_BUILDER_FLAG -D__OCLH_BUILD_LOG_TO_STDOUT_FLAG
 oclh_builder: OUTPUTNAME=$(OCLH_BUILDER_NAME)
-oclh_builder: $(OBJS) $(USER_OBJS)
+oclh_builder: $(OBJS_BR)
 	@echo 'Building target: $@'
 	@echo 'Invoking C Linker'
-	$(LINKER) $(LDFLAGS) $(MISCFLAGS) $(LIBS) \
-	-o "$(TARGETDIR)/$(OUTPUTNAME)" $(OBJS) $(USER_OBJS)
+	$(LINKER) $(LDFLAGS) $(MISCFLAGS) $(LIBS) $(OBJS_BR) \
+	-o "$(TARGETDIR)/$(OUTPUTNAME)"
+	@echo 'Finished building target: $@'
+	@echo ' '
+oclh_compiler: DEFS= -D__OCLH_COMPILER_ONLY_FLAG -D__OCLH_BUILD_LOG_TO_STDOUT_FLAG
+oclh_compiler: OUTPUTNAME=$(OCLH_COMPILER_NAME)
+oclh_compiler: $(OBJS_CR)
+	@echo 'Building target: $@'
+	@echo 'Invoking C Linker'
+	$(LINKER) $(LDFLAGS) $(MISCFLAGS) $(LIBS) $(OBJS_CR) \
+	-o "$(TARGETDIR)/$(OUTPUTNAME)"
 	@echo 'Finished building target: $@'
 	@echo ' '
-# Other Targets
 clean:
-	$(RM) $(OBJS)$(C_DEPS) \
+	$(RM) \
+	$(OBJS_BR)$(C_DEPS_BR)$(TARGETDIR_BR) \
+	$(OBJS_CR)$(C_DEPS_CR)$(TARGETDIR_CR) \
+	$(OBJS_LR)$(C_DEPS_LR)$(TARGETDIR_LR) \
+	$(OBJS_LIB)$(C_DEPS_LIB)$(TARGETDIR_LIB) \
 	$(TARGETDIR)/$(OCLH_BUILDER_NAME) \
 	$(TARGETDIR)/$(OCLH_COMPILER_NAME) \
 	$(TARGETDIR)/$(OCLH_LINKER_NAME) \
 	$(TARGETDIR)/$(OCLH_LIBRARY_NAME)
 	@echo ' '
 
-.PHONY: all clean dependents
+.PHONY: all clean
+
 
 -include makefile.targets

+ 7 - 0
examples/simple_kernel/function.clc

@@ -0,0 +1,7 @@
+#include <function.clh>
+
+float function(float a, float b) {
+    float r=0.0f;
+    r=a*b;
+    return(r);
+}

+ 2 - 0
examples/simple_kernel/inc/function.clh

@@ -0,0 +1,2 @@
+
+float function(float a, float b);

+ 4 - 1
examples/simple_kernel/simple_kernel.clc

@@ -1,7 +1,10 @@
+#include <function.clh>
+
 __kernel void krSimpleKernel(__global  float* pA,
                              __global  float* pB,
                              __private long unsigned int size) {
     long unsigned int idx=get_global_id(0);
-    if(idx<size) pB[idx]=pA[idx]*pA[idx];
+    if(idx<size)
+        pB[idx]=function(pA[idx],pA[idx]);
     return;
 }

+ 6 - 2
src/include_h/oclh_h_ws_base.h

@@ -61,7 +61,9 @@ int32_t _ghf_genrWS(      _GHT_WRKSET*  const pwSet,
                     const char*         const pcOCLBuildOpts,
                     const _GHE_LOGLVL         LogLvl,
                     const _GHE_BUILD_LOG_MODE BuildLogMode
-#if defined(__OCLH_BUILDER_FLAG) || defined(__OCLH_COMPILER_ONLY_FLAG) || defined(__OCLH_LINKER_ONLY_FLAG)
+#if defined(__OCLH_BUILDER_FLAG) || \
+    defined(__OCLH_COMPILER_ONLY_FLAG) || \
+    defined(__OCLH_LINKER_ONLY_FLAG)
                   ,       char*        const  pcOutputPrefix
 #endif /* defined(__OCLH_BUILDER_FLAG) ||
           defined(__OCLH_COMPILER_ONLY_FLAG) ||
@@ -125,7 +127,9 @@ int32_t _ghf_genrAWSs(      _GHT_AWSS*  const pAWSs,
                       const void*       const pvCLProgramSources,
                       const _GHE_SRCTYPE      SourceType,
                       const char*       const OCLBuildOpts
-#if defined(__OCLH_BUILDER_FLAG) || defined(__OCLH_COMPILER_ONLY_FLAG) || defined(__OCLH_LINKER_ONLY_FLAG)
+#if defined(__OCLH_BUILDER_FLAG) || \
+    defined(__OCLH_COMPILER_ONLY_FLAG) || \
+    defined(__OCLH_LINKER_ONLY_FLAG)
                     ,       char*       const pcOutputPrefix
 #endif /* defined(__OCLH_BUILDER_FLAG) ||
           defined(__OCLH_COMPILER_ONLY_FLAG) ||

+ 12 - 17
src/oclh_cc.c

@@ -73,13 +73,6 @@ int32_t main(int32_t argc, char *argv[]) {
             }
         }
     }
-    {
-        cl_uint c=0u;
-        printf("dev lst idxs: ");
-        for(c=0u;DevLstDesc.pcluIdxs && DevLstDesc.pcluIdxs[c]!=(cl_uint)(-1);c++)
-            printf("%u ", DevLstDesc.pcluIdxs[c]);
-        printf("\ndev lst mask: |%s|\n",DevLstDesc.pcWC?DevLstDesc.pcWC:"");
-    }
     if(pcOutputPrefix) {
         __ghf_removePreNPostSpacesFromCharPtr(pcOutputPrefix);
         __ghf_replaceSpacesWithUnderscoreInCharPtr(pcOutputPrefix);
@@ -95,7 +88,17 @@ int32_t main(int32_t argc, char *argv[]) {
         fprintf(stderr, "No source files specified\n");
         return(1);
     }
-    err=_ghf_genrLog(&Log,_GHM_OCLH_BUILDER_LOG_FILENAME);
+    err=_ghf_genrLog(&Log,
+#if defined(__OCLH_BUILDER_FLAG)
+                     _GHM_OCLH_BUILDER_LOG_FILENAME
+#endif /* defined(__OCLH_BUILDER_FLAG) */
+#if defined(__OCLH_COMPILER_ONLY_FLAG)
+                     _GHM_OCLH_COMPILER_LOG_FILENAME
+#endif /* defined(__OCLH_COMPILER_ONLY_FLAG) */
+#if defined(__OCLH_LINKER_ONLY_FLAG)
+                     _GHM_OCLH_LINKER_LOG_FILENAME
+#endif /* defined(__OCLH_LINKER_ONLY_FLAG) */
+                    );
     if(err) {
         _ghf_wipeDevLstDesc(&DevLstDesc);
         _ghf_wipeCharPtrList(&ppcSrcFilenames);
@@ -124,15 +127,7 @@ int32_t main(int32_t argc, char *argv[]) {
 #if defined(__OCLH_LINKER_ONLY_FLAG)
                           _GHE_SEPARATED_OBJECTS,
 #endif /* defined(__OCLH_LINKER_ONLY_FLAG) */
-                          pcOCLBuildOpts
-#if defined(__OCLH_BUILDER_FLAG) || \
-    defined(__OCLH_COMPILER_ONLY_FLAG) || \
-    defined(__OCLH_LINKER_ONLY_FLAG)
-                        , pcOutputPrefix
-#endif /* defined(__OCLH_BUILDER_FLAG) ||
-          defined(__OCLH_COMPILER_ONLY_FLAG) ||
-          defined(__OCLH_LINKER_ONLY_FLAG) */
-                                          );
+                          pcOCLBuildOpts, pcOutputPrefix);
         _ghf_wipeDevLstDesc(&DevLstDesc);
         _ghf_wipeCharPtrList(&ppcSrcFilenames);
         _ghf_wipeCharPtrList(&ppcSources);

+ 14 - 4
src/oclh_h_ws_base.c

@@ -237,7 +237,9 @@ int32_t _ghf_genrWS(      _GHT_WRKSET* const  pwSet,
                         char pcSepLogFileName[_GHM_MAX_PATH_LENGTH]="\0",
                              pcTextProgramID[_GHM_MAX_PATH_LENGTH]="\0";
                         __ghf_setWS_TextProgramId(*pwSet, pcTextProgramID,
-#if defined(__OCLH_BUILDER_FLAG) || defined(__OCLH_COMPILER_ONLY_FLAG) || defined(__OCLH_LINKER_ONLY_FLAG)
+#if defined(__OCLH_BUILDER_FLAG) || \
+    defined(__OCLH_COMPILER_ONLY_FLAG) || \
+    defined(__OCLH_LINKER_ONLY_FLAG)
                                               pcOutputPrefix);
 #else
                                               NULL);
@@ -793,7 +795,12 @@ int32_t _ghf_saveWS_ProgramBinaries(_GHT_WRKSET wSet,
             char pcBinFileName[_GHM_MAX_PATH_LENGTH]="\0",
                  pcTextProgramID[_GHM_MAX_PATH_LENGTH]="\0";
             __ghf_setWS_TextProgramId(wSet, pcTextProgramID, pcOutputPrefix);
-            snprintf(pcBinFileName, _GHM_MAX_PATH_LENGTH,"%s/%s.%lu.clb",
+            snprintf(pcBinFileName, _GHM_MAX_PATH_LENGTH,
+#if defined(__OCLH_COMPILER_ONLY_FLAG)
+                     "%s/%s.%lu.clo",
+#else
+                     "%s/%s.%lu.clb",
+#endif /* defined(__OCLH_COMPILER_ONLY_FLAG) */
                      _GHM_LOG_PATH, pcTextProgramID, i);
             pFile=fopen(pcBinFileName,"wb");
             if(!pFile) {
@@ -1070,10 +1077,13 @@ int32_t _ghf_genrAWSs(      _GHT_AWSS*  const pAWSs,
             err=_ghf_genrWS(&pAWSs->pWSet[pAWSs->u64NofWSs], Log, 0,
                             (TmpDevLstDesc.pcluIdxs)?
                                 DevLst[TmpDevLstDesc.pcluIdxs[i]]:
-                                DevLst[DevLstDesc.pcluIdxs[i]],
+                                DevLst[DevLstDesc.pcluIdxs?
+                                           DevLstDesc.pcluIdxs[i]:i],
                             pvCLProgramSources, SourceType, OCLBuildOpts,
                             pAWSs->LogLevel, pAWSs->BuildLogMode
-#if defined(__OCLH_BUILDER_FLAG) || defined(__OCLH_COMPILER_ONLY_FLAG) || defined(__OCLH_LINKER_ONLY_FLAG)
+#if defined(__OCLH_BUILDER_FLAG) || \
+    defined(__OCLH_COMPILER_ONLY_FLAG) || \
+    defined(__OCLH_LINKER_ONLY_FLAG)
                           , pcOutputPrefix
 #endif /* defined(__OCLH_BUILDER_FLAG) ||
           defined(__OCLH_COMPILER_ONLY_FLAG) ||