From 6a58eade0e3da23356a50f38b7f530c0c8519b8a Mon Sep 17 00:00:00 2001 From: bolero-MURAKAMI Date: Wed, 25 Sep 2013 15:22:41 +0900 Subject: [PATCH] [tools.darkcult] fix help message. --- testspr/test.sh | 26 ++++------- tools/darkroom/darkcult.py | 91 +++++++++++++++++++++----------------- tools/darkroom/darkcult.sh | 54 ++++++++++------------ 3 files changed, 84 insertions(+), 87 deletions(-) diff --git a/testspr/test.sh b/testspr/test.sh index 4b7d85ed..3d3661f6 100755 --- a/testspr/test.sh +++ b/testspr/test.sh @@ -29,7 +29,6 @@ compile() { ${5}/${1}-${2}/bin/${1/%cc}++ -Wall -pedantic -std=c++11 -o ${stagedir}/test_${1}${2//.} ${4} ${3} results[${1}-${2}]=$? } - execute() { if [ ${results[${1}-${2}]} -eq 0 ]; then echo "${1}-${2} compile succeeded." @@ -99,14 +98,17 @@ echo " gcc-version = (${gcc_version})" echo " clang-version = (${clang_version})" echo " gcc-root = '${gcc_root}'" echo " clang-root = '${clang_root}'" -if [ ${#user_macros[*]} -gt 0 ]; then - echo " user-macros = (${user_macros[*]})" -fi -if [ ${#include_paths[*]} -gt 0 ]; then - echo " include-paths = (${include_paths[*]})" -fi +echo " user-macros = (${user_macros[*]})" +echo " include-paths = (${include_paths[*]})" echo " force = ${force}" +for user_macro in ${user_macros}; do + define_options="${define_options} -D${user_macro}" +done +for include_path in ${include_paths}; do + include_options="${include_options} -I${include_path}" +done + if [ -d "${stagedir}" ]; then if [ ${force} -eq 0 ]; then echo >&2 "error: stagedir(${stagedir}) already exists." @@ -118,18 +120,9 @@ else mkdir -p ${stagedir} fi -for user_macro in ${user_macros}; do - define_options="${define_options} -D${user_macro}" -done - -for include_path in ${include_paths}; do - include_options="${include_options} -I${include_path}" -done - for version in ${gcc_version}; do compile gcc ${version} $(cd $(dirname $0); pwd)/sprout.cpp "${define_options} ${include_options} ${version_specific_options[gcc-${version}]}" ${gcc_root} done - for version in ${clang_version}; do compile clang ${version} $(cd $(dirname $0); pwd)/sprout.cpp "${define_options} ${include_options} ${version_specific_options[clang-${version}]}" ${clang_root} done @@ -137,7 +130,6 @@ done for version in ${gcc_version}; do execute gcc ${version} done - for version in ${clang_version}; do execute clang ${version} done diff --git a/tools/darkroom/darkcult.py b/tools/darkroom/darkcult.py index 5948856d..29004fa0 100755 --- a/tools/darkroom/darkcult.py +++ b/tools/darkroom/darkcult.py @@ -1,7 +1,13 @@ #!/usr/bin/env python - +# ============================================================================= +# Copyright (c) 2011-2013 Bolero MURAKAMI +# https://github.com/bolero-MURAKAMI/Sprout +# +# Distributed under the Boost Software License, Version 1.0. (See accompanying +# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +# ============================================================================= import sys -import os +import optparse import subprocess import multiprocessing @@ -10,45 +16,50 @@ def compile(command): sys.stdout.flush() return subprocess.call(command, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE) -if __name__=="__main__": - argv = sys.argv - argc = len(argv) +def main(): + parser = optparse.OptionParser(description='darkcult.py') + parser.add_option('--src', type='string') + parser.add_option('--stagedir', type='string') + parser.add_option('--output', type='string') + parser.add_option('--compiler', type='string') + parser.add_option('--width', type='int') + parser.add_option('--height', type='int') + parser.add_option('--tile_width', type='int') + parser.add_option('--tile_height', type='int') + parser.add_option('--compile_options', type='string') + parser.add_option('--darkcult_cpp', type='string') + parser.add_option('--max_procs', type='int') + (opts, args) = parser.parse_args() - src = argv[1] - stagedir = argv[2] - output = argv[3] - compiler = argv[4] - width = int(argv[5]) - height = int(argv[6]) - tile_width = int(argv[7]) - tile_height = int(argv[8]) - compile_options = argv[9] - darkcult_cpp = argv[10] - max_procs = int(argv[11]) + pool = multiprocessing.Pool(opts.max_procs if opts.max_procs != 0 else None) - commands = [] - for y in range(0, height, tile_height): - for x in range(0, width, tile_width): - bin = "%s/%d/%d.out" % (stagedir, y, x) - out = "%s/%d/%d.ppm" % (stagedir, y, x) - command = "%s -o %s" \ - " %s" \ - " -DDARKROOM_SOURCE=\'\"%s\"\'" \ - " -DDARKROOM_TOTAL_WIDTH=%d -DDARKROOM_TOTAL_HEIGHT=%d" \ - " -DDARKROOM_TILE_WIDTH=%d -DDARKROOM_TILE_HEIGHT=%d" \ - " -DDARKROOM_OFFSET_X=%d -DDARKROOM_OFFSET_Y=%d" \ - " %s" \ - " && %s > %s" \ - % (compiler, bin, - compile_options, - src, - width, height, - tile_width, tile_height, - x, y, - darkcult_cpp, - bin, out + def format_command(x, y): + bin = "%s/%d/%d.out" % (opts.stagedir, y, x) + out = "%s/%d/%d.ppm" % (opts.stagedir, y, x) + return "%s -o %s" \ + " %s" \ + " -DDARKROOM_SOURCE=\'\"%s\"\'" \ + " -DDARKROOM_TOTAL_WIDTH=%d -DDARKROOM_TOTAL_HEIGHT=%d" \ + " -DDARKROOM_TILE_WIDTH=%d -DDARKROOM_TILE_HEIGHT=%d" \ + " -DDARKROOM_OFFSET_X=%d -DDARKROOM_OFFSET_Y=%d" \ + " %s" \ + " && %s > %s" \ + % (opts.compiler, bin, + opts.compile_options, + opts.src, + opts.width, opts.height, + opts.tile_width, opts.tile_height, + x, y, + opts.darkcult_cpp, + bin, out ) - commands.append(command); + return any(pool.map( + compile, + [format_command(x, y) + for x in range(0, opts.width, opts.tile_width) + for y in range(0, opts.height, opts.tile_height) + ] + )) - pool = multiprocessing.Pool(max_procs) - sys.exit(any(pool.map(compile, commands))) +if __name__=="__main__": + sys.exit(main()) diff --git a/tools/darkroom/darkcult.sh b/tools/darkroom/darkcult.sh index 1912ed26..19f01a16 100755 --- a/tools/darkroom/darkcult.sh +++ b/tools/darkroom/darkcult.sh @@ -8,6 +8,7 @@ # ============================================================================= # # requires: Netpbm (http://netpbm.sourceforge.net/) +# requires: Python (http://www.python.org/) if parallel mode # src="../../example/darkroom/two_spheres.hpp" stagedir="darkroom" @@ -85,6 +86,8 @@ if [ ${use_help} -ne 0 ]; then echo " -I, --include= Add system include path." echo "" echo " -P, --max-procs= The maximum number of process use." + echo " If other than 1, processing in parallel mode." + echo " If 0, using the number of CPUs in the system." echo " Default; 1" echo "" echo " -f, --force Allow overwrite of ." @@ -102,12 +105,8 @@ echo " width = ${width}" echo " height = ${height}" echo " tile-width = ${tile_width}" echo " tile-height = ${tile_height}" -if [ ${#user_macros[*]} -gt 0 ]; then - echo " user-macros = (${user_macros[*]})" -fi -if [ ${#include_paths[*]} -gt 0 ]; then - echo " include-paths = (${include_paths[*]})" -fi +echo " user-macros = (${user_macros[*]})" +echo " include-paths = (${include_paths[*]})" echo " max-procs = ${max_procs}" echo " force = ${force}" @@ -116,6 +115,14 @@ if [ ! -f "${src}" -a ! -f "$(cd $(dirname $0); pwd)/${src}" ]; then exit 1 fi +for user_macro in ${user_macros}; do + define_options="${define_options} -D${user_macro}" +done +for include_path in ${include_paths}; do + include_options="${include_options} -I${include_path}" +done +compile_options="-std=c++11 ${define_options} ${include_options}" + if [ -d "${stagedir}" ]; then if [ ${force} -eq 0 ]; then echo >&2 "error: stagedir(${stagedir}) already exists." @@ -126,21 +133,10 @@ if [ -d "${stagedir}" ]; then else mkdir -p ${stagedir} fi - -for user_macro in ${user_macros}; do - define_options="${define_options} -D${user_macro}" -done - -for include_path in ${include_paths}; do - include_options="${include_options} -I${include_path}" -done - for ((y=0; y ${out} if [ $? -ne 0 ]; then echo "" - echo >&2 "error: compile(${binname}) failed." + echo >&2 "error: compile(${y}/${x}) failed." exit 1 fi - ${bin} > ${stagedir}/${y}/${x}.ppm done echo "" @@ -177,11 +173,11 @@ else echo " processing in parallel mode." echo -n " " python "${darkcult_py}" \ - "${src}" "${stagedir}" "${output}" "${compiler}" \ - "${width}" "${height}" \ - "${tile_width}" "${tile_height}" \ - "${compile_options}" "${darkcult_cpp}" \ - "${max_procs}" + "--src=${src}" "--stagedir=${stagedir}" "--output=${output}" "--compiler=${compiler}" \ + "--width=${width}" "--height=${height}" \ + "--tile_width=${tile_width}" "--tile_height=${tile_height}"" "\ + "--compile_options=${compile_options}" "--darkcult_cpp=${darkcult_cpp}" \ + "--max_procs=${max_procs}" if [ $? -ne 0 ]; then echo "" echo >&2 "error: compile failed." @@ -195,12 +191,10 @@ echo " elapsed(total) = ${elapsed}s" for ((y=0; y /dev/null -# convert +append $(ls *.ppm | sort -n) ../${y}.ppm pnmcat -lr $(ls *.ppm | sort -n) > ../${y}.ppm popd > /dev/null done pushd ${stagedir} > /dev/null -#convert -append $(ls *.ppm | sort -n) ${output} pnmcat -tb $(ls *.ppm | sort -n) > ${output} popd > /dev/null