From: Dmitri Gribenko Date: Wed, 12 Feb 2014 10:40:07 +0000 (+0000) Subject: 'svn add' files I forgot for r201224 (Add an option to allow Clang verify X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=283e9bcbf4873ddef1049747c0ff7f2efe50d611;p=clang 'svn add' files I forgot for r201224 (Add an option to allow Clang verify source files for a module only once during) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@201225 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang-c/BuildSystem.h b/include/clang-c/BuildSystem.h new file mode 100644 index 0000000000..400ee6e0dd --- /dev/null +++ b/include/clang-c/BuildSystem.h @@ -0,0 +1,44 @@ +/*==-- clang-c/BuildSysetm.h - Utilities for use by build systems -*- C -*-===*\ +|* *| +|* The LLVM Compiler Infrastructure *| +|* *| +|* This file is distributed under the University of Illinois Open Source *| +|* License. See LICENSE.TXT for details. *| +|* *| +|*===----------------------------------------------------------------------===*| +|* *| +|* This header provides various utilities for use by build systems. *| +|* *| +\*===----------------------------------------------------------------------===*/ + +#ifndef CLANG_BUILD_SYSTEM_H +#define CLANG_BUILD_SYSTEM_H + +#include "clang-c/Platform.h" +#include "clang-c/CXString.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup BUILD_SYSTEM Build system utilities + * @{ + */ + +/** + * \brief Return the timestamp for use with Clang's + * \c -fbuild-session-timestamp= option. + */ +CINDEX_LINKAGE unsigned long long clang_getBuildSessionTimestamp(void); + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif // CLANG_BUILD_SYSTEM_H + diff --git a/test/Modules/fmodules-validate-once-per-build-session.c b/test/Modules/fmodules-validate-once-per-build-session.c new file mode 100644 index 0000000000..dac8a7197e --- /dev/null +++ b/test/Modules/fmodules-validate-once-per-build-session.c @@ -0,0 +1,45 @@ +#include "foo.h" + +// Clear the module cache. +// RUN: rm -rf %t +// RUN: mkdir -p %t/Inputs +// RUN: mkdir -p %t/modules-to-compare + +// === +// Create a module with system headers. +// RUN: echo 'void meow(void);' > %t/Inputs/foo.h +// RUN: echo 'module Foo [system] { header "foo.h" }' > %t/Inputs/module.map + +// === +// Compile the module. +// RUN: %clang_cc1 -cc1 -fmodules -fdisable-module-hash -fmodules-cache-path=%t/modules-cache -fsyntax-only -I %t/Inputs -fbuild-session-timestamp=1390000000 -fmodules-validate-once-per-build-session %s +// RUN: ls -R %t/modules-cache | grep Foo.pcm.timestamp +// RUN: cp %t/modules-cache/Foo.pcm %t/modules-to-compare/Foo-before.pcm + +// === +// Use it, and make sure that we did not recompile it. +// RUN: %clang_cc1 -cc1 -fmodules -fdisable-module-hash -fmodules-cache-path=%t/modules-cache -fsyntax-only -I %t/Inputs -fbuild-session-timestamp=1390000000 -fmodules-validate-once-per-build-session %s +// RUN: ls -R %t/modules-cache | grep Foo.pcm.timestamp +// RUN: find %t/modules-cache -name Foo.pcm | xargs -I {} cp {} %t/modules-to-compare/Foo-after.pcm + +// RUN: diff %t/modules-to-compare/Foo-before.pcm %t/modules-to-compare/Foo-after.pcm + +// === +// Change the sources. +// RUN: echo 'void meow2(void);' > %t/Inputs/foo.h + +// === +// Use the module, and make sure that we did not recompile it, even though the sources changed. +// RUN: %clang_cc1 -cc1 -fmodules -fdisable-module-hash -fmodules-cache-path=%t/modules-cache -fsyntax-only -I %t/Inputs -fbuild-session-timestamp=1390000000 -fmodules-validate-once-per-build-session %s +// RUN: ls -R %t/modules-cache | grep Foo.pcm.timestamp +// RUN: find %t/modules-cache -name Foo.pcm | xargs -I {} cp {} %t/modules-to-compare/Foo-after.pcm + +// RUN: diff %t/modules-to-compare/Foo-before.pcm %t/modules-to-compare/Foo-after.pcm + +// === +// Recompile the module if the today's date is before 01 January 2030. +// RUN: %clang_cc1 -cc1 -fmodules -fdisable-module-hash -fmodules-cache-path=%t/modules-cache -fsyntax-only -I %t/Inputs -fbuild-session-timestamp=1893456000 -fmodules-validate-once-per-build-session %s +// RUN: ls -R %t/modules-cache | grep Foo.pcm.timestamp +// RUN: find %t/modules-cache -name Foo.pcm | xargs -I {} cp {} %t/modules-to-compare/Foo-after.pcm + +// RUN: not diff %t/modules-to-compare/Foo-before.pcm %t/modules-to-compare/Foo-after.pcm diff --git a/tools/libclang/BuildSystem.cpp b/tools/libclang/BuildSystem.cpp new file mode 100644 index 0000000000..caf8377174 --- /dev/null +++ b/tools/libclang/BuildSystem.cpp @@ -0,0 +1,22 @@ +//===- BuildSystem.cpp - Utilities for use by build systems ---------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file implements various utilities for use by build systems. +// +//===----------------------------------------------------------------------===// + +#include "clang-c/BuildSystem.h" +#include "llvm/Support/TimeValue.h" + +extern "C" { +unsigned long long clang_getBuildSessionTimestamp(void) { + return llvm::sys::TimeValue::now().toEpochTime(); +} +} // extern "C" +