more build cleanups

master
Daniel Kolesa 2017-05-01 19:03:47 +02:00
parent 52ed8d7c08
commit cd1a0108ab
1 changed files with 27 additions and 33 deletions

View File

@ -28,28 +28,28 @@ namespace fs = std::experimental::filesystem;
/* THESE VARIABLES CAN BE ALTERED */ /* THESE VARIABLES CAN BE ALTERED */
static char const *EXAMPLES[] = { static std::string EXAMPLES[] = {
"format", "listdir", "range", "range_pipe", "signal", "format", "listdir", "range", "range_pipe", "signal",
"stream1", "stream2", "coroutine1", "coroutine2", "concurrency" "stream1", "stream2", "coroutine1", "coroutine2", "concurrency"
}; };
static char const *ASM_SOURCE_DIR = "src/asm"; static fs::path ASM_SOURCE_DIR = "src/asm";
static char const *ASM_SOURCES[] = { static std::string ASM_SOURCES[] = {
"jump_all_gas", "make_all_gas", "ontop_all_gas" "jump_all_gas", "make_all_gas", "ontop_all_gas"
}; };
static char const *CXX_SOURCE_DIR = "src"; static fs::path CXX_SOURCE_DIR = "src";
static char const *CXX_SOURCES[] = { static std::string CXX_SOURCES[] = {
"context_stack", "io", "concurrency" "context_stack", "io", "concurrency"
}; };
static char const *TEST_DIR = "tests"; static fs::path TEST_DIR = "tests";
static char const *TEST_CASES[] = { static std::string TEST_CASES[] = {
"algorithm", "range" "algorithm", "range"
}; };
static char const *OSTD_SHARED_LIB = "libostd.so"; static std::string OSTD_SHARED_LIB = "libostd.so";
static char const *OSTD_STATIC_LIB = "libostd.a"; static std::string OSTD_STATIC_LIB = "libostd.a";
/* DO NOT CHANGE PAST THIS POINT */ /* DO NOT CHANGE PAST THIS POINT */
@ -183,7 +183,7 @@ int main(int argc, char **argv) {
bool build_testsuite = true; bool build_testsuite = true;
bool build_static = true; bool build_static = true;
bool build_shared = false; bool build_shared = false;
char const *build_cfg = "debug"; std::string build_cfg = "debug";
bool clean = false; bool clean = false;
std::string cxxflags = "-std=c++1z -I. -O2 -Wall -Wextra -Wshadow " std::string cxxflags = "-std=c++1z -I. -O2 -Wall -Wextra -Wshadow "
@ -192,40 +192,40 @@ int main(int argc, char **argv) {
std::string asflags = ""; std::string asflags = "";
#define ARG_BOOL(arg, name, var) \ #define ARG_BOOL(arg, name, var) \
if (!std::strcmp(arg, name) || !std::strcmp(arg, "no-" name)) { \ if ((arg == name) || (arg == "no-" name)) { \
var = !!std::strncmp(arg, "no-", 3); \ var = (arg.substr(0, 3) != "-no"); \
continue; \ continue; \
} }
for (int i = 1; i < argc; ++i) { for (int i = 1; i < argc; ++i) {
char const *arg = argv[i]; std::string arg = argv[i];
ARG_BOOL(arg, "examples", build_examples); ARG_BOOL(arg, "examples", build_examples);
ARG_BOOL(arg, "test-suite", build_testsuite); ARG_BOOL(arg, "test-suite", build_testsuite);
ARG_BOOL(arg, "static-lib", build_static); ARG_BOOL(arg, "static-lib", build_static);
ARG_BOOL(arg, "shared-lib", build_shared); ARG_BOOL(arg, "shared-lib", build_shared);
if (!std::strcmp(arg, "release") || !std::strcmp(arg, "debug")) { if ((arg == "release") || (arg == "debug")) {
build_cfg = arg; build_cfg = arg;
continue; continue;
} }
if (!std::strcmp(arg, "verbose")) { if (arg == "verbose") {
verbose = true; verbose = true;
continue; continue;
} }
if (!std::strcmp(arg, "clean")) { if (arg == "clean") {
clean = true; clean = true;
continue; continue;
} }
if (!std::strcmp(arg, "help")) { if (arg == "help") {
print_help(argv[0]); print_help(argv[0]);
return 0; return 0;
} }
printf("unknown argument: %s\n", arg); printf("unknown argument: %s\n", arg.data());
return 1; return 1;
} }
#undef ARG_BOOL #undef ARG_BOOL
char const *default_lib = OSTD_SHARED_LIB; std::string default_lib = OSTD_SHARED_LIB;
if (build_static) { if (build_static) {
default_lib = OSTD_STATIC_LIB; default_lib = OSTD_STATIC_LIB;
} }
@ -240,7 +240,7 @@ int main(int argc, char **argv) {
add_cross(as); add_cross(as);
add_cross(ar); add_cross(ar);
if (!std::strcmp(build_cfg, "debug")) { if (build_cfg == "debug") {
cxxflags += " -g"; cxxflags += " -g";
} }
@ -258,13 +258,13 @@ int main(int argc, char **argv) {
try_remove(rp); try_remove(rp);
} }
for (auto aso: ASM_SOURCES) { for (auto aso: ASM_SOURCES) {
auto rp = path_with_ext(fs::path{ASM_SOURCE_DIR} / aso, ".o"); auto rp = path_with_ext(ASM_SOURCE_DIR / aso, ".o");
try_remove(rp); try_remove(rp);
rp.replace_filename(std::string{aso} + "_dyn.o"); rp.replace_filename(std::string{aso} + "_dyn.o");
try_remove(rp); try_remove(rp);
} }
for (auto cso: CXX_SOURCES) { for (auto cso: CXX_SOURCES) {
auto rp = path_with_ext(fs::path{CXX_SOURCE_DIR} / cso, ".o"); auto rp = path_with_ext(CXX_SOURCE_DIR / cso, ".o");
try_remove(rp); try_remove(rp);
rp.replace_filename(std::string{cso} + "_dyn.o"); rp.replace_filename(std::string{cso} + "_dyn.o");
try_remove(rp); try_remove(rp);
@ -342,7 +342,7 @@ int main(int argc, char **argv) {
exec_v(cxx, args); exec_v(cxx, args);
if (!std::strcmp(build_cfg, "release")) { if (build_cfg == "release") {
args.clear(); args.clear();
args.push_back(output); args.push_back(output);
exec_v(strip, args); exec_v(strip, args);
@ -379,7 +379,7 @@ int main(int argc, char **argv) {
}; };
auto build_test = [&](std::string const &name) { auto build_test = [&](std::string const &name) {
auto base = fs::path{TEST_DIR} / name; auto base = TEST_DIR / name;
auto ccf = path_with_ext(base, ".cc"); auto ccf = path_with_ext(base, ".cc");
auto obf = path_with_ext(base, ".o"); auto obf = path_with_ext(base, ".o");
@ -448,16 +448,10 @@ int main(int argc, char **argv) {
std::printf("Building the library...\n"); std::printf("Building the library...\n");
for (auto aso: ASM_SOURCES) { for (auto aso: ASM_SOURCES) {
build_obj( build_obj(ASM_SOURCE_DIR / aso, ".S", call_as, asm_obj, asm_dynobj);
fs::path{ASM_SOURCE_DIR} / aso, ".S",
call_as, asm_obj, asm_dynobj
);
} }
for (auto cso: CXX_SOURCES) { for (auto cso: CXX_SOURCES) {
build_obj( build_obj(CXX_SOURCE_DIR / cso, ".cc", call_cxx, cxx_obj, cxx_dynobj);
fs::path{CXX_SOURCE_DIR} / cso, ".cc",
call_cxx, cxx_obj, cxx_dynobj
);
} }
/* excessive, but whatever... maybe add better /* excessive, but whatever... maybe add better
@ -510,7 +504,7 @@ int main(int argc, char **argv) {
tp.destroy(); tp.destroy();
if (build_testsuite) { if (build_testsuite) {
exec_v("./test_runner", { TEST_DIR }); exec_v("./test_runner", { TEST_DIR.string() });
} }
return 0; return 0;