====== The standard ACT Makefile structure ====== The following is a simple ''Makefile'' that uses the ACT standard makefile to create an executable called ''example'', and which links against the core ACT library as well as the default passes. BINARY=example.$(EXT) TARGETS=$(BINARY) OBJS=main.o SRCS=$(OBJS:.o=.cc) include $(ACT_HOME)/scripts/Makefile.std $(BINARY): $(LIB) $(OBJS) $(ACTPASSDEPEND) $(CXX) $(CFLAGS) $(OBJS) -o $(BINARY) $(LIBACTPASS) -include Makefile.deps The variable ''EXT'' is set to an extension that combines the architecture and operating system. So this might look something like ''arm64_darwin23_5_0'' for an Apple M-series Mac, or ''x86_64_linux5_15_0'' on an x86 Linux platform. The makefile creates a directory called ''$(EXT)'', and the object files generated are placed in that directory.((This was originally designed for Unix clusters with heterogeneous architectures but a shared file system.)) Standard targets defined are: * ''make depend'': creates ''Makefiles.dep'' with dependencies. * ''make'': this should build the executable * ''make install'': installs all files into ''$(ACT_HOME)'' * ''make clean'': removes object files but keeps all targets that were built * ''make realclean'': removes targets as well (in addition to what is done with just clean). The object files can be moved into the working directory using: $ make move-in They can be put back into the architecture-specific directory using: make move-out ===== Changing compilers ===== The variables ''CC'' and ''CXX'' can be changed to modify the default C and C++ compilers respectively. So: $ make CXX=clang++ will use clang++ as the C++ compiler for the build. ===== Debug builds ===== The C/C++ compilers are passed the ''C_COMPILER_OPTIONS'' environment variable. This is normally set to ''-O2'', but can be set to ''-g'' during the build process like this: $ make C_COMPILER_FLAGS=-g ===== Standard test cases ===== Standard test cases can be run using: $ make runtest For this to work properly, create test cases for your tool in the following way: * All test cases and sample outputs are in the ''test/'' sub-directory. * Test cases are run by changing to the ''test/'' sub-directory and running the script ''run.sh''. If this script doesn't exist, then nothing happens. Take a look at examples from existing ACT tools (e.g. ''[[https://github.com/asyncvlsi/actsim/tree/master/test|actsim]]'').