Table of Contents

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.1)

Standard targets defined are:

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:

Take a look at examples from existing ACT tools (e.g. actsim).

1)
This was originally designed for Unix clusters with heterogeneous architectures but a shared file system.