| # | |
| ##//===----------------------------------------------------------------------===// | |
| #// | |
| #// The LLVM Compiler Infrastructure | |
| #// | |
| #// This file is dual licensed under the MIT and the University of Illinois Open | |
| #// Source Licenses. See LICENSE.txt for details. | |
| #// | |
| #//===----------------------------------------------------------------------===// | |
| # | |
| # MAKEFILE PARAMETERS | |
| # | |
| # root_dir - path to root directory of liboffload | |
| # build_dir - path to build directory | |
| # mpss_dir - path to root directory of mpss | |
| # libiomp_host_dir - path to host libiomp directory (unnecessary if compiler_host is icc) | |
| # libiomp_target_dir - path to target libiomp directory (unnecesarry if compiler_target is icc) | |
| # omp_header_dir - path to omp.h (unnecessary if compiler_host and compiler_target are icc) | |
| # os_host - host operating system | |
| # os_target - target operating system | |
| # compiler_host - host compiler | |
| # compiler_target - target compiler | |
| # options_host - additional options for host compiler | |
| # options_target - additional options for target compiler | |
| # | |
| # Directories | |
| root_dir?=. | |
| build_dir?=$(root_dir)/build | |
| build_host_dir=$(build_dir)/host | |
| build_target_dir=$(build_dir)/target | |
| obj_host_dir=$(build_dir)/obj_host | |
| obj_target_dir=$(build_dir)/obj_target | |
| source_dir=$(root_dir)/src | |
| imported_dir=$(source_dir)/imported | |
| # OS | |
| os_host?=linux | |
| os_target?=linux | |
| ifneq ($(os_host)_$(os_target), linux_linux) | |
| $(error "Only linux is supported") | |
| endif | |
| # Compilers | |
| compiler_host?=gcc | |
| compiler_target?=gcc | |
| # MPSS | |
| mpss_dir?=/ | |
| mpss_present=$(shell if test -d $(mpss_dir); then echo OK; else echo KO; fi) | |
| ifneq ($(mpss_present), OK) | |
| $(error "Cannot find MPSS directory $(mpss_dir)") | |
| endif | |
| coi_dir=$(mpss_dir)/opt/intel/mic/coi | |
| myo_dir=$(mpss_dir)/opt/intel/mic/myo | |
| # Sources | |
| src_liboffload_common=dv_util.cpp liboffload_error.c liboffload_msg.c offload_common.cpp offload_table.cpp offload_trace.cpp offload_util.cpp | |
| src_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 | |
| src_liboffload_host:=$(foreach file,$(src_liboffload_host),$(source_dir)/$(file)) | |
| src_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 | |
| src_liboffload_target:=$(foreach file,$(src_liboffload_target),$(source_dir)/$(file)) | |
| src_ofld=ofldbegin.cpp ofldend.cpp | |
| src_ofld:=$(foreach file,$(src_ofld),$(source_dir)/$(file)) | |
| headers=$(wildcard $(source_dir)/*.h) $(wildcard $(source_dir)/coi/*.h) $(wildcard $(source_dir)/orsl-lite/include/*.h) | |
| ifneq ($(omp_header_dir), ) | |
| headers+=$(imported_dir)/omp.h | |
| endif | |
| # Objects | |
| obj_liboffload_host=$(notdir $(src_liboffload_host)) | |
| obj_liboffload_host:=$(obj_liboffload_host:.cpp=.o) | |
| obj_liboffload_host:=$(obj_liboffload_host:.c=.o) | |
| obj_liboffload_host:=$(foreach file,$(obj_liboffload_host),$(obj_host_dir)/$(file)) | |
| obj_liboffload_target=$(notdir $(src_liboffload_target)) | |
| obj_liboffload_target:=$(obj_liboffload_target:.cpp=.o) | |
| obj_liboffload_target:=$(obj_liboffload_target:.c=.o) | |
| obj_liboffload_target:=$(foreach file,$(obj_liboffload_target),$(obj_target_dir)/$(file)) | |
| obj_ofld=$(notdir $(src_ofld)) | |
| obj_ofld:=$(obj_ofld:.cpp=.o) | |
| obj_ofld_host=$(foreach file,$(obj_ofld),$(build_host_dir)/$(file)) | |
| obj_ofld_target=$(foreach file,$(obj_ofld),$(build_target_dir)/$(file)) | |
| # Options | |
| opts_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) | |
| ifneq ($(omp_header_dir), ) | |
| opts_common+=-I$(imported_dir) | |
| endif | |
| opts_liboffload=-shared -Wl,-soname,liboffload.so.5 -ldl -lstdc++ -liomp5 | |
| opts_liboffload_host=$(opts_liboffload) -L$(coi_dir)/host-linux-release/lib -lcoi_host -L$(myo_dir)/lib -lmyo-client | |
| ifneq ($(libiomp_host_dir), ) | |
| opts_liboffload_host+=-L$(libiomp_host_dir) | |
| endif | |
| opts_liboffload_target=$(opts_liboffload) -L$(coi_dir)/device-linux-release/lib -lcoi_device -L$(myo_dir)/lib -lmyo-service | |
| ifneq ($(libiomp_target_dir), ) | |
| opts_liboffload_target+=-L$(libiomp_target_dir) | |
| endif | |
| options_host?= | |
| opts_host=$(options_host) -DHOST_LIBRARY=1 | |
| ifeq ($(os_host), linux) | |
| opts_host+=-DLINUX | |
| endif | |
| options_target?= | |
| opts_target=$(options_target) -DHOST_LIBRARY=0 | |
| ifeq ($(os_target), linux) | |
| opts_target+=-DLINUX | |
| endif | |
| # Make targets | |
| .PHONY: all clean info | |
| all: info $(build_host_dir)/liboffload.so $(build_target_dir)/liboffload.so $(obj_ofld_host) $(obj_ofld_target) | |
| $(build_host_dir)/liboffload.so: $(build_host_dir)/liboffload.so.5 | $(build_host_dir) | |
| ln -f $< $@ | |
| $(build_host_dir)/liboffload.so.5: $(obj_liboffload_host) | $(build_host_dir) | |
| $(compiler_host) $(opts_liboffload_host) $(opts_host) $^ -o $@ | |
| $(obj_host_dir)/%.o: $(source_dir)/%.c $(headers) | $(obj_host_dir) | |
| $(compiler_host) $(opts_common) $(opts_host) $< -o $@ | |
| $(obj_host_dir)/%.o: $(source_dir)/%.cpp $(headers) | $(obj_host_dir) | |
| $(compiler_host) $(opts_common) $(opts_host) $< -o $@ | |
| $(obj_host_dir)/%.o: $(source_dir)/coi/%.cpp $(headers) | $(obj_host_dir) | |
| $(compiler_host) $(opts_common) $(opts_host) $< -o $@ | |
| $(obj_host_dir)/%.o: $(source_dir)/orsl-lite/lib/%.c $(headers) | $(obj_host_dir) | |
| $(compiler_host) $(opts_common) $(opts_host) $< -o $@ | |
| $(build_target_dir)/liboffload.so: $(build_target_dir)/liboffload.so.5 | $(build_target_dir) | |
| ln -f $< $@ | |
| $(build_target_dir)/liboffload.so.5: $(obj_liboffload_target) | $(build_target_dir) | |
| $(compiler_target) $(opts_liboffload_target) $(opts_target) $^ -o $@ | |
| $(obj_target_dir)/%.o: $(source_dir)/%.c $(headers) | $(obj_target_dir) | |
| $(compiler_target) $(opts_common) $(opts_target) $< -o $@ | |
| $(obj_target_dir)/%.o: $(source_dir)/%.cpp $(headers) | $(obj_target_dir) | |
| $(compiler_target) $(opts_common) $(opts_target) $< -o $@ | |
| $(obj_target_dir)/%.o: $(source_dir)/coi/%.cpp $(headers) | $(obj_target_dir) | |
| $(compiler_target) $(opts_common) $(opts_target) $< -o $@ | |
| $(obj_target_dir)/%.o: $(source_dir)/orsl-lite/lib/%.c $(headers) | $(obj_target_dir) | |
| $(compiler_target) $(opts_common) $(opts_target) $< -o $@ | |
| $(build_host_dir)/%.o: $(source_dir)/%.cpp $(headers) | $(build_host_dir) | |
| $(compiler_host) $(opts_common) $(opts_host) $< -o $@ | |
| $(build_target_dir)/%.o: $(source_dir)/%.cpp $(headers) | $(build_target_dir) | |
| $(compiler_target) $(opts_common) $(opts_target) $< -o $@ | |
| $(imported_dir)/omp.h: $(omp_header_dir)/omp.h | $(imported_dir) | |
| cp $< $@ | |
| $(build_host_dir) $(build_target_dir) $(obj_host_dir) $(obj_target_dir): | $(build_dir) | |
| $(shell mkdir -p $@ >/dev/null 2>/dev/null) | |
| @echo "Created $@ directory" | |
| $(build_dir): | |
| $(shell mkdir -p $@ >/dev/null 2>/dev/null) | |
| @echo "Created $@ directory" | |
| $(imported_dir): | |
| $(shell mkdir -p $@ >/dev/null 2>/dev/null) | |
| @echo "Created $@ directory" | |
| clean: | |
| $(shell rm -rf $(build_dir)) | |
| @echo "Remove $(build_dir) directory" | |
| info: | |
| @echo "root_dir = $(root_dir)" | |
| @echo "build_dir = $(build_dir)" | |
| @echo "mpss_dir = $(mpss_dir)" | |
| @echo "libiomp_host_dir = $(libiomp_host_dir)" | |
| @echo "libiomp_target_dir = $(libiomp_target_dir)" | |
| @echo "omp_header_dir = $(omp_header_dir)" | |
| @echo "os_host = $(os_host)" | |
| @echo "os_target = $(os_target)" | |
| @echo "compiler_host = $(compiler_host)" | |
| @echo "compiler_target = $(compiler_target)" | |
| @echo "options_host = $(options_host)" | |
| @echo "options_target = $(options_target)" | |