blob: c79f06dac79e3bfb98268a46e3fa37214cd3ccb0 [file] [log] [blame]
Jim Cownie33f7b242014-04-09 15:40:23 +00001#
2##//===----------------------------------------------------------------------===//
3#//
4#// The LLVM Compiler Infrastructure
5#//
6#// This file is dual licensed under the MIT and the University of Illinois Open
7#// Source Licenses. See LICENSE.txt for details.
8#//
9#//===----------------------------------------------------------------------===//
10#
11
12# MAKEFILE PARAMETERS
13#
14# root_dir - path to root directory of liboffload
15# build_dir - path to build directory
16# mpss_dir - path to root directory of mpss
17# libiomp_host_dir - path to host libiomp directory (unnecessary if compiler_host is icc)
18# libiomp_target_dir - path to target libiomp directory (unnecesarry if compiler_target is icc)
19# omp_header_dir - path to omp.h (unnecessary if compiler_host and compiler_target are icc)
20# os_host - host operating system
21# os_target - target operating system
22# compiler_host - host compiler
23# compiler_target - target compiler
24# options_host - additional options for host compiler
25# options_target - additional options for target compiler
26#
27
28# Directories
29root_dir?=.
30build_dir?=$(root_dir)/build
31build_host_dir=$(build_dir)/host
32build_target_dir=$(build_dir)/target
33obj_host_dir=$(build_dir)/obj_host
34obj_target_dir=$(build_dir)/obj_target
35source_dir=$(root_dir)/src
36imported_dir=$(source_dir)/imported
37
38# OS
39os_host?=linux
40os_target?=linux
41ifneq ($(os_host)_$(os_target), linux_linux)
42 $(error "Only linux is supported")
43endif
44
45# Compilers
46compiler_host?=gcc
47compiler_target?=gcc
48
49# MPSS
50mpss_dir?=/
51mpss_present=$(shell if test -d $(mpss_dir); then echo OK; else echo KO; fi)
52ifneq ($(mpss_present), OK)
53 $(error "Cannot find MPSS directory $(mpss_dir)")
54endif
55
56coi_dir=$(mpss_dir)/opt/intel/mic/coi
57myo_dir=$(mpss_dir)/opt/intel/mic/myo
58
59# Sources
60src_liboffload_common=dv_util.cpp liboffload_error.c liboffload_msg.c offload_common.cpp offload_table.cpp offload_trace.cpp offload_util.cpp
61
62src_liboffload_host=$(src_liboffload_common) cean_util.cpp coi/coi_client.cpp compiler_if_host.cpp offload_engine.cpp offload_env.cpp offload_host.cpp offload_omp_host.cpp offload_timer_host.cpp offload_orsl.cpp orsl-lite/lib/orsl-lite.c offload_myo_host.cpp
63src_liboffload_host:=$(foreach file,$(src_liboffload_host),$(source_dir)/$(file))
64
65src_liboffload_target=$(src_liboffload_common) coi/coi_server.cpp compiler_if_target.cpp offload_omp_target.cpp offload_target.cpp offload_timer_target.cpp offload_myo_target.cpp
66src_liboffload_target:=$(foreach file,$(src_liboffload_target),$(source_dir)/$(file))
67
68src_ofld=ofldbegin.cpp ofldend.cpp
69src_ofld:=$(foreach file,$(src_ofld),$(source_dir)/$(file))
70
71headers=$(wildcard $(source_dir)/*.h) $(wildcard $(source_dir)/coi/*.h) $(wildcard $(source_dir)/orsl-lite/include/*.h)
72ifneq ($(omp_header_dir), )
73 headers+=$(imported_dir)/omp.h
74endif
75
76# Objects
77obj_liboffload_host=$(notdir $(src_liboffload_host))
78obj_liboffload_host:=$(obj_liboffload_host:.cpp=.o)
79obj_liboffload_host:=$(obj_liboffload_host:.c=.o)
80obj_liboffload_host:=$(foreach file,$(obj_liboffload_host),$(obj_host_dir)/$(file))
81
82obj_liboffload_target=$(notdir $(src_liboffload_target))
83obj_liboffload_target:=$(obj_liboffload_target:.cpp=.o)
84obj_liboffload_target:=$(obj_liboffload_target:.c=.o)
85obj_liboffload_target:=$(foreach file,$(obj_liboffload_target),$(obj_target_dir)/$(file))
86
87obj_ofld=$(notdir $(src_ofld))
88obj_ofld:=$(obj_ofld:.cpp=.o)
89obj_ofld_host=$(foreach file,$(obj_ofld),$(build_host_dir)/$(file))
90obj_ofld_target=$(foreach file,$(obj_ofld),$(build_target_dir)/$(file))
91
92# Options
93opts_common=-O2 -w -fpic -c -DCOI_LIBRARY_VERSION=2 -DMYO_SUPPORT -DOFFLOAD_DEBUG=1 -DSEP_SUPPORT -DTIMING_SUPPORT -I$(coi_dir)/include -I$(myo_dir)/include -I$(source_dir)
94ifneq ($(omp_header_dir), )
95 opts_common+=-I$(imported_dir)
96endif
97
98opts_liboffload=-shared -Wl,-soname,liboffload.so.5 -ldl -lstdc++ -liomp5
99
100opts_liboffload_host=$(opts_liboffload) -L$(coi_dir)/host-linux-release/lib -lcoi_host -L$(myo_dir)/lib -lmyo-client
101ifneq ($(libiomp_host_dir), )
102 opts_liboffload_host+=-L$(libiomp_host_dir)
103endif
104
105opts_liboffload_target=$(opts_liboffload) -L$(coi_dir)/device-linux-release/lib -lcoi_device -L$(myo_dir)/lib -lmyo-service
106ifneq ($(libiomp_target_dir), )
107 opts_liboffload_target+=-L$(libiomp_target_dir)
108endif
109
110options_host?=
111opts_host=$(options_host) -DHOST_LIBRARY=1
112ifeq ($(os_host), linux)
113 opts_host+=-DLINUX
114endif
115
116options_target?=
117opts_target=$(options_target) -DHOST_LIBRARY=0
118ifeq ($(os_target), linux)
119 opts_target+=-DLINUX
120endif
121
122# Make targets
123.PHONY: all clean info
124
125all: info $(build_host_dir)/liboffload.so $(build_target_dir)/liboffload.so $(obj_ofld_host) $(obj_ofld_target)
126
127
128$(build_host_dir)/liboffload.so: $(build_host_dir)/liboffload.so.5 | $(build_host_dir)
129 ln -f $< $@
130
131$(build_host_dir)/liboffload.so.5: $(obj_liboffload_host) | $(build_host_dir)
132 $(compiler_host) $(opts_liboffload_host) $(opts_host) $^ -o $@
133
134$(obj_host_dir)/%.o: $(source_dir)/%.c $(headers) | $(obj_host_dir)
135 $(compiler_host) $(opts_common) $(opts_host) $< -o $@
136
137$(obj_host_dir)/%.o: $(source_dir)/%.cpp $(headers) | $(obj_host_dir)
138 $(compiler_host) $(opts_common) $(opts_host) $< -o $@
139
140$(obj_host_dir)/%.o: $(source_dir)/coi/%.cpp $(headers) | $(obj_host_dir)
141 $(compiler_host) $(opts_common) $(opts_host) $< -o $@
142
143$(obj_host_dir)/%.o: $(source_dir)/orsl-lite/lib/%.c $(headers) | $(obj_host_dir)
144 $(compiler_host) $(opts_common) $(opts_host) $< -o $@
145
146
147$(build_target_dir)/liboffload.so: $(build_target_dir)/liboffload.so.5 | $(build_target_dir)
148 ln -f $< $@
149
150$(build_target_dir)/liboffload.so.5: $(obj_liboffload_target) | $(build_target_dir)
151 $(compiler_target) $(opts_liboffload_target) $(opts_target) $^ -o $@
152
153$(obj_target_dir)/%.o: $(source_dir)/%.c $(headers) | $(obj_target_dir)
154 $(compiler_target) $(opts_common) $(opts_target) $< -o $@
155
156$(obj_target_dir)/%.o: $(source_dir)/%.cpp $(headers) | $(obj_target_dir)
157 $(compiler_target) $(opts_common) $(opts_target) $< -o $@
158
159$(obj_target_dir)/%.o: $(source_dir)/coi/%.cpp $(headers) | $(obj_target_dir)
160 $(compiler_target) $(opts_common) $(opts_target) $< -o $@
161
162$(obj_target_dir)/%.o: $(source_dir)/orsl-lite/lib/%.c $(headers) | $(obj_target_dir)
163 $(compiler_target) $(opts_common) $(opts_target) $< -o $@
164
165
166$(build_host_dir)/%.o: $(source_dir)/%.cpp $(headers) | $(build_host_dir)
167 $(compiler_host) $(opts_common) $(opts_host) $< -o $@
168
169$(build_target_dir)/%.o: $(source_dir)/%.cpp $(headers) | $(build_target_dir)
170 $(compiler_target) $(opts_common) $(opts_target) $< -o $@
171
172
173$(imported_dir)/omp.h: $(omp_header_dir)/omp.h | $(imported_dir)
174 cp $< $@
175
176
177$(build_host_dir) $(build_target_dir) $(obj_host_dir) $(obj_target_dir): | $(build_dir)
178 $(shell mkdir -p $@ >/dev/null 2>/dev/null)
179 @echo "Created $@ directory"
180
181$(build_dir):
182 $(shell mkdir -p $@ >/dev/null 2>/dev/null)
183 @echo "Created $@ directory"
184
185$(imported_dir):
186 $(shell mkdir -p $@ >/dev/null 2>/dev/null)
187 @echo "Created $@ directory"
188
189
190clean:
191 $(shell rm -rf $(build_dir))
192 @echo "Remove $(build_dir) directory"
193
194
195info:
196 @echo "root_dir = $(root_dir)"
197 @echo "build_dir = $(build_dir)"
198 @echo "mpss_dir = $(mpss_dir)"
199 @echo "libiomp_host_dir = $(libiomp_host_dir)"
200 @echo "libiomp_target_dir = $(libiomp_target_dir)"
201 @echo "omp_header_dir = $(omp_header_dir)"
202 @echo "os_host = $(os_host)"
203 @echo "os_target = $(os_target)"
204 @echo "compiler_host = $(compiler_host)"
205 @echo "compiler_target = $(compiler_target)"
206 @echo "options_host = $(options_host)"
207 @echo "options_target = $(options_target)"
208