From 55c24924dd108bc4fc020fbd875839e9c692ffc1 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Sun, 1 Oct 2017 03:26:36 +0200 Subject: Additional includes in std.core, new std.regex and std.threading --- buildfile | 32 ++++++++++++++++---------- std-core.mxx | 67 +++++++++++++++++++++++++++++++++++++------------------ std-detect.hxx | 15 +++++++++++++ std-regex.mxx | 55 +++++++++++++++++++++++++++++++++++++++++++++ std-threading.mxx | 60 +++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 195 insertions(+), 34 deletions(-) create mode 100644 std-detect.hxx create mode 100644 std-regex.mxx create mode 100644 std-threading.mxx diff --git a/buildfile b/buildfile index 630e684..f301ef1 100644 --- a/buildfile +++ b/buildfile @@ -39,10 +39,12 @@ else # Use the naming scheme expected by -fprebuilt-module-path=. Can also be # specified with -fmodule-file=. # - core = std.core.pcm - io = std.io.pcm + core = std.core.pcm + io = std.io.pcm + regex = std.regex.pcm + threading = std.threading.pcm - liba{std-modules}: bmia{$core $io} + liba{std-modules}: bmia{$core $io $regex $threading} export_target = $out_root/liba{std-modules} } @@ -53,17 +55,19 @@ else # # @@ Currently VC looks in Release regardless of /MD or /MDd. # - dir = release/ - core = $dir/std.core.ifc - io = $dir/std.io.ifc + dir = release/ + core = $dir/std.core.ifc + io = $dir/std.io.ifc + regex = $dir/std.regex.ifc + threading = $dir/std.threading.ifc - bmia{$core $io}: fsdir{$dir} + bmia{$core $io $regex $threading}: fsdir{$dir} # VC expects to find std.lib next to the .ifc's. Make it the real one # while std-modules -- a dummy. # ./: $dir/liba{std} - $dir/liba{std}: bmia{$core $io} + $dir/liba{std}: bmia{$core $io $regex $threading} liba{std-modules}: cxx{dummy.cxx} # @@ Doesn't work if installed so we don't bother installing it. But we @@ -87,11 +91,15 @@ else if ($cxx.target.class != "windows") cxx.libs += -lpthread - bmia{$core}: mxx{std-core} - bmia{$io}: mxx{std-io} bmia{$core} + bmia{$core}: mxx{std-core} + bmia{$io}: mxx{std-io} bmia{$core} + bmia{$regex}: mxx{std-regex} bmia{$core} bmia{$io} + bmia{$threading}: mxx{std-threading} bmia{$core} - mxx{std-core}@./: cc.module_name = std.core - mxx{std-io}@./: cc.module_name = std.io + mxx{std-core}@./: cc.module_name = std.core + mxx{std-io}@./: cc.module_name = std.io + mxx{std-regex}@./: cc.module_name = std.regex + mxx{std-threading}@./: cc.module_name = std.threading # Install into the libstd-modules/ subdirectory of, say, /usr/include/. # diff --git a/std-core.mxx b/std-core.mxx index 27f9f1e..47514f0 100644 --- a/std-core.mxx +++ b/std-core.mxx @@ -3,44 +3,43 @@ // license : MIT; see accompanying LICENSE file // For some standard library implementations we need to pre-include certain -// headers to prevent their exporting. And to detect a standard library we -// need to include a certain header first. -// -#if defined(__clang__) -# if __has_include(<__config>) // libc++ _LIBCPP_VERSION -# include <__config> -# elif __has_include() // libstdc++ __GLIBCXX__ -# include -# endif -#elif defined(__GNUC__) -# include // libstdc++ __GLIBCXX__ -#endif +// headers to prevent their exporting. + +#include "std-detect.hxx" #if defined(_MSC_VER) +/* +# include +# include +# include +# include +# include // struct tm; +*/ #elif defined(__GLIBCXX__) -# include // Names with internal linkage. +# include +# include +# include +# include +# include // Names with internal linkage. #elif defined(_LIBCPP_VERSION) -#else -# error unknown standard library implementation #endif export module std.core; export { -#include - // These are defined in which we have pre-included. // #ifdef __GLIBCXX__ namespace std { - typedef std::size_t size_t; - typedef std::ptrdiff_t ptrdiff_t; - typedef std::nullptr_t nullptr_t; + typedef __SIZE_TYPE__ size_t; + typedef __PTRDIFF_TYPE__ ptrdiff_t; + typedef decltype(nullptr) nullptr_t; } #endif +#include #include #include @@ -49,12 +48,23 @@ export #include #include +#include + +#include +#include + +#include +#include +#include +#include +#include } export { #include #include +#include #include #include // @@ Not in the proposal. @@ -65,13 +75,18 @@ export #include #include #include +#include } #if defined(_MSC_VER) || defined(__clang__) export { #include +#include +#include + #include +#include #include #include #include @@ -95,6 +110,14 @@ _GLIBCXX_END_NAMESPACE_VERSION } #endif } - - #endif + +// std.threading +// +export +{ +#include +#include +#include +#include +} diff --git a/std-detect.hxx b/std-detect.hxx new file mode 100644 index 0000000..b2998b5 --- /dev/null +++ b/std-detect.hxx @@ -0,0 +1,15 @@ +// To detect the standard library we need to include a certain header first. +// +#if defined(__clang__) +# if __has_include(<__config>) // libc++ _LIBCPP_VERSION +# include <__config> +# elif __has_include() // libstdc++ __GLIBCXX__ +# include +# endif +#elif defined(__GNUC__) +# include // libstdc++ __GLIBCXX__ +#endif + +#if !defined(_MSC_VER) && !defined(__GLIBCXX__) && !defined(_LIBCPP_VERSION) +# error unknown standard library implementation +#endif diff --git a/std-regex.mxx b/std-regex.mxx new file mode 100644 index 0000000..40cfc36 --- /dev/null +++ b/std-regex.mxx @@ -0,0 +1,55 @@ +// file : std-regex.mxx -*- C++ -*- +// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +// Pre-includes. +// +#include "std-detect.hxx" + +#if defined(_MSC_VER) +# include +# include +# include +# include +# include +# include +# include + +# include +# include +# include +# include +#elif defined(__GLIBCXX__) +# define _GLIBCXX_ALGORITHM +# define _GLIBCXX_BITSET +# define _GLIBCXX_IOSFWD +# define _GLIBCXX_ITERATOR +# define _GLIBCXX_LOCALE +# define _GLIBCXX_MEMORY +# define _GLIBCXX_SSTREAM +# define _GLIBCXX_STACK +# define _GLIBCXX_STDEXCEPT +# define _GLIBCXX_STRING +# define _GLIBCXX_UTILITY +# define _GLIBCXX_VECTOR +# define _GLIBCXX_MAP +# define _GLIBCXX_CSTRING + +# define _GLIBCXX_STD_FUNCTION_H // +# define _ALIGNED_BUFFER_H // + +# include // Missing include. +#elif defined(_LIBCPP_VERSION) +#endif + +export module std.regex; + +#ifdef __GLIBCXX__ +import std.core; +import std.io; +#endif + +export +{ +#include +} diff --git a/std-threading.mxx b/std-threading.mxx new file mode 100644 index 0000000..ab397cc --- /dev/null +++ b/std-threading.mxx @@ -0,0 +1,60 @@ +// file : std-threading.mxx -*- C++ -*- +// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +export module std.threading; // Dummy. + +#if 0 +// Pre-includes. +// +#include "std-detect.hxx" + +#if defined(_MSC_VER) +#error TODO +#elif defined(__GLIBCXX__) + +// +# define _GLIBCXX_TUPLE +# define _GLIBCXX_CHRONO +# define __EXCEPTION__ // +# define _GLIBCXX_TYPE_TRAITS +# define _GLIBCXX_SYSTEM_ERROR +# define _GLIBCXX_STD_FUNCTION_H // +# define _FUNCTEXCEPT_H +# define _MOVE_H + +// +# include // Missing include. + +// +# define _CONCURRENCE_H // +# define _ALLOC_TRAITS_H // +# define _ALLOCATOR_H // +# define _UNIQUE_PTR_H // +# define _SHARED_PTR_H // +# define _CXXABI_FORCED_H // +# include // Missing include. + +// +# define _GLIBCXX_MEMORY +# define _FUNCTIONAL_HASH_H // +# define _GLIBCXX_INVOKE_H // + +# include +#elif defined(_LIBCPP_VERSION) +#endif + +export module std.threading; + +#ifdef __GLIBCXX__ +import std.core; +#endif + +export +{ +#include +#include +#include +#include +} +#endif -- cgit v1.1