|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from __future__ import print_function |
|
import sys |
|
import shutil as sh |
|
import os |
|
import glob |
|
import re |
|
|
|
test_template = """ |
|
TEST_SRC := %(TEST_SRC)s |
|
TEST_NAME := %(TEST_NAME)s |
|
include $(ROOTDIR)/thrust/internal/build/generic_test.mk |
|
""" |
|
example_template = """ |
|
EXAMPLE_SRC := %(EXAMPLE_SRC)s |
|
EXAMPLE_NAME := %(EXAMPLE_NAME)s |
|
include $(ROOTDIR)/thrust/internal/build/generic_example.mk |
|
""" |
|
|
|
def Glob(pattern, directory,exclude='\B'): |
|
src = glob.glob(os.path.join(directory,pattern)) |
|
p = re.compile(exclude) |
|
src = [s for s in src if not p.match(s)] |
|
return src |
|
|
|
|
|
def generate_test_mk(mk_path, test_path, group, TEST_DIR): |
|
print('Generating makefiles in "'+mk_path+'" for tests in "'+test_path+'"') |
|
src_cu = Glob("*.cu", test_path, ".*testframework.cu$") |
|
src_cxx = Glob("*.cpp", test_path) |
|
src_cu.sort(); |
|
src_cxx.sort(); |
|
src_all = src_cu + src_cxx; |
|
tests_all = [] |
|
dependencies_all = [] |
|
for s in src_all: |
|
fn = os.path.splitext(os.path.basename(s)); |
|
t = "thrust."+group+"."+fn[0] |
|
e = fn[1] |
|
mkfile = test_template % {"TEST_SRC" : s, "TEST_NAME" : t} |
|
f = open(os.path.join(mk_path,t+".mk"), 'w') |
|
f.write(mkfile) |
|
f.close() |
|
tests_all.append(os.path.join(mk_path,t)) |
|
dependencies_all.append(t+": testframework") |
|
return [tests_all, dependencies_all] |
|
|
|
def generate_example_mk(mk_path, example_path, group, EXAMPLE_DIR): |
|
print('Generating makefiles in "'+mk_path+'" for examples in "'+example_path+'"') |
|
src_cu = Glob("*.cu", example_path) |
|
src_cxx = Glob("*.cpp", example_path) |
|
src_cu.sort(); |
|
src_cxx.sort(); |
|
src_all = src_cu + src_cxx; |
|
examples_all = [] |
|
for s in src_all: |
|
fn = os.path.splitext(os.path.basename(s)); |
|
t = "thrust."+group+"."+fn[0] |
|
e = fn[1] |
|
mkfile = example_template % {"EXAMPLE_SRC" : s, "EXAMPLE_NAME" : t} |
|
f = open(os.path.join(mk_path,t+".mk"), 'w') |
|
f.write(mkfile) |
|
f.close() |
|
examples_all.append(os.path.join(mk_path,t)) |
|
return examples_all |
|
|
|
|
|
|
|
def relpath(path, start): |
|
"""Return a relative version of a path""" |
|
|
|
import posixpath |
|
if not path: |
|
raise ValueError("no path specified") |
|
start_list = posixpath.abspath(start).split(posixpath.sep) |
|
path_list = posixpath.abspath(path).split(posixpath.sep) |
|
|
|
i = len(posixpath.commonprefix([start_list, path_list])) |
|
rel_list = [posixpath.pardir] * (len(start_list)-i) + path_list[i:] |
|
if not rel_list: |
|
return posixpath.curdir |
|
return posixpath.join(*rel_list) |
|
|
|
mk_path=sys.argv[1] |
|
REL_DIR="../../" |
|
if (len(sys.argv) > 2): |
|
root_path=sys.argv[2]; |
|
mk_path = relpath(mk_path, root_path) |
|
REL_DIR = relpath(root_path,mk_path) |
|
|
|
try: |
|
sh.rmtree(mk_path) |
|
except: |
|
pass |
|
os.makedirs(mk_path) |
|
|
|
tests_all, dependencies_all = generate_test_mk(mk_path, "testing/", "test", REL_DIR) |
|
tests_cu, dependencies_cu = generate_test_mk(mk_path, "testing/cuda/", "test.cuda", REL_DIR) |
|
tests_all.extend(tests_cu) |
|
dependencies_all.extend(dependencies_cu) |
|
|
|
testing_mk = "" |
|
|
|
for t in tests_all: |
|
testing_mk += "PROJECTS += "+t+"\n" |
|
testing_mk += "PROJECTS += internal/build/testframework\n" |
|
|
|
|
|
f = open(os.path.join(mk_path,"testing.mk"),'w') |
|
f.write(testing_mk) |
|
f.close() |
|
|
|
dependencies_mk = "" |
|
for d in dependencies_all: |
|
dependencies_mk += d + "\n" |
|
|
|
f = open(os.path.join(mk_path,"dependencies.mk"),'w') |
|
f.write(dependencies_mk) |
|
f.close() |
|
|
|
|
|
examples_mk = "" |
|
examples_all = generate_example_mk(mk_path, "examples/", "example", REL_DIR) |
|
examples_cuda = generate_example_mk(mk_path, "examples/cuda/", "example.cuda", REL_DIR) |
|
examples_all.extend(examples_cuda) |
|
for e in examples_all: |
|
examples_mk += "PROJECTS += "+e+"\n" |
|
|
|
f = open(os.path.join(mk_path,"examples.mk"),'w') |
|
f.write(examples_mk) |
|
f.close() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|