Add script to automatically build all programs
This commit is contained in:
parent
e74aafb0d6
commit
2991e33218
|
@ -27,7 +27,7 @@
|
|||
/*/CMakeUserPresets.json
|
||||
|
||||
# Nested build directory
|
||||
/build*
|
||||
/build*/
|
||||
/install*
|
||||
|
||||
#==============================================================================#
|
||||
|
|
|
@ -0,0 +1,180 @@
|
|||
#!/usr/bin/bash
|
||||
|
||||
DIR=$(cd "$(dirname "${0}")" &> /dev/null && (pwd -W 2> /dev/null || pwd))
|
||||
VENTUS_BUILD_DIR=${DIR}/build
|
||||
LIBCLC_BUILD_DIR=${DIR}/build-libclc
|
||||
VENTUS_INSTALL_PREFIX=${DIR}/install
|
||||
PROGRAMS_TOBUILD=(llvm-ventus pocl ocl-icd libclc)
|
||||
|
||||
# Helper function
|
||||
help() {
|
||||
cat <<END
|
||||
|
||||
Build llvm-ventus, pocl, ocl-icd, libclc programs
|
||||
Read ${DIR}/README.md to get started.
|
||||
|
||||
Usage: ${DIR}/$(basename ${0})
|
||||
[--build <build programs>]
|
||||
[--help | -h]
|
||||
|
||||
Options:
|
||||
--build <build programs>
|
||||
Chosen programs to build : llvm-ventus, pocl, ocl-icd, libclc
|
||||
Option format : "llvm-ventus;pocl", string are seperated by semicolon
|
||||
Default : "llvm-ventus;pocl;ocl-icd;libclc"
|
||||
|
||||
--help | -h
|
||||
Print this help message and exit.
|
||||
|
||||
END
|
||||
}
|
||||
|
||||
# Parse command line options
|
||||
while [ $# -gt 0 ]; do
|
||||
case $1 in
|
||||
-h | --help)
|
||||
help
|
||||
exit 0
|
||||
;;
|
||||
|
||||
--build)
|
||||
shift
|
||||
if [ ! -z "${1}" ];then
|
||||
PROGRAMS_TOBUILD=(${1//;/ })
|
||||
fi
|
||||
;;
|
||||
|
||||
?*)
|
||||
echo "Invalid options: \"$1\" , try ${DIR}/$(basename ${0}) --help for help"
|
||||
exit -1
|
||||
;;
|
||||
esac
|
||||
# Process next command-line option
|
||||
shift
|
||||
done
|
||||
|
||||
# Need to get the pocl folder from enviroment variables
|
||||
if [ -z "${POCL_DIR}" ]; then
|
||||
POCL_DIR=${DIR}/../pocl
|
||||
fi
|
||||
if [ ! -d "${POCL_DIR}" ]; then
|
||||
echo "pocl folder not found, please set or check!"
|
||||
echo "Default folder is set to be $(realpath ${POCL_DIR})"
|
||||
exit 1
|
||||
fi
|
||||
POCL_BUILD_DIR=${POCL_DIR}/build
|
||||
|
||||
# Need to get the icd_loader folder from enviroment variables
|
||||
if [ -z "${OCL_ICD_DIR}" ]; then
|
||||
OCL_ICD_DIR=${DIR}/../ocl-icd
|
||||
fi
|
||||
if [ ! -d "${OCL_ICD_DIR}" ]; then
|
||||
echo "ocl icd folder not found, please set or check"
|
||||
echo "Default folder is set to be $(realpath ${OCL_ICD_DIR})"
|
||||
exit 1
|
||||
fi
|
||||
OCL_ICD_BUILD_DIR=${OCL_ICD_DIR}/build
|
||||
|
||||
# Build llvm-ventus
|
||||
build_ventus() {
|
||||
if [ ! -d "${VENTUS_BUILD_DIR}" ]; then
|
||||
mkdir ${VENTUS_BUILD_DIR}
|
||||
fi
|
||||
cd ${VENTUS_BUILD_DIR}
|
||||
cmake -G Ninja -B ${VENTUS_BUILD_DIR} ${DIR}/llvm \
|
||||
-DLLVM_CCACHE_BUILD=ON \
|
||||
-DLLVM_OPTIMIZED_TABLEGEN=ON \
|
||||
-DLLVM_PARALLEL_LINK_JOBS=12 \
|
||||
-DCMAKE_BUILD_TYPE=Debug \
|
||||
-DLLVM_ENABLE_PROJECTS="clang;lld;libclc" \
|
||||
-DLLVM_TARGETS_TO_BUILD="AMDGPU;X86;RISCV" \
|
||||
-DLLVM_TARGET_ARCH=riscv32 \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DLLVM_BUILD_LLVM_DYLIB=ON \
|
||||
-DCMAKE_INSTALL_PREFIX=${VENTUS_INSTALL_PREFIX}
|
||||
ninja
|
||||
ninja install
|
||||
}
|
||||
|
||||
# Build pocl from THU
|
||||
build_pocl() {
|
||||
if [ ! -d "${POCL_BUILD_DIR}" ]; then
|
||||
mkdir ${POCL_BUILD_DIR}
|
||||
fi
|
||||
cd ${POCL_BUILD_DIR}
|
||||
cmake -G Ninja -B ${POCL_BUILD_DIR} ${POCL_DIR} \
|
||||
-DENABLE_HOST_CPU_DEVICES=OFF \
|
||||
-DENABLE_VENTUS=ON \
|
||||
-DENABLE_ICD=ON \
|
||||
-DDEFAULT_ENABLE_ICD=ON \
|
||||
-DENABLE_TESTS=OFF \
|
||||
-DSTATIC_LLVM=OFF \
|
||||
-DCMAKE_C_COMPILER=clang \
|
||||
-DCMAKE_CXX_COMPILER=clang++ \
|
||||
-DCMAKE_INSTALL_PREFIX=${VENTUS_INSTALL_PREFIX}
|
||||
ninja
|
||||
ninja install
|
||||
}
|
||||
|
||||
# Build libclc for pocl
|
||||
build_libclc() {
|
||||
if [ ! -d "${LIBCLC_BUILD_DIR}" ]; then
|
||||
mkdir ${LIBCLC_BUILD_DIR}
|
||||
fi
|
||||
cd ${LIBCLC_BUILD_DIR}
|
||||
cmake -G Ninja -B ${LIBCLC_BUILD_DIR} ${DIR}/libclc \
|
||||
-DCMAKE_LLAsm_COMPILER_WORKS=ON \
|
||||
-DCMAKE_CLC_COMPILER_WORKS=ON \
|
||||
-DCMAKE_CLC_COMPILER_FORCED=ON \
|
||||
-DCMAKE_LLAsm_FLAGS="-target riscv32 -mcpu=ventus-gpgpu" \
|
||||
-DLIBCLC_TARGETS_TO_BUILD="riscv32--" \
|
||||
-DCMAKE_CXX_FLAGS="-I ${DIR}/llvm/include/ -std=c++17" \
|
||||
-DCMAKE_C_COMPILER=clang \
|
||||
-DCMAKE_CXX_COMPILER=clang++ \
|
||||
-DCMAKE_INSTALL_PREFIX=${VENTUS_INSTALL_PREFIX}
|
||||
ninja
|
||||
ninja install
|
||||
DstDir=${VENTUS_INSTALL_PREFIX}/share/pocl
|
||||
if [ ! -d "${DstDir}" ]; then
|
||||
mkdir -p ${DstDir}
|
||||
fi
|
||||
# TODO: make this copy process done during libclc build process?
|
||||
cp ${LIBCLC_BUILD_DIR}/riscv32--.bc ${DstDir}/kernel-riscv32.bc
|
||||
}
|
||||
|
||||
# Build icd_loader
|
||||
build_icd_loader() {
|
||||
cd ${OCL_ICD_DIR}
|
||||
./bootstrap
|
||||
./configure --prefix=${VENTUS_INSTALL_PREFIX}
|
||||
make && make install
|
||||
}
|
||||
|
||||
# Export needed path and enviroment variables
|
||||
export_elements() {
|
||||
export PATH=${VENTUS_INSTALL_PREFIX}/bin:$PATH
|
||||
export LD_LIBRARY_PATH=${VENTUS_INSTALL_PREFIX}/lib
|
||||
}
|
||||
|
||||
# When no need to build llvm-ventus, export needed elements
|
||||
if [[ ! "${PROGRAMS_TOBUILD[*]}" =~ "llvm-ventus" ]];then
|
||||
export_elements
|
||||
fi
|
||||
|
||||
# Process build options
|
||||
for program in "${PROGRAMS_TOBUILD[@]}"
|
||||
do
|
||||
if [ "${program}" == "llvm-ventus" ];then
|
||||
build_ventus
|
||||
export_elements
|
||||
elif [ "${program}" == "pocl" ]; then
|
||||
build_pocl
|
||||
elif [ "${program}" == "ocl-icd" ];then
|
||||
build_icd_loader
|
||||
elif [ "${program}" == "libclc" ];then
|
||||
build_libclc
|
||||
else
|
||||
echo "Invalid build options: \"${program}\" , try $0 --help for help"
|
||||
exit 1
|
||||
fi
|
||||
done
|
|
@ -43,6 +43,10 @@ set( LIBCLC_TARGETS_TO_BUILD "all"
|
|||
option( ENABLE_RUNTIME_SUBNORMAL "Enable runtime linking of subnormal support."
|
||||
OFF )
|
||||
|
||||
# This will make built library put in lib directory
|
||||
set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX})
|
||||
install(DIRECTORY ${LLVM_LIBRARY_OUTPUT_INTDIR} DESTINATION ${CMAKE_INSTALL_PREFIX})
|
||||
|
||||
find_package(LLVM REQUIRED HINTS "${LLVM_CMAKE_DIR}")
|
||||
include(AddLLVM)
|
||||
|
||||
|
|
|
@ -6,9 +6,20 @@ set(CMAKE_ASM_COMPILER clang)
|
|||
set(CMAKE_ASM_FLAGS ${CMAKE_LLAsm_FLAGS})
|
||||
|
||||
# workitem builtins
|
||||
add_library(workitem STATIC workitem/workitem.S)
|
||||
target_include_directories(workitem PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
llvm_add_library(workitem STATIC workitem/workitem.S)
|
||||
|
||||
# crts
|
||||
add_library(crt0 OBJECT crt0.S)
|
||||
set(LIBNAME "ctr0")
|
||||
set(LIBNAME_OBJ "${LIBNAME}_obj")
|
||||
add_library(${LIBNAME_OBJ} OBJECT crt0.S)
|
||||
add_library(${LIBNAME} SHARED $<TARGET_OBJECTS:${LIBNAME_OBJ}>)
|
||||
|
||||
target_include_directories(workitem PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
# Copy crt0 object library to lib folder to be automatically installed
|
||||
add_custom_command(TARGET ${LIBNAME}
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
$<TARGET_OBJECTS:${LIBNAME_OBJ}>
|
||||
${LLVM_LIBRARY_OUTPUT_INTDIR}/crt0.o
|
||||
)
|
Loading…
Reference in New Issue