diff options
author | Marat Dukhan <maratek@gmail.com> | 2017-02-10 18:22:45 -0500 |
---|---|---|
committer | Marat Dukhan <maratek@gmail.com> | 2017-02-10 18:22:45 -0500 |
commit | 616cbde1753b73068376d9dccea1dd5b10970e16 (patch) | |
tree | ef65e0b523d1cba1924736b6276221e285a288ae /configure.py | |
parent | 17747d7ef2d54dc15af63f9d05a261e04526ba5d (diff) | |
download | pthreadpool-616cbde1753b73068376d9dccea1dd5b10970e16.tar.gz |
Config: swtich to confu
Diffstat (limited to 'configure.py')
-rwxr-xr-x | configure.py | 205 |
1 files changed, 13 insertions, 192 deletions
diff --git a/configure.py b/configure.py index a8f7528..7a82481 100755 --- a/configure.py +++ b/configure.py @@ -1,204 +1,25 @@ #!/usr/bin/env python -import os -import sys -import glob -import argparse -import ninja_syntax +import confu +parser = confu.standard_parser("pthreadpool configuration script") -class Configuration: - def __init__(self, options): - self.output = open("build.ninja", "w") - self.writer = ninja_syntax.Writer(self.output) - self.source_dir = None - self.build_dir = None - self.artifact_dir = None - self.prefix_dir = options.prefix - self.include_dirs = [] - self.object_ext = ".bc" +def main(args): + options = parser.parse_args(args) + build = confu.Build.from_options(options) - # Variables - self.writer.variable("nacl_sdk_dir", options.nacl_sdk) - self._set_pnacl_vars() - self.writer.variable("cflags", "-std=gnu11") - self.writer.variable("cxxflags", "-std=gnu++11") - self.writer.variable("optflags", "-O3") + build.export_cpath("include", ["pthreadpool.h"]) - # Rules - self.writer.rule("cc", "$pnacl_cc -o $out -c $in -MMD -MF $out.d $optflags $cflags $includes", - deps="gcc", depfile="$out.d", - description="CC[PNaCl] $descpath") - self.writer.rule("cxx", "$pnacl_cxx -o $out -c $in -MMD -MF $out.d $optflags $cxxflags $includes", - deps="gcc", depfile="$out.d", - description="CXX[PNaCl] $descpath") - self.writer.rule("ccld", "$pnacl_cc -o $out $in $libs $libdirs $ldflags", - description="CCLD[PNaCl] $descpath") - self.writer.rule("cxxld", "$pnacl_cxx -o $out $in $libs $libdirs $ldflags", - description="CXXLD[PNaCl] $descpath") - self.writer.rule("ar", "$pnacl_ar rcs $out $in", - description="AR[PNaCl] $descpath") - self.writer.rule("finalize", "$pnacl_finalize $finflags -o $out $in", - description="FINALIZE[PNaCl] $descpath") - self.writer.rule("translate", "$pnacl_translate -arch $arch -o $out $in", - description="TRANSLATE[PNaCl] $descpath") - self.writer.rule("run", "$pnacl_sel_ldr $in", - description="RUN[PNaCl] $descpath", pool="console") - self.writer.rule("install", "install -m $mode $in $out", - description="INSTALL $out") + with build.options(source_dir="src", extra_include_dirs="src", deps=build.deps.fxdiv): + build.static_library("pthreadpool", build.cc("pthreadpool.c")) + with build.options(source_dir="test", deps=[build, build.deps.googletest]): + build.unittest("pthreadpool-test", build.cxx("pthreadpool.cc")) - def _set_pnacl_vars(self): - if sys.platform == "win32": - self.writer.variable("pnacl_toolchain_dir", "$nacl_sdk_dir/toolchain/win_pnacl") - self.writer.variable("pnacl_cc", "$pnacl_toolchain_dir/bin/pnacl-clang.bat") - self.writer.variable("pnacl_cxx", "$pnacl_toolchain_dir/bin/pnacl-clang++.bat") - self.writer.variable("pnacl_ar", "$pnacl_toolchain_dir/bin/pnacl-ar.bat") - self.writer.variable("pnacl_finalize", "$pnacl_toolchain_dir/bin/pnacl-finalize.bat") - self.writer.variable("pnacl_translate", "$pnacl_toolchain_dir/bin/pnacl-translate.bat") - elif sys.platform == "linux2" or sys.platform == "darwin": - if sys.platform == "linux2": - self.writer.variable("pnacl_toolchain_dir", "$nacl_sdk_dir/toolchain/linux_pnacl") - else: - self.writer.variable("pnacl_toolchain_dir", "$nacl_sdk_dir/toolchain/mac_pnacl") - self.writer.variable("pnacl_cc", "$pnacl_toolchain_dir/bin/pnacl-clang") - self.writer.variable("pnacl_cxx", "$pnacl_toolchain_dir/bin/pnacl-clang++") - self.writer.variable("pnacl_ar", "$pnacl_toolchain_dir/bin/pnacl-ar") - self.writer.variable("pnacl_finalize", "$pnacl_toolchain_dir/bin/pnacl-finalize") - self.writer.variable("pnacl_translate", "$pnacl_toolchain_dir/bin/pnacl-translate") - else: - raise OSError("Unsupported platform: " + sys.platform) - self.writer.variable("pnacl_sel_ldr", "$nacl_sdk_dir/tools/sel_ldr.py") - - - def _compile(self, rule, source_file, object_file): - if not os.path.isabs(source_file): - source_file = os.path.join(self.source_dir, source_file) - if object_file is None: - object_file = os.path.join(self.build_dir, os.path.relpath(source_file, self.source_dir)) + self.object_ext - variables = { - "descpath": os.path.relpath(source_file, self.source_dir) - } - if self.include_dirs: - variables["includes"] = " ".join(["-I" + i for i in self.include_dirs]) - self.writer.build(object_file, rule, source_file, variables=variables) - return object_file - - - def cc(self, source_file, object_file=None): - return self._compile("cc", source_file, object_file) - - - def cxx(self, source_file, object_file=None): - return self._compile("cxx", source_file, object_file) - - - def _link(self, rule, object_files, binary_file, binary_dir, lib_dirs, libs): - if not os.path.isabs(binary_file): - binary_file = os.path.join(binary_dir, binary_file) - variables = { - "descpath": os.path.relpath(binary_file, binary_dir) - } - if lib_dirs: - variables["libdirs"] = " ".join(["-L" + l for l in lib_dirs]) - if libs: - variables["libs"] = " ".join(["-l" + l for l in libs]) - self.writer.build(binary_file, rule, object_files, variables=variables) - return binary_file - - - def ccld(self, object_files, binary_file, lib_dirs=[], libs=[]): - return self._link("ccld", object_files, binary_file, self.build_dir, lib_dirs, libs) - - - def cxxld(self, object_files, binary_file, lib_dirs=[], libs=[]): - return self._link("cxxld", object_files, binary_file, self.build_dir, lib_dirs, libs) - - - def ar(self, object_files, archive_file): - if not os.path.isabs(archive_file): - archive_file = os.path.join(self.artifact_dir, archive_file) - variables = { - "descpath": os.path.relpath(archive_file, self.artifact_dir) - } - self.writer.build(archive_file, "ar", object_files, variables=variables) - return archive_file - - def finalize(self, binary_file, executable_file): - if not os.path.isabs(binary_file): - binary_file = os.path.join(self.build_dir, binary_file) - if not os.path.isabs(executable_file): - executable_file = os.path.join(self.artifact_dir, executable_file) - variables = { - "descpath": os.path.relpath(executable_file, self.artifact_dir) - } - self.writer.build(executable_file, "finalize", binary_file, variables=variables) - return executable_file - - def translate(self, portable_file, native_file): - if not os.path.isabs(portable_file): - portable_file = os.path.join(self.artifact_dir, portable_file) - if not os.path.isabs(native_file): - native_file = os.path.join(self.artifact_dir, native_file) - variables = { - "descpath": os.path.relpath(portable_file, self.artifact_dir), - "arch": "x86_64" - } - self.writer.build(native_file, "translate", portable_file, variables=variables) - return native_file - - def run(self, executable_file, target): - variables = { - "descpath": os.path.relpath(executable_file, self.artifact_dir) - } - self.writer.build(target, "run", executable_file, variables=variables) - - def install(self, source_file, destination_file, mode=0o644): - if not os.path.isabs(destination_file): - destination_file = os.path.join(self.prefix_dir, destination_file) - variables = { - "mode": "0%03o" % mode - } - self.writer.build(destination_file, "install", source_file, variables=variables) - return destination_file - - -parser = argparse.ArgumentParser(description="PThreadPool configuration script") -parser.add_argument("--with-nacl-sdk", dest="nacl_sdk", default=os.getenv("NACL_SDK_ROOT"), - help="Native Client (Pepper) SDK to use") -parser.add_argument("--prefix", dest="prefix", default="/usr/local") - - -def main(): - options = parser.parse_args() - - config = Configuration(options) - - root_dir = os.path.dirname(os.path.abspath(__file__)) - - config.source_dir = os.path.join(root_dir, "src") - config.build_dir = os.path.join(root_dir, "build") - config.artifact_dir = os.path.join(root_dir, "artifacts") - config.include_dirs = [os.path.join("$nacl_sdk_dir", "include"), os.path.join(root_dir, "include"), os.path.join(root_dir, "src")] - - pthreadpool_object = config.cc("pthreadpool.c") - pthreadpool_library = config.ar([pthreadpool_object], "libpthreadpool.a") - - config.source_dir = os.path.join(root_dir, "test") - config.build_dir = os.path.join(root_dir, "build", "test") - pthreadpool_test_object = config.cxx("pthreadpool.cc") - pthreadpool_test_binary = config.cxxld([pthreadpool_object, pthreadpool_test_object], "pthreadpool.bc", libs=["gtest"], lib_dirs=[os.path.join("$nacl_sdk_dir", "lib", "pnacl", "Release")]) - pthreadpool_test_binary = config.finalize(pthreadpool_test_binary, "pthreadpool.pexe") - pthreadpool_test_binary = config.translate(pthreadpool_test_binary, "pthreadpool.nexe") - config.run(pthreadpool_test_binary, "test") - - config.writer.default([pthreadpool_library, pthreadpool_test_binary]) - - config.writer.build("install", "phony", [ - config.install(os.path.join(root_dir, "include", "pthreadpool.h"), "include/pthreadpool.h"), - config.install(os.path.join(pthreadpool_object), "lib/libpthreadpool.a")]) + return build if __name__ == "__main__": - sys.exit(main()) + import sys + main(sys.argv[1:]).generate() |