diff --git a/README-LLVM.md b/README-LLVM.md new file mode 100644 index 000000000000..1273ba17c2fa --- /dev/null +++ b/README-LLVM.md @@ -0,0 +1,122 @@ +# The LLVM Compiler Infrastructure + +This directory and its sub-directories contain the source code for LLVM, +a toolkit for the construction of highly optimized compilers, +optimizers, and run-time environments. + +The README briefly describes how to get started with building LLVM. +For more information on how to contribute to the LLVM project, please +take a look at the +[Contributing to LLVM](https://llvm.org/docs/Contributing.html) guide. + +## Getting Started with the LLVM System + +Taken from [here](https://llvm.org/docs/GettingStarted.html). + +### Overview + +Welcome to the LLVM project! + +The LLVM project has multiple components. The core of the project is +itself called "LLVM". This contains all of the tools, libraries, and header +files needed to process intermediate representations and convert them into +object files. Tools include an assembler, disassembler, bitcode analyzer, and +bitcode optimizer. It also contains basic regression tests. + +C-like languages use the [Clang](http://clang.llvm.org/) frontend. This +component compiles C, C++, Objective-C, and Objective-C++ code into LLVM bitcode +-- and from there into object files, using LLVM. + +Other components include: +the [libc++ C++ standard library](https://libcxx.llvm.org), +the [LLD linker](https://lld.llvm.org), and more. + +### Getting the Source Code and Building LLVM + +The LLVM Getting Started documentation may be out of date. The [Clang +Getting Started](http://clang.llvm.org/get_started.html) page might have more +accurate information. + +This is an example work-flow and configuration to get and build the LLVM source: + +1. Checkout LLVM (including related sub-projects like Clang): + + * ``git clone https://github.com/llvm/llvm-project.git`` + + * Or, on windows, ``git clone --config core.autocrlf=false + https://github.com/llvm/llvm-project.git`` + +2. Configure and build LLVM and Clang: + + * ``cd llvm-project`` + + * ``cmake -S llvm -B build -G [options]`` + + Some common build system generators are: + + * ``Ninja`` --- for generating [Ninja](https://ninja-build.org) + build files. Most llvm developers use Ninja. + * ``Unix Makefiles`` --- for generating make-compatible parallel makefiles. + * ``Visual Studio`` --- for generating Visual Studio projects and + solutions. + * ``Xcode`` --- for generating Xcode projects. + + Some common options: + + * ``-DLLVM_ENABLE_PROJECTS='...'`` and ``-DLLVM_ENABLE_RUNTIMES='...'`` --- + semicolon-separated list of the LLVM sub-projects and runtimes you'd like to + additionally build. ``LLVM_ENABLE_PROJECTS`` can include any of: clang, + clang-tools-extra, cross-project-tests, flang, libc, libclc, lld, lldb, + mlir, openmp, polly, or pstl. ``LLVM_ENABLE_RUNTIMES`` can include any of + libcxx, libcxxabi, libunwind, compiler-rt, libc or openmp. Some runtime + projects can be specified either in ``LLVM_ENABLE_PROJECTS`` or in + ``LLVM_ENABLE_RUNTIMES``. + + For example, to build LLVM, Clang, libcxx, and libcxxabi, use + ``-DLLVM_ENABLE_PROJECTS="clang" -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi"``. + + * ``-DCMAKE_INSTALL_PREFIX=directory`` --- Specify for *directory* the full + path name of where you want the LLVM tools and libraries to be installed + (default ``/usr/local``). Be careful if you install runtime libraries: if + your system uses those provided by LLVM (like libc++ or libc++abi), you + must not overwrite your system's copy of those libraries, since that + could render your system unusable. In general, using something like + ``/usr`` is not advised, but ``/usr/local`` is fine. + + * ``-DCMAKE_BUILD_TYPE=type`` --- Valid options for *type* are Debug, + Release, RelWithDebInfo, and MinSizeRel. Default is Debug. + + * ``-DLLVM_ENABLE_ASSERTIONS=On`` --- Compile with assertion checks enabled + (default is Yes for Debug builds, No for all other build types). + + * ``cmake --build build [-- [options] ]`` or your build system specified above + directly. + + * The default target (i.e. ``ninja`` or ``make``) will build all of LLVM. + + * The ``check-all`` target (i.e. ``ninja check-all``) will run the + regression tests to ensure everything is in working order. + + * CMake will generate targets for each tool and library, and most + LLVM sub-projects generate their own ``check-`` target. + + * Running a serial build will be **slow**. To improve speed, try running a + parallel build. That's done by default in Ninja; for ``make``, use the option + ``-j NNN``, where ``NNN`` is the number of parallel jobs to run. + In most cases, you get the best performance if you specify the number of CPU threads you have. + On some Unix systems, you can specify this with ``-j$(nproc)``. + + * For more information see [CMake](https://llvm.org/docs/CMake.html). + +Consult the +[Getting Started with LLVM](https://llvm.org/docs/GettingStarted.html#getting-started-with-llvm) +page for detailed information on configuring and compiling LLVM. You can visit +[Directory Layout](https://llvm.org/docs/GettingStarted.html#directory-layout) +to learn about the layout of the source code tree. + +## Getting in touch + +Join [LLVM Discourse forums](https://discourse.llvm.org/), [discord chat](https://discord.gg/xS7Z362) or #llvm IRC channel on [OFTC](https://oftc.net/). + +The LLVM project has adopted a [code of conduct](https://llvm.org/docs/CodeOfConduct.html) for +participants to all modes of communication within the project. diff --git a/README.md b/README.md index 1273ba17c2fa..5e053bd7f409 100644 --- a/README.md +++ b/README.md @@ -1,122 +1,32 @@ -# The LLVM Compiler Infrastructure +# This is the Ventus GPGPU port of LLVM Compiler Infrastructure -This directory and its sub-directories contain the source code for LLVM, -a toolkit for the construction of highly optimized compilers, -optimizers, and run-time environments. +Ventus GPGPU is based on RISCV RV32IMAZfinxZve32f ISA with fully redefinition the concept of V-extension. -The README briefly describes how to get started with building LLVM. -For more information on how to contribute to the LLVM project, please -take a look at the -[Contributing to LLVM](https://llvm.org/docs/Contributing.html) guide. +For more architecture detail, please refer to +[Ventus GPGPU Arch](https://github.com/THU-DSP-LAB/ventus-gpgpu/blob/master/docs/Ventus-GPGPU-doc.md) -## Getting Started with the LLVM System +## Getting Started -Taken from [here](https://llvm.org/docs/GettingStarted.html). +### Build the toolchain -### Overview +``` +git clone https://github.com/THU-DSP-LAB/llvm-project.git +cd llvm-project +mkdir build && cd build +cmake -DCMAKE_BUILD_TYPE=Debug -DLLVM_ENABLE_PROJECTS="clang;lld;libclc" -DLLVM_TARGETS_TO_BUILD="RISCV" -DCMAKE_INSTALL_PREFIX=../install -G Ninja ../llvm +``` -Welcome to the LLVM project! +### Compile a OpenCL C program into Ventus GPGPU assembly -The LLVM project has multiple components. The core of the project is -itself called "LLVM". This contains all of the tools, libraries, and header -files needed to process intermediate representations and convert them into -object files. Tools include an assembler, disassembler, bitcode analyzer, and -bitcode optimizer. It also contains basic regression tests. +vector_add.cl: -C-like languages use the [Clang](http://clang.llvm.org/) frontend. This -component compiles C, C++, Objective-C, and Objective-C++ code into LLVM bitcode --- and from there into object files, using LLVM. +``` +__kernel void vectorAdd(__global float* A, __global float* B) { + unsigned tid = get_global_id(0); + A[tid] += B[tid]; +} +``` -Other components include: -the [libc++ C++ standard library](https://libcxx.llvm.org), -the [LLD linker](https://lld.llvm.org), and more. - -### Getting the Source Code and Building LLVM - -The LLVM Getting Started documentation may be out of date. The [Clang -Getting Started](http://clang.llvm.org/get_started.html) page might have more -accurate information. - -This is an example work-flow and configuration to get and build the LLVM source: - -1. Checkout LLVM (including related sub-projects like Clang): - - * ``git clone https://github.com/llvm/llvm-project.git`` - - * Or, on windows, ``git clone --config core.autocrlf=false - https://github.com/llvm/llvm-project.git`` - -2. Configure and build LLVM and Clang: - - * ``cd llvm-project`` - - * ``cmake -S llvm -B build -G [options]`` - - Some common build system generators are: - - * ``Ninja`` --- for generating [Ninja](https://ninja-build.org) - build files. Most llvm developers use Ninja. - * ``Unix Makefiles`` --- for generating make-compatible parallel makefiles. - * ``Visual Studio`` --- for generating Visual Studio projects and - solutions. - * ``Xcode`` --- for generating Xcode projects. - - Some common options: - - * ``-DLLVM_ENABLE_PROJECTS='...'`` and ``-DLLVM_ENABLE_RUNTIMES='...'`` --- - semicolon-separated list of the LLVM sub-projects and runtimes you'd like to - additionally build. ``LLVM_ENABLE_PROJECTS`` can include any of: clang, - clang-tools-extra, cross-project-tests, flang, libc, libclc, lld, lldb, - mlir, openmp, polly, or pstl. ``LLVM_ENABLE_RUNTIMES`` can include any of - libcxx, libcxxabi, libunwind, compiler-rt, libc or openmp. Some runtime - projects can be specified either in ``LLVM_ENABLE_PROJECTS`` or in - ``LLVM_ENABLE_RUNTIMES``. - - For example, to build LLVM, Clang, libcxx, and libcxxabi, use - ``-DLLVM_ENABLE_PROJECTS="clang" -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi"``. - - * ``-DCMAKE_INSTALL_PREFIX=directory`` --- Specify for *directory* the full - path name of where you want the LLVM tools and libraries to be installed - (default ``/usr/local``). Be careful if you install runtime libraries: if - your system uses those provided by LLVM (like libc++ or libc++abi), you - must not overwrite your system's copy of those libraries, since that - could render your system unusable. In general, using something like - ``/usr`` is not advised, but ``/usr/local`` is fine. - - * ``-DCMAKE_BUILD_TYPE=type`` --- Valid options for *type* are Debug, - Release, RelWithDebInfo, and MinSizeRel. Default is Debug. - - * ``-DLLVM_ENABLE_ASSERTIONS=On`` --- Compile with assertion checks enabled - (default is Yes for Debug builds, No for all other build types). - - * ``cmake --build build [-- [options] ]`` or your build system specified above - directly. - - * The default target (i.e. ``ninja`` or ``make``) will build all of LLVM. - - * The ``check-all`` target (i.e. ``ninja check-all``) will run the - regression tests to ensure everything is in working order. - - * CMake will generate targets for each tool and library, and most - LLVM sub-projects generate their own ``check-`` target. - - * Running a serial build will be **slow**. To improve speed, try running a - parallel build. That's done by default in Ninja; for ``make``, use the option - ``-j NNN``, where ``NNN`` is the number of parallel jobs to run. - In most cases, you get the best performance if you specify the number of CPU threads you have. - On some Unix systems, you can specify this with ``-j$(nproc)``. - - * For more information see [CMake](https://llvm.org/docs/CMake.html). - -Consult the -[Getting Started with LLVM](https://llvm.org/docs/GettingStarted.html#getting-started-with-llvm) -page for detailed information on configuring and compiling LLVM. You can visit -[Directory Layout](https://llvm.org/docs/GettingStarted.html#directory-layout) -to learn about the layout of the source code tree. - -## Getting in touch - -Join [LLVM Discourse forums](https://discourse.llvm.org/), [discord chat](https://discord.gg/xS7Z362) or #llvm IRC channel on [OFTC](https://oftc.net/). - -The LLVM project has adopted a [code of conduct](https://llvm.org/docs/CodeOfConduct.html) for -participants to all modes of communication within the project. +``` +clang -cl-std=CL2.0 -target riscv32 -mcpu=ventus-gpgpu -O1 -S vector_add.cl -o vector_add.s +```