Improves build environment flexibility (#253)

* Adds script to ease local, clean environment testing

* Env change

Co-authored-by: Schuyler Eldridge <schuyler.eldridge@gmail.com>

* Not fully tested, but pushing for testing.

* Use build_llvm.sh script

* Removing the `cd` after MLIR build -- no longer necessary

* Adding ability to specify paths

* Adding cmake headers

Co-authored-by: Schuyler Eldridge <schuyler.eldridge@gmail.com>
This commit is contained in:
John Demme 2020-11-21 22:08:48 -08:00 committed by GitHub
parent b2b1549b1a
commit 68114369f0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 112 additions and 17 deletions

1
.gitignore vendored
View File

@ -1,4 +1,5 @@
build
/docker_build
.vscode
#*
*~

View File

@ -1,3 +1,9 @@
##===- CMakeLists.txt - CIRCT cmake root ----------------------*- cmake -*-===//
##
## Configure the CIRCT build.
##
##===----------------------------------------------------------------------===//
cmake_minimum_required(VERSION 3.10)
if(POLICY CMP0068)
@ -76,23 +82,59 @@ add_custom_target(circt-headers)
set_target_properties(circt-headers PROPERTIES FOLDER "Misc")
add_custom_target(circt-doc)
set(ENV{PKG_CONFIG_PATH}
"${CMAKE_CURRENT_SOURCE_DIR}/ext/lib/pkgconfig:$ENV{PKG_CONFIG_PATH}")
include_directories(${LLVM_INCLUDE_DIRS})
include_directories(${MLIR_INCLUDE_DIRS})
#include_directories( ${MLIR_BINARY_INCLUDE_DIR})
include_directories(${CIRCT_MAIN_SRC_DIR})
include_directories(${CIRCT_INCLUDE_DIR})
# Detect if Verilator is present
find_program(VERILATOR_PATH "verilator" PATHS "${CMAKE_CURRENT_SOURCE_DIR}/ext/bin" NO_DEFAULT_PATH)
find_program(VERILATOR_PATH "verilator")
if(${VERILATOR_PATH} STREQUAL "VERILATOR_PATH-NOTFOUND")
set(VERILATOR_PATH "")
message(STATUS "Did not find Verilator.")
# If Verilator hasn't been explicitly disabled, find it.
option(VERILATOR_DISABLE "Disable the Verilator tests.")
if (VERILATOR_DISABLE)
message(STATUS "Disabling Verilator tests.")
else()
message(STATUS "Found Verilator at ${VERILATOR_PATH}.")
# Detect if Verilator is present.
if (NOT DEFINED VERILATOR_PATH)
find_program(VERILATOR_PATH "verilator" PATHS
"${CMAKE_CURRENT_SOURCE_DIR}/ext/bin" NO_DEFAULT_PATH)
find_program(VERILATOR_PATH "verilator")
endif()
if(EXISTS ${VERILATOR_PATH})
message(STATUS "Found Verilator at ${VERILATOR_PATH}.")
# Find Verilator version.
execute_process(COMMAND ${VERILATOR_PATH} --version
OUTPUT_VARIABLE VERILATOR_VERSION)
string(REGEX MATCH "Verilator (([0-9]+)\.([0-9]+)) \.*"
MATCH ${VERILATOR_VERSION})
# It's gotta be at least v4.034.
if (${CMAKE_MATCH_1} LESS 4.034)
message(FATAL_ERROR "CIRCT only supports Verilator version 4.034 and up. \
Found version: ${CMAKE_MATCH_1}. You can disable \
the Verilator tests with '-DVERILATOR_DISABLE=ON'.")
set(VERILATOR_PATH "")
endif()
else()
set(VERILATOR_PATH "")
message(STATUS "Did not find Verilator.")
endif()
endif()
# If capnp hasn't been explicitly disabled, find it.
option(CAPNP_DISABLE "Disable Cap'nProto (needed for cosimulation).")
if (CAPNP_DISABLE)
message (STATUS "Disabling Cap'nProto.")
else()
if(DEFINED CAPNP_PATH)
set(ENV{PKG_CONFIG_PATH}
"${CAPNP_PATH}/lib/pkgconfig:$ENV{PKG_CONFIG_PATH}")
find_package(CapnProto CONFIG PATHS ${CAPNP_PATH})
else()
set(ENV{PKG_CONFIG_PATH}
"${CMAKE_CURRENT_SOURCE_DIR}/ext/lib/pkgconfig:$ENV{PKG_CONFIG_PATH}")
find_package(CapnProto CONFIG PATHS "${CMAKE_SOURCE_DIR}/ext")
endif()
endif()
add_subdirectory(include/circt)

View File

@ -1,4 +1,9 @@
find_package(CapnProto CONFIG PATHS "${CMAKE_SOURCE_DIR}/ext")
##===- CMakeLists.txt - Cosim DPI library headers -------------*- cmake -*-===//
##
## Generate the Capnp headers if Capnp is found.
##
##===----------------------------------------------------------------------===//
if(CapnProto_FOUND)
option(ESI_COSIM "Enable ESI Cosimulation" ON)
message("-- Enabling ESI cosim")

View File

@ -5,7 +5,6 @@
##===----------------------------------------------------------------------===//
if(ESI_COSIM)
find_package(CapnProto CONFIG PATHS "${CMAKE_SOURCE_DIR}/ext")
add_library(EsiCosimDpiServer SHARED
DpiEntryPoints.cpp
Server.cpp

View File

@ -1,14 +1,17 @@
#!/bin/bash
#!/usr/bin/env bash
BUILD_DIR=${1:-"build"}
INSTALL_DIR=${2:-"install"}
# Build LLVM with the standard options. Intended to be called from the github
# workflows.
mkdir llvm/build
mkdir llvm/install
cd llvm/build
mkdir -p llvm/$BUILD_DIR
mkdir -p llvm/$INSTALL_DIR
cd llvm/$BUILD_DIR
cmake ../llvm \
-DLLVM_BUILD_EXAMPLES=OFF \
-DLLVM_TARGETS_TO_BUILD="host" \
-DCMAKE_INSTALL_PREFIX=../install \
-DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR \
-DLLVM_ENABLE_PROJECTS='mlir' \
-DLLVM_OPTIMIZED_TABLEGEN=ON \
-DLLVM_ENABLE_OCAMLDOC=OFF \
@ -19,4 +22,5 @@ cmake ../llvm \
-DLLVM_ENABLE_LLD=ON \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_ASSERTIONS=ON
cmake --build . --target install -- -j$(nproc)

19
utils/run-docker.sh Executable file
View File

@ -0,0 +1,19 @@
#!/usr/bin/env bash
# Make it easier to run tests in a clean testing environment (the same as the
# nightly tests) to tease out implicit dependencies on your local environment.
# Assumes that you've got a working docker set up which your user is authorized
# to invoke. If you lack this, follow these guides:
# 1) https://docs.docker.com/engine/install/ubuntu/
# 2) https://docs.docker.com/engine/install/linux-postinstall/
# "Manage Docker as a non-root user"
# "Configure Docker to start on boot"
CMD=${1:-"./utils/run-tests-docker.sh"}
VER=${2:-"v2"}
REPO_ROOT=$(cd "$(dirname "$BASH_SOURCE[0]")/.." && pwd)
cd $REPO_ROOT
docker run -it --rm -v $REPO_ROOT:$REPO_ROOT -u $UID:$(id -g) -w $REPO_ROOT \
ghcr.io/circt/images/circt-integration-test:$VER $CMD

25
utils/run-tests-docker.sh Executable file
View File

@ -0,0 +1,25 @@
#!/usr/bin/env bash
# This script should be run in the docker container started in the
# 'run-docker.sh' script.
set -e
UTILS_DIR=$(dirname "$BASH_SOURCE[0]")
if [ ! -e llvm/build_20.04 ]; then
echo "=== Building MLIR"
$UTILS_DIR/build-llvm.sh build_20.04 build_20.04/install
fi
echo "=== Building CIRCT"
cmake -Bdocker_build \
-DMLIR_DIR=llvm/build_20.04/lib/cmake/mlir \
-DLLVM_DIR=llvm/build_20.04/lib/cmake/llvm \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DVERILATOR_PATH=/usr/bin/verilator \
-DCAPNP_PATH=/usr \
-DCMAKE_BUILD_TYPE=DEBUG
cmake --build docker_build -j$(nproc) --target check-circt
cmake --build docker_build -j$(nproc) --target check-circt-integration