summaryrefslogtreecommitdiff
path: root/src/Makefile
blob: db001a63ae7f58b91cdd6b1c2ef9f7265658aaad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# Our directory
THUNK_ROOT ?= $(abspath ../)

# Include directories
INCLUDE_DIR := ../include
INCLUDES += $(INCLUDE_DIR)
CFLAGS += $(foreach DIR,$(INCLUDES),-I$(DIR))

LIB_NAME = libhsakmt.so
LIB_MAJOR_VER = 1

PACKAGE_MAJOR_VER = 2
PACKAGE_MINOR_VER = 0
PACKAGE_PATCH_VER ?= 0
PACKAGE_VER = $(PACKAGE_MAJOR_VER).$(PACKAGE_MINOR_VER).$(PACKAGE_PATCH_VER)
export PACKAGE_VER

# Compiler options
CFLAGS += -fPIC # Position-independent code required to build shared library
CFLAGS += -W -Wall -Wextra -Werror -Wno-unused-parameter
CFLAGS += -Wformat-security -Wswitch-default -Wundef \
	  -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual \
	  -Wlogical-op -Wstrict-prototypes -Wmissing-prototypes    \
	  -Wmissing-declarations -Wredundant-decls                 \
	  -Wunreachable-code
CFLAGS += -std=gnu99 -pthread -fvisibility=hidden -O2

# If this is not a release build, add debug-specific flags
ifneq ($(REL),1)
  CFLAGS += -ggdb
endif

LDFLAGS += -lrt -pthread -lpci -Wl,--version-script=libhsakmt.ver -Wl,-soname=$(LIB_NAME).$(LIB_MAJOR_VER) -Wl,-z,nodelete

OBJS = debug.o globals.o memory.o perfctr.o time.o version.o \
    events.o openclose.o queues.o topology.o fmm.o pmc_table.o \
    libhsakmt.o

.PHONY: all lnx lnx64a clean

# Default target
all: lnx64a

# To relocate build output, set "O=target/dir/"
# otherwise it defaults to a local directory

ifdef O
  BUILD_ROOT := $(O)
else
  BUILD_ROOT := ../build
endif
BUILD_ROOT := $(abspath $(BUILD_ROOT))

BUILDDIR = $(BUILD_ROOT)/$(MAKECMDGOALS)
TARGET = $(addprefix $(BUILDDIR)/,$(OBJS))

$(BUILDDIR)/$(LIB_NAME).$(LIB_MAJOR_VER): $(TARGET)
	gcc -shared -o $@ $^ $(LDFLAGS)

$(BUILDDIR)/$(LIB_NAME): $(BUILDDIR)/$(LIB_NAME).$(LIB_MAJOR_VER)
	@ln -sf $(LIB_NAME).$(LIB_MAJOR_VER) $(BUILDDIR)/$(LIB_NAME)

lnx: CFLAGS += -m32
lnx: LDFLAGS += -m32
lnx: $(BUILDDIR)/$(LIB_NAME)

PACKAGE_DIR = $(BUILDDIR)/libhsakmt
DEBIAN_DIR = ../DEBIAN
LDCONF_FILE = $(DEBIAN_DIR)/x86_64-libhsakmt.conf
LDCONF_INSTALL_DIR = $(PACKAGE_DIR)/etc/ld.so.conf.d
ROCM_ROOT = $(PACKAGE_DIR)/opt/rocm
ROCM_LIB = $(ROCM_ROOT)/lib
ROCM_INCLUDE = $(ROCM_ROOT)/include
INSTALL_LIB_DIR = libhsakmt/lib
INSTALL_INCLUDE_DIR = libhsakmt/include/libhsakmt

export PACKAGE_DIR

package-common: lnx64a
	@mkdir -p $(PACKAGE_DIR)

	@mkdir -p $(LDCONF_INSTALL_DIR)
	@cp -r $(LDCONF_FILE) $(LDCONF_INSTALL_DIR)

	@mkdir -p $(ROCM_ROOT)/$(INSTALL_LIB_DIR)
	@cp $(BUILDDIR)/$(LIB_NAME).$(LIB_MAJOR_VER) $(ROCM_ROOT)/$(INSTALL_LIB_DIR)

	@mkdir -p $(ROCM_ROOT)/$(INSTALL_INCLUDE_DIR)
	@cp -r $(INCLUDE_DIR)/* $(ROCM_ROOT)/$(INSTALL_INCLUDE_DIR)

	@mkdir -p $(ROCM_LIB)
	@ln -fs ../$(INSTALL_LIB_DIR)/$(LIB_NAME).$(LIB_MAJOR_VER) $(ROCM_LIB)/$(LIB_NAME)

	@mkdir -p $(ROCM_INCLUDE)
	ln -fs ../$(INSTALL_INCLUDE_DIR) $(ROCM_INCLUDE)/

deb: package-common
	@mkdir -p $(PACKAGE_DIR)/DEBIAN
	@sed 's/\$$version/$(PACKAGE_VER)/g' $(DEBIAN_DIR)/control > $(PACKAGE_DIR)/DEBIAN/control
	@fakeroot dpkg-deb --build $(PACKAGE_DIR) \
		$(BUILDDIR)/hsakmt-dev-$(PACKAGE_VER)-amd64.deb

rpm: package-common
	@rpmbuild --define '_topdir $(BUILD_ROOT)/rpm' -ba $(THUNK_ROOT)/RPM/libhsakmt.spec

lnx64a: $(BUILDDIR)/$(LIB_NAME)

clean:
	rm -rf $(BUILD_ROOT)
#Rule
$(BUILDDIR)/%.o: %.c ../include/hsakmt.h ../include/hsakmttypes.h ../include/linux/kfd_ioctl.h
	@echo Compiling $^
	@mkdir -p $(dir $@)
	gcc $(CFLAGS) -c $< -o $@