From e4861f2f8978b27b3abcd59a967df5594c95d358 Mon Sep 17 00:00:00 2001 From: Ciro Santilli Date: Thu, 13 Sep 2018 09:50:03 +0100 Subject: [PATCH] fix parsec, kernel rebuild only if config change --- build-buildroot | 14 +++++++++----- common.py | 2 +- packages/gem5/external.mk | 2 +- packages/parsec_benchmark/external.mk | 13 +++++++++---- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/build-buildroot b/build-buildroot index 02123ee..8f7e54c 100755 --- a/build-buildroot +++ b/build-buildroot @@ -203,17 +203,20 @@ def main(args, extra_args=None): # CLI kernel configurations. kernel_config_fragment_cli_path = os.path.join(common.buildroot_build_dir, 'lkmc_kernel_config_fragment_cli') kernel_config_cli_str = '\n'.join(args.kernel_config) + do_write = False if os.path.exists(kernel_config_fragment_cli_path): with open(kernel_config_fragment_cli_path, 'r') as kernel_config_fragment_cli_file: kernel_config_cli_str_old = kernel_config_fragment_cli_file.read() if kernel_config_cli_str != kernel_config_cli_str_old: - # Only update if modified, otherwise Buildroot rebuilds the - # kernel always rebuilds kernel every time. do_write = True else: do_write = True - with open(kernel_config_fragment_cli_path, 'w') as kernel_config_fragment_cli_file: - kernel_config_fragment_cli_file.write(kernel_config_cli_str) + if do_write: + # Only update if modified, otherwise Buildroot tries to + # rebuilds the kernel every time, which takes a few seconds. + # even when the kernel has already been built. + with open(kernel_config_fragment_cli_path, 'w') as kernel_config_fragment_cli_file: + kernel_config_fragment_cli_file.write(kernel_config_cli_str) kernel_config_fragments.append(os.path.join(kernel_config_fragment_cli_path)) if True: # Kernel configuration fragments. @@ -269,7 +272,8 @@ def main(args, extra_args=None): assert common.run_cmd( [ 'make', - 'GEM5_LKMC_SRCDIR="{}"'.format(common.gem5_src_dir), + 'LKMC_GEM5_SRCDIR="{}"'.format(common.gem5_src_dir), + 'LKMC_PARSEC_BENCHMARK_SRCDIR="{}"'.format(common.parsec_benchmark_src_dir), 'O={}'.format(common.buildroot_build_dir), 'V={}'.format(int(args.verbose)), ] + diff --git a/common.py b/common.py index 59280a7..4e11559 100644 --- a/common.py +++ b/common.py @@ -29,7 +29,7 @@ buildroot_src_dir = os.path.join(submodules_dir, 'buildroot') gem5_default_src_dir = os.path.join(submodules_dir, 'gem5') linux_src_dir = os.path.join(submodules_dir, 'linux') qemu_src_dir = os.path.join(submodules_dir, 'qemu') -parsec_src_dir = os.path.join(submodules_dir, 'parsec-benchmark') +parsec_benchmark_src_dir = os.path.join(submodules_dir, 'parsec-benchmark') # Other default variables. arch_map = { diff --git a/packages/gem5/external.mk b/packages/gem5/external.mk index 90cef85..48a1db5 100644 --- a/packages/gem5/external.mk +++ b/packages/gem5/external.mk @@ -5,7 +5,7 @@ ################################################################################ GEM5_VERSION = 1.0 -GEM5_SITE = $(GEM5_LKMC_SRCDIR) +GEM5_SITE = $(LKMC_GEM5_SRCDIR) GEM5_SITE_METHOD = local ifeq ($(ARCH),x86_64) diff --git a/packages/parsec_benchmark/external.mk b/packages/parsec_benchmark/external.mk index 0e184f9..6564d0c 100644 --- a/packages/parsec_benchmark/external.mk +++ b/packages/parsec_benchmark/external.mk @@ -4,15 +4,20 @@ # ################################################################################ -PARSEC_BENCHMARK_VERSION = master -PARSEC_BENCHMARK_SITE = git@github.com:cirosantilli/parsec-benchmark.git -PARSEC_BENCHMARK_SITE_METHOD = git +# If we ever upstream to Buildroot. +# PARSEC_BENCHMARK_VERSION = 75d55ac446a43c47efb1044844a108c6c330184c +# PARSEC_BENCHMARK_SITE = git@github.com:cirosantilli/parsec-benchmark.git +# PARSEC_BENCHMARK_SITE_METHOD = git + +PARSEC_BENCHMARK_VERSION = 1.0 +PARSEC_BENCHMARK_SITE = $(LKMC_PARSEC_BENCHMARK_SRCDIR) +PARSEC_BENCHMARK_SITE_METHOD = local define PARSEC_BENCHMARK_BUILD_CMDS # TODO make this nicer, only untar when extract step is done. # EXTRACT_CMDS and EXTRA_DOWNLOADS would be good candidates, # but they don't run with OVERRIDE_SRCDIR. - '$(PARSEC_BENCHMARK_PKGDIR)/parsec-benchmark/get-inputs' $(if $(filter $(V),1),-v,) '$(DL_DIR)' '$(@D)/' + '$(@D)/get-inputs' $(if $(filter $(V),1),-v,) '$(DL_DIR)' '$(@D)/' # We run the benchmarks with the wrong arch here to generate the inputs on the host. # This is because on gem5 this takes too long to do. export GNU_TARGET_NAME='$(GNU_TARGET_NAME)' && \