@@ -23,21 +23,41 @@ LDFLAGS = -shared
2323CC = $(CXX )
2424
2525# Add svdpi include
26- ifeq ($(TOOL ) ,vcs)
27- # For VCS, add include path
28- TOOLDIR = $(subst bin/$(TOOL ) ,,$(shell which $(TOOL ) ) )
29- INCLUDES += -I$(TOOLDIR ) include
26+ # Check if VERILATOR_ROOT is set, use it first if available
27+ ifdef VERILATOR_ROOT
28+ VERILATOR_INCLUDE = $(VERILATOR_ROOT ) /include
3029else
31- # For Verilator, use verilator command to find root directory
32- ifeq ($(shell which verilator),)
33- $(error "Verilator not found in PATH. Please install Verilator or add it to your PATH")
30+ # Try to find Verilator installation directory
31+ TOOLDIR = $(subst bin/$(TOOL ) ,,$(shell which $(TOOL ) 2>/dev/null) )
32+
33+ # Define list of possible Verilator include paths to check
34+ VERILATOR_INCLUDE_PATHS := \
35+ $(TOOLDIR ) share/verilator/include \
36+ $(TOOLDIR ) share/verilator/include/vltstd \
37+ /usr/share/verilator/include \
38+ /usr/local/share/verilator/include \
39+ /opt/verilator/share/verilator/include \
40+ $(HOME ) /verilator/include
41+
42+ # Find first valid include path
43+ VERILATOR_INCLUDE := $(firstword $(foreach dir,$(VERILATOR_INCLUDE_PATHS ) ,$(if $(wildcard $(dir ) /svdpi.h) ,$(dir ) ,) ) )
44+
45+ # If include path not found, provide error messages
46+ ifeq ($(VERILATOR_INCLUDE),)
47+ $(warning WARNING : Could not find Verilator include directory with svdpi.h)
48+ $(warning Searched in : $(VERILATOR_INCLUDE_PATHS ) )
49+ $(warning You can manually specify it using : make build-csr-test INCLUDES="-I/path/to/verilator/include -I./env -I./rst_driver -I./reg_driver -I./model")
50+ $(warning Or set VERILATOR_ROOT environment variable pointing to your Verilator installation)
3451 endif
35- VERILATOR_ROOT = $(shell verilator --getenv VERILATOR_ROOT 2>/dev/null)
36- ifeq ($(VERILATOR_ROOT),)
37- $(error "Could not determine VERILATOR_ROOT. Please make sure Verilator is properly installed")
52+ endif
53+
54+ # Add appropriate includes based on tool
55+ ifeq ($(TOOL ) ,vcs)
56+ INCLUDES += -I$(TOOLDIR ) include
57+ else ifeq ($(TOOL),verilator)
58+ ifdef VERILATOR_INCLUDE
59+ INCLUDES += -I$(VERILATOR_INCLUDE ) -I$(VERILATOR_INCLUDE ) /vltstd
3860 endif
39- # Add both main include directory and vltstd directory where svdpi.h is located
40- INCLUDES += -I$(VERILATOR_ROOT ) /include -I$(VERILATOR_ROOT ) /include/vltstd
4161endif
4262
4363.PHONY : all clean
0 commit comments