summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend/CMakeLists.txt6
-rw-r--r--backend/src/CMakeLists.txt8
-rw-r--r--backend/src/GBEConfig.h.in2
-rw-r--r--backend/src/backend/program.cpp22
-rw-r--r--docs/Beignet.mdwn20
-rw-r--r--src/CMakeLists.txt3
-rw-r--r--utests/CMakeLists.txt11
-rw-r--r--utests/setenv.sh.in5
-rw-r--r--utests/utest.cpp2
9 files changed, 58 insertions, 21 deletions
diff --git a/backend/CMakeLists.txt b/backend/CMakeLists.txt
index 476c6f27..dd55a4a6 100644
--- a/backend/CMakeLists.txt
+++ b/backend/CMakeLists.txt
@@ -91,9 +91,15 @@ elseif (COMPILER STREQUAL "ICC")
set (CCMAKE_CXX_FLAGS_MINSIZEREL "-Os -DGBE_DEBUG=0")
set (CMAKE_EXE_LINKER_FLAGS "")
endif ()
+
include_directories (${CMAKE_CURRENT_BINARY_DIR})
##############################################################
# Project source code
##############################################################
add_subdirectory (src)
+set(LOCAL_PCH_OBJECT_DIR ${LOCAL_PCH_OBJECT_DIR} PARENT_SCOPE)
+set(LOCAL_PCM_OBJECT_DIR ${LOCAL_PCM_OBJECT_DIR} PARENT_SCOPE)
+set (GBE_BIN_GENERATER
+ OCL_PCM_PATH=${LOCAL_PCM_OBJECT_DIR} OCL_PCH_PATH=${LOCAL_PCH_OBJECT_DIR} ${CMAKE_CURRENT_BINARY_DIR}/src/gbe_bin_generater
+ PARENT_SCOPE)
diff --git a/backend/src/CMakeLists.txt b/backend/src/CMakeLists.txt
index d19cb50e..d15e7b77 100644
--- a/backend/src/CMakeLists.txt
+++ b/backend/src/CMakeLists.txt
@@ -195,9 +195,13 @@ TARGET_LINK_LIBRARIES(gbe_bin_generater gbe)
install (FILES ${ocl_blob_file} DESTINATION lib/beignet)
install (FILES ${pch_object} DESTINATION lib/beignet)
install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${pcm_lib} DESTINATION lib/beignet)
+# When build beignet itself, we need to export the local precompiled header file and precompiled module
+# file to libcl and utests.
+set (LOCAL_PCH_OBJECT_DIR "${local_pch_object}:${beignet_install_path}/ocl_stdlib.h.pch" PARENT_SCOPE)
+set (LOCAL_PCM_OBJECT_DIR "${CMAKE_CURRENT_BINARY_DIR}/${pcm_lib}:${beignet_install_path}/${pcm_lib}" PARENT_SCOPE)
-set (PCH_OBJECT_DIR "${local_pch_object};${beignet_install_path}/ocl_stdlib.h.pch")
-set (PCM_LIB_DIR "${CMAKE_CURRENT_BINARY_DIR}/${pcm_lib};${beignet_install_path}/${pcm_lib}")
+set (PCH_OBJECT_DIR "${beignet_install_path}/ocl_stdlib.h.pch")
+set (PCM_OBJECT_DIR "${beignet_install_path}/${pcm_lib}")
configure_file (
"GBEConfig.h.in"
"GBEConfig.h"
diff --git a/backend/src/GBEConfig.h.in b/backend/src/GBEConfig.h.in
index 9920d255..5bc09b88 100644
--- a/backend/src/GBEConfig.h.in
+++ b/backend/src/GBEConfig.h.in
@@ -2,4 +2,4 @@
#define LIBGBE_VERSION_MAJOR @LIBGBE_VERSION_MAJOR@
#define LIBGBE_VERSION_MINOR @LIBGBE_VERSION_MINOR@
#define PCH_OBJECT_DIR "@PCH_OBJECT_DIR@"
-#define PCM_LIB_DIR "@PCM_LIB_DIR@"
+#define PCM_OBJECT_DIR "@PCM_OBJECT_DIR@"
diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
index 3ab1bc2d..284a7553 100644
--- a/backend/src/backend/program.cpp
+++ b/backend/src/backend/program.cpp
@@ -465,6 +465,9 @@ namespace gbe {
}
BVAR(OCL_OUTPUT_BUILD_LOG, false);
+ SVAR(OCL_PCH_PATH, PCH_OBJECT_DIR);
+ SVAR(OCL_PCM_PATH, PCM_OBJECT_DIR);
+
static bool buildModuleFromSource(const char* input, const char* output, std::string options,
size_t stringSize, char *err, size_t *errSize) {
// Arguments to pass to the clang frontend
@@ -582,12 +585,13 @@ namespace gbe {
// Create an action and make the compiler instance carry it out
llvm::OwningPtr<clang::CodeGenAction> Act(new clang::EmitLLVMOnlyAction());
- std::string dirs = PCM_LIB_DIR, pcmLib;
+ std::string dirs = OCL_PCM_PATH;
+ std::string pcmFileName;
std::istringstream idirs(dirs);
bool findPcm = false;
- while (getline(idirs, pcmLib, ';')) {
- if(access(pcmLib.c_str(), R_OK) == 0) {
+ while (getline(idirs, pcmFileName, ':')) {
+ if(access(pcmFileName.c_str(), R_OK) == 0) {
findPcm = true;
break;
}
@@ -595,7 +599,7 @@ namespace gbe {
GBE_ASSERT(findPcm && "Could not find pre compiled module library.\n");
- Clang.getCodeGenOpts().LinkBitcodeFile = pcmLib;
+ Clang.getCodeGenOpts().LinkBitcodeFile = pcmFileName;
auto retVal = Clang.ExecuteAction(*Act);
if (err != NULL) {
@@ -651,7 +655,6 @@ namespace gbe {
char clStr[L_tmpnam+1], llStr[L_tmpnam+1];
const std::string clName = std::string(tmpnam_r(clStr)) + ".cl"; /* unsafe! */
const std::string llName = std::string(tmpnam_r(llStr)) + ".ll"; /* unsafe! */
- std::string pchHeaderName;
std::string clOpt;
int optLevel = 1;
@@ -730,11 +733,12 @@ namespace gbe {
clOpt += options;
}
- std::string dirs = PCH_OBJECT_DIR;
+ std::string dirs = OCL_PCH_PATH;
std::istringstream idirs(dirs);
+ std::string pchFileName;
- while (getline(idirs, pchHeaderName, ';')) {
- if(access(pchHeaderName.c_str(), R_OK) == 0) {
+ while (getline(idirs, pchFileName, ':')) {
+ if(access(pchFileName.c_str(), R_OK) == 0) {
findPCH = true;
break;
}
@@ -742,7 +746,7 @@ namespace gbe {
if (usePCH && findPCH) {
clOpt += " -include-pch ";
- clOpt += pchHeaderName;
+ clOpt += pchFileName;
clOpt += " ";
} else
fwrite(ocl_stdlib_str.c_str(), strlen(ocl_stdlib_str.c_str()), 1, clFile);
diff --git a/docs/Beignet.mdwn b/docs/Beignet.mdwn
index d05950fa..e3b4b1b6 100644
--- a/docs/Beignet.mdwn
+++ b/docs/Beignet.mdwn
@@ -70,8 +70,10 @@ this code also produces various tests to ensure the compiler and the run-time
consistency. This small test framework uses a simple c++ registration system to
register all the unit tests.
-You need to set the variable `OCL_KERNEL_PATH` to locate the OCL kernels. They
-are with the run-time in `./kernels`.
+You need to call setenv.sh in the utests/ directory to set some environment variables
+firstly as below:
+
+`> . setenv.sh`
Then in `utests/`:
@@ -83,6 +85,20 @@ will run all the unit tests one after the others
will only run `some_unit_test0` and `some_unit_test1` tests
+How to install
+--------------
+
+Simply invoke:
+`> make install`
+
+It installs libcl.so and the precompiled header/module files and the ocl_stdlib.h file
+into install_prefix/beignet/ direcotry. If the system support ICD, it also installs the
+intel-beignet.icd to /etc/OpenCL/vendors/.
+
+To make beignet support ICD, you need to have the following two packages installed:
+ocl-icd-dev, ocl-icd-libopencl1 (package name for the ubuntu.)
+before your build beignet.
+
Supported Hardware
------------------
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index cf53a698..7d4d93d3 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -4,7 +4,6 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/../backend/src/backend/
${CMAKE_CURRENT_SOURCE_DIR}/../include
${MESA_SOURCE_INCLUDES})
-
macro (MakeKernelBinStr KERNEL_PATH KERNEL_FILES)
foreach (KF ${KERNEL_FILES})
set (input_file ${KERNEL_PATH}/${KF}.cl)
@@ -13,7 +12,7 @@ foreach (KF ${KERNEL_FILES})
add_custom_command(
OUTPUT ${output_file}
COMMAND rm -rf ${output_file}
- COMMAND ${CMAKE_CURRENT_BINARY_DIR}/../backend/src/gbe_bin_generater -s ${input_file} -o${output_file}
+ COMMAND ${GBE_BIN_GENERATER} -s ${input_file} -o${output_file}
DEPENDS ${input_file} ${CMAKE_CURRENT_BINARY_DIR}/../backend/src/gbe_bin_generater)
endforeach (KF)
endmacro (MakeKernelBinStr)
diff --git a/utests/CMakeLists.txt b/utests/CMakeLists.txt
index b1f0b52f..8c64844b 100644
--- a/utests/CMakeLists.txt
+++ b/utests/CMakeLists.txt
@@ -12,6 +12,11 @@ string(REGEX REPLACE "generated/([^\ ]*)\\.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/../
string(REGEX REPLACE " " ";" KERNEL_MATH_LIST ${KERNEL_MATH_LIST})
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "generated;${KERNEL_MATH_LIST}")
+configure_file (
+ "setenv.sh.in"
+ "setenv.sh"
+ )
+
link_directories (${LLVM_LIBRARY_DIR})
set (utests_sources
utest_error.c
@@ -170,7 +175,7 @@ set (utests_sources
SET (kernel_bin ${CMAKE_CURRENT_SOURCE_DIR}/../kernels/compiler_ceil)
ADD_CUSTOM_COMMAND(
OUTPUT ${kernel_bin}.bin
- COMMAND ${CMAKE_CURRENT_BINARY_DIR}/../backend/src/gbe_bin_generater ${kernel_bin}.cl -o${kernel_bin}.bin
+ COMMAND ${GBE_BIN_GENERATER} ${kernel_bin}.cl -o${kernel_bin}.bin
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/../backend/src/gbe_bin_generater ${kernel_bin}.cl
)
@@ -189,8 +194,8 @@ add_custom_target(utest_generator
if (EGL_FOUND AND MESA_SOURCE_FOUND)
SET(utests_sources ${utests_sources} compiler_fill_gl_image.cpp)
-SET(CMAKE_CXX_FLAGS "-DHAS_EGL ${CMAKE_CXX_FLAGS}")
-SET(CMAKE_C_FLAGS "-DHAS_EGL ${CMAKE_C_FLAGS}")
+SET(CMAKE_CXX_FLAGS "-DHAS_EGL ${CMAKE_CXX_FLAGS} ${DEF_OCL_PCH_PCM_PATH}")
+SET(CMAKE_C_FLAGS "-DHAS_EGL ${CMAKE_C_FLAGS} ${DEF_OCL_PCH_PCM_PATH}")
endif (EGL_FOUND AND MESA_SOURCE_FOUND)
ADD_LIBRARY(utests SHARED ${ADDMATHFUNC} ${utests_sources})
diff --git a/utests/setenv.sh.in b/utests/setenv.sh.in
new file mode 100644
index 00000000..ad773695
--- /dev/null
+++ b/utests/setenv.sh.in
@@ -0,0 +1,5 @@
+#!/bin/sh
+#
+export OCL_PCM_PATH=@LOCAL_PCM_OBJECT_DIR@
+export OCL_PCH_PATH=@LOCAL_PCH_OBJECT_DIR@
+export OCL_KERNEL_PATH=@CMAKE_CURRENT_SOURCE_DIR@/../kernels
diff --git a/utests/utest.cpp b/utests/utest.cpp
index 6d51598a..718916f1 100644
--- a/utests/utest.cpp
+++ b/utests/utest.cpp
@@ -41,8 +41,6 @@ UTest::UTest(Function fn, const char *name, bool haveIssue, bool needDestroyProg
utestList->push_back(*this);
}
-UTest::UTest(void) : fn(NULL), name(NULL), haveIssue(false) {}
-
static bool strequal(const char *s1, const char *s2) {
if (strcmp(s1, s2) == 0) return true;
return false;