No longer specifically managing toolchain for if project system exists

This commit is contained in:
Lily Tsuru 2023-07-17 03:01:10 -04:00
parent e73f31818e
commit 20c15f4291
4 changed files with 25 additions and 80 deletions

View File

@ -1,31 +0,0 @@
# global arguments
ARG LLVM_SOURCE_URL="https://github.com/llvm/llvm-project/releases/download/llvmorg-16.0.0/llvm-project-16.0.0.src.tar.xz"
ARG LLVM_VERSION="16"
# the base layer.
FROM debian:oldstable AS base
ENV DEBIAN_FRONTEND="noninteractive"
RUN apt-get update
# base layer for building anything
FROM base AS build-base
WORKDIR /build
ARG BUILD_DEPS="curl ca-certificates build-essential python3 cmake ninja-build pkg-config git zlib1g-dev"
RUN apt-get install -y --no-install-recommends $BUILD_DEPS
# This layer extracts the LLVM source code extracted to /build/llvm
FROM build-base as llvm-base
ARG LLVM_SOURCE_URL
RUN mkdir llvm && \
cd llvm && \
curl -L $LLVM_SOURCE_URL | tar --strip-components=1 -xJf -
# This will launch the builder script.
# /build/llvm-bin is expected to be mounted to a host directory.
FROM llvm-base as llvm-build
COPY scripts/build_llvm.sh .
ARG LLVM_VERSION
ENV LLVM_VERSION=$LLVM_VERSION
ENTRYPOINT [ "/bin/bash" ]
CMD [ "/build/build_llvm.sh" ]

View File

@ -4,25 +4,14 @@ LCPU is an alternative CPU core addon for GMod/Wiremod.
It provides: It provides:
- A standard RISC-V architechure (rv32ima) CPU core - A standard RISC-V architechure (rv32ima) CPU core, implemented in native code
- Extensive interoperation with the Wiremod addon - No wiremod native code embargos here!
- A text editor and assembler suite based on LLVM (for writing bare-metal LCPU programs in assembly) - Interoperation with the Wiremod addon (and addons which implement Wiremod integration)
# Building Native Module # Building Native Module
TODO: Steps to build the LCPU native module on Windows and Linux TODO: Steps to build the LCPU native module on Windows and Linux
LLVM is built using a podman container (see Containerfile). The steps for building follow (this should only need to be done once):
```
mkdir llvm_build
podman build -t llvm-build -f Containerfile.llvm
podman run --rm --mount type=bind,source=$PWD/llvm_build,destination=/build/llvm-build localhost/llvm-build
cp -rv llvm_build/install lua/bin/llvm
```
# Installation # Installation
This repository is set up in the exact directory structure to be a Legacy Addon; therefore once you have built the native module (TODO), adding it to a server should work fine. This repository is set up in the exact directory structure to be a Legacy Addon; therefore once you have built the native module (TODO), adding it to a server should work fine.

View File

@ -8,28 +8,39 @@ This is basically the working ideas for the LCPU project.
- RISC-V rv32ima core - RISC-V rv32ima core
- Would supporting more than one CPU core type be worthwhile? If so, the project is relatively setup for such workflow... - Would supporting more than one CPU core type be worthwhile? If so, the project is relatively setup for such workflow...
- Controllable paramaters (RAM size, ...) - Controllable paramaters (RAM size, ...)
- Our own frambuffer screen SENT (since wiremod decided to go stupid mode and saw off the gpu) - Our own framebuffer screen SENT (since wiremod decided to go stupid mode and saw off the gpu)
## Code upload/project workflow ## Code upload
- Upload a raw binary to execute, generated from any user tooling - Upload a raw binary to execute, generated from any user tooling (goes into server data folder)
- Yes, this means you can run Linux in GMod. No, I'm not sorry. - Yes, this means you can run Linux in GMod. No, I'm not sorry.
- Or even an ELF? Would require less linker hell? - Or even an ELF? Would require less linker hell?
### Integrated simple project workflow ## Integrated simple project workflow (WIP)
### LLVM integration - Uses official RISC-V GCC toolchain
- Server operator can control root path of where they have installed it.
- Use LLVM tools (clang as both assembler driver and C/C++ driver) for compilation. - Write assembly/C/C++ code using a tiny project system (source for them would go in server data folder ?)
- Prebuilt toolchain with compiler-rt can be built. (only needed since compiler-rt isn't usually built with most system clang installations.) - At the root of a project, a `project.json` file exists, with something like:
```json
{
"project": {
"cCompileFlags": "-O2",
"cppCompileFlags": "-O2 -fno-exceptions -fno-rtti",
- Write assembly/maybe C/C++ code using a tiny project system (data for them would go in server data folder ?) "sources": [
"startup.S",
"main.cpp"
]
}
}
```
- No conditional compilation - No conditional compilation
- All files in a project are built by that project - All files in a project are built by that project
- Diagnostic integration (by either using libclang)
- Text editor used to edit project source files - Text editor used to edit project source files
- Some example projects? - Some example projects?
@ -44,7 +55,7 @@ This is basically the working ideas for the LCPU project.
- Admin controled global (affects all placed LCPUs) scheduler cycle rate. - Admin controled global (affects all placed LCPUs) scheduler cycle rate.
- Couldn't be faster than tickrate though or we might block source (and.. well, i dont think i have to explain) - Couldn't be faster than tickrate though or we might block source (and.. well, i dont think i have to explain)
- I decided not to go with the cpu thread stuff just because its annoying, and would require more state tracking. just ticking in lua using `ENTITY:Think` should be more than good enough (even if theres a risk of hitching source, but I don't think it's that big of a problem...) - I decided not to go with the cpu thread stuff just because its annoying, and would require more state tracking. just ticking in lua using `ENT:Think` should be more than good enough (even if theres a risk of hitching source, but I don't think it's that big of a problem...)
- Project compilations however will definitely end up in a different thread though. Running them in the engine thread would undoubtably cause issues. - Project compilations however will definitely end up in a different thread though. Running them in the engine thread would undoubtably cause issues.
## Addon interopability ## Addon interopability

View File

@ -1,24 +0,0 @@
#!/bin/bash
# This script builds the llvm components used by the LCPU addon.
# This is run in a debian container to try and keep everything ABI stable.
# Act like make, sort of, and fail the whole script if some part fails
set -e
JOBS=$(nproc)
# Configure LLVM. THis is a mouthful, but it's only a mouthful because we specialize things we don't
# want in our minimal build of the LLVM project/clang.
cmake -Wno-dev -GNinja -S /build/llvm/llvm -B /build/llvm-build/build \
-DCMAKE_BUILD_TYPE=MinSizeRel \
-DCMAKE_INSTALL_PREFIX="/build/llvm-build/install" \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_ENABLE_PROJECTS="clang;lld" \
-DLLVM_ENABLE_RUNTIMES="compiler-rt" \
-DCOMPILER_RT_BAREMETAL_BUILD=ON \
-DLLVM_TARGETS_TO_BUILD="RISCV" \
-DLLVM_DEFAULT_TARGET_TRIPLE="riscv32-unknown-gnu"
ninja -C /build/llvm-build/build -j $JOBS
ninja -C /build/llvm-build/build install