2022-08-24 16:14:19 -05:00
|
|
|
#
|
|
|
|
# Top Makefile
|
|
|
|
# ------------
|
|
|
|
#
|
|
|
|
# Top-level makefile to compile the codebase
|
|
|
|
#
|
|
|
|
# Following options are available
|
|
|
|
#
|
|
|
|
# .. option:: BUILD_TYPE=<string>
|
|
|
|
#
|
|
|
|
# Pick the type of compilation. Can be either ``release`` or ``debug``. By default, release mode is selected (full optimization on runtime).
|
|
|
|
#
|
|
|
|
# .. option:: CMAKE_FLAGS=<string>
|
|
|
|
#
|
|
|
|
# Force compilation flags for CMake to generate Makefiles
|
2020-12-08 10:52:35 -06:00
|
|
|
|
2022-08-24 16:14:19 -05:00
|
|
|
BUILD_TYPE ?= release
|
|
|
|
# Convert to lower case for consistency
|
|
|
|
BUILD_TYPE := $(shell echo ${BUILD_TYPE} | tr '[:upper:]' '[lower]')
|
|
|
|
# Trim any _pgo or _strict in the build type name (since it would not match any of CMake's standard build types
|
|
|
|
CMAKE_BUILD_TYPE := $(shell echo ${BUILD_TYPE} | sed 's/_\?pgo//' | sed 's/_\?strict//')
|
|
|
|
|
|
|
|
# Allow users to pass parameters to cmake, without defining build types
|
|
|
|
# e.g. make CMAKE_FLAGS="-DCMAKE_CXX_COMPILER=g++-9'
|
|
|
|
override CMAKE_FLAGS := -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -G 'Unix Makefiles' ${CMAKE_FLAGS}
|
|
|
|
|
2022-08-24 16:39:21 -05:00
|
|
|
# -s : Suppresss makefile output (e.g. entering/leaving directories)
|
|
|
|
# --output-sync target : For parallel compilation ensure output for each target is synchronized (make version >= 4.0)
|
|
|
|
MAKEFLAGS := -s
|
|
|
|
|
2022-08-24 18:26:12 -05:00
|
|
|
# Directory to build the codes
|
|
|
|
SOURCE_DIR :=${PWD}
|
|
|
|
BUILD_DIR ?= build
|
|
|
|
|
2022-08-24 16:14:19 -05:00
|
|
|
# Find CMake command from system variable, otherwise use a default one
|
2020-12-08 10:52:35 -06:00
|
|
|
ifeq ($(origin CMAKE_COMMAND),undefined)
|
|
|
|
CMAKE_COMMAND := cmake
|
|
|
|
else
|
|
|
|
CMAKE_COMMAND := ${CMAKE_COMMAND}
|
|
|
|
endif
|
|
|
|
|
2022-08-24 16:14:19 -05:00
|
|
|
# Define python executable
|
|
|
|
PYTHON_EXEC ?= python3
|
|
|
|
|
|
|
|
# Put it first so that "make" without argument is like "make help".
|
|
|
|
export COMMENT_EXTRACT
|
|
|
|
|
|
|
|
# Put it first so that "make" without argument is like "make help".
|
|
|
|
help:
|
|
|
|
@${PYTHON_EXEC} -c "$$COMMENT_EXTRACT"
|
|
|
|
|
2022-08-24 18:26:12 -05:00
|
|
|
.PHONY: all
|
2020-12-08 10:52:35 -06:00
|
|
|
|
2020-12-14 11:25:50 -06:00
|
|
|
checkout:
|
2022-08-24 16:14:19 -05:00
|
|
|
# Update all the submodules
|
2020-12-08 10:52:35 -06:00
|
|
|
git submodule init
|
|
|
|
git submodule update --init --recursive
|
2020-12-14 11:25:50 -06:00
|
|
|
|
|
|
|
compile:
|
2022-08-24 16:14:19 -05:00
|
|
|
# Compile the code base
|
2022-08-24 18:26:12 -05:00
|
|
|
@mkdir -p ${BUILD_DIR}
|
|
|
|
echo "cd ${BUILD_DIR} && ${CMAKE_COMMAND} ${CMAKE_FLAGS} ${SOURCE_DIR}"
|
|
|
|
cd ${BUILD_DIR} && ${CMAKE_COMMAND} ${CMAKE_FLAGS} ${SOURCE_DIR}
|
|
|
|
echo "Building target(s): ${MAKECMDGOALS}"
|
|
|
|
@+${MAKE} -C ${BUILD_DIR} ${MAKECMDGOALS}
|
|
|
|
|
|
|
|
all: checkout compile
|
|
|
|
# A shortcut command to run checkout and compile in serial
|
2020-12-14 11:25:50 -06:00
|
|
|
|
|
|
|
clean:
|
2022-08-24 16:14:19 -05:00
|
|
|
# Remove current build results
|
2022-08-24 18:26:12 -05:00
|
|
|
rm -rf ${BUILD_DIR} yosys/install
|
2022-08-24 16:14:19 -05:00
|
|
|
|
|
|
|
# Functions to extract comments from Makefiles
|
|
|
|
define COMMENT_EXTRACT
|
|
|
|
import re
|
|
|
|
with open ('Makefile', 'r' ) as f:
|
|
|
|
matches = re.finditer('^([a-zA-Z-_]*):.*\n#(.*)', f.read(), flags=re.M)
|
|
|
|
for _, match in enumerate(matches, start=1):
|
|
|
|
header, content = match[1], match[2]
|
|
|
|
print(f" {header:10} {content}")
|
|
|
|
endef
|