diff options
-rw-r--r-- | backend/CMakeLists.txt | 6 | ||||
-rw-r--r-- | backend/src/CMakeLists.txt | 8 | ||||
-rw-r--r-- | backend/src/GBEConfig.h.in | 2 | ||||
-rw-r--r-- | backend/src/backend/program.cpp | 22 | ||||
-rw-r--r-- | docs/Beignet.mdwn | 20 | ||||
-rw-r--r-- | src/CMakeLists.txt | 3 | ||||
-rw-r--r-- | utests/CMakeLists.txt | 11 | ||||
-rw-r--r-- | utests/setenv.sh.in | 5 | ||||
-rw-r--r-- | utests/utest.cpp | 2 |
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; |