mirror of https://github.com/llvm/circt.git
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:
parent
b2b1549b1a
commit
68114369f0
|
@ -1,4 +1,5 @@
|
|||
build
|
||||
/docker_build
|
||||
.vscode
|
||||
#*
|
||||
*~
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
##===----------------------------------------------------------------------===//
|
||||
|
||||
if(ESI_COSIM)
|
||||
find_package(CapnProto CONFIG PATHS "${CMAKE_SOURCE_DIR}/ext")
|
||||
add_library(EsiCosimDpiServer SHARED
|
||||
DpiEntryPoints.cpp
|
||||
Server.cpp
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
|
@ -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
|
Loading…
Reference in New Issue