Attempt to fix stdint/cstdint modules try 2

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@287690 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eric Fiselier 2016-11-22 20:05:19 +00:00
parent faa8312d51
commit 6010dc84c6
6 changed files with 108 additions and 18 deletions

View File

@ -45,7 +45,13 @@ module std [system] {
// <stddef.h>'s __need_* macros require textual inclusion.
textual header "stddef.h"
}
// FIXME: <stdint.h> is missing.
module stdint_h {
header "stdint.h"
export *
// FIXME: This module only exists on OS X and for some reason the
// wildcard above doesn't export it.
export Darwin.C.stdint
}
module stdio_h {
// <stdio.h>'s __need_* macros require textual inclusion.
textual header "stdio.h"
@ -158,6 +164,7 @@ module std [system] {
}
module cstdint {
header "cstdint"
export depr.stdint_h
export *
}
module cstdio {

View File

@ -0,0 +1,21 @@
//===----------------------------------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// REQUIRES: modules-support
// Test that <cinttypes> re-exports <cstdint>
// RUN: %build_module
#include <cinttypes>
int main() {
int8_t x; ((void)x);
std::int8_t y; ((void)y);
}

View File

@ -0,0 +1,21 @@
//===----------------------------------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// REQUIRES: modules-support
// Test that <cstdint> re-exports <stdint.h>
// RUN: %build_module
#include <cstdint>
int main() {
int8_t x; ((void)x);
std::int8_t y; ((void)y);
}

View File

@ -0,0 +1,20 @@
//===----------------------------------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// REQUIRES: modules-support
// Test that intypes.h re-exports stdint.h
// RUN: %build_module
#include <inttypes.h>
int main() {
int8_t x; ((void)x);
}

View File

@ -0,0 +1,20 @@
//===----------------------------------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// REQUIRES: modules-support
// Test that int8_t and the like are exported from stdint.h not inttypes.h
// RUN: %build_module
#include <stdint.h>
int main() {
int8_t x; ((void)x);
}

View File

@ -65,7 +65,8 @@ class Configuration(object):
self.cxx_library_root = None
self.cxx_runtime_root = None
self.abi_library_root = None
self.module_cache_path = None
self.enable_modules = False
self.modules_flags = None
self.env = {}
self.use_target = False
self.use_system_cxx_lib = False
@ -725,9 +726,12 @@ class Configuration(object):
self.cxx.compile_flags += ['-O0']
def configure_modules(self):
supports_modules = self.cxx.hasCompileFlag('-fmodules')
enable_modules = self.get_lit_bool('enable_modules', False)
if enable_modules and not supports_modules:
modules_flags = ['-fmodules']
if platform.system() != 'Darwin':
modules_flags += ['-Xclang', '-fmodules-local-submodule-visibility']
supports_modules = self.cxx.hasCompileFlag(modules_flags)
self.enable_modules = self.get_lit_bool('enable_modules', False)
if self.enable_modules and not supports_modules:
self.lit_config.fatal(
'-fmodules is enabled but not supported by the compiler')
if not supports_modules:
@ -739,11 +743,11 @@ class Configuration(object):
if os.path.isdir(module_cache):
shutil.rmtree(module_cache)
os.makedirs(module_cache)
self.module_cache_path = module_cache
if enable_modules:
self.modules_flags = modules_flags + \
['-fmodules-cache-path=' + module_cache]
if self.enable_modules:
self.config.available_features.add('-fmodules')
self.cxx.compile_flags += ['-fmodules',
'-fmodules-cache-path=' + module_cache]
self.cxx.compile_flags += self.modules_flags
def configure_substitutions(self):
sub = self.config.substitutions
@ -759,12 +763,6 @@ class Configuration(object):
sub.append(('%link_flags', link_flags_str))
sub.append(('%all_flags', all_flags))
module_flags = None
if not self.module_cache_path is None:
module_flags = '-fmodules -fmodules-cache-path=' \
+ self.module_cache_path + ' '
# Add compile and link shortcuts
compile_str = (self.cxx.path + ' -o %t.o %s -c ' + flags_str
+ compile_flags_str)
@ -774,8 +772,11 @@ class Configuration(object):
build_str = self.cxx.path + ' -o %t.exe %s ' + all_flags
sub.append(('%compile', compile_str))
sub.append(('%link', link_str))
if not module_flags is None:
sub.append(('%build_module', build_str + ' ' + module_flags))
if self.enable_modules:
sub.append(('%build_module', build_str))
elif self.modules_flags is not None:
modules_str = ' '.join(self.modules_flags) + ' '
sub.append(('%build_module', build_str + ' ' + modules_str))
sub.append(('%build', build_str))
# Configure exec prefix substitutions.
exec_env_str = 'env ' if len(self.env) != 0 else ''
@ -788,7 +789,7 @@ class Configuration(object):
sub.append(('%exec', exec_str))
# Configure run shortcut
sub.append(('%run', exec_str + ' %t.exe'))
# Configure not program substitions
# Configure not program substitutions
not_py = os.path.join(self.libcxx_src_root, 'utils', 'not', 'not.py')
not_str = '%s %s' % (sys.executable, not_py)
sub.append(('not', not_str))