From fe9183b22f09254a756cb47d6897b1475ad811b1 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 28 Dec 2025 21:48:09 +0100 Subject: WIP --- test/suite/ctor_files/ctor.cc.bar | 1 + test/suite/ctor_files/ctor.cc.base | 1 + test/suite/ctor_files/ctor.cc.generated | 20 ++++++++++++++++++++ test/suite/ctor_files/ctor.cc.multi | 1 + test/suite/test.bat | 13 +++++++++++++ test/suite/test.cc | 17 +++++++++++++++++ test/suite/test.sh | 2 ++ 7 files changed, 55 insertions(+) create mode 100644 test/suite/test.bat (limited to 'test/suite') diff --git a/test/suite/ctor_files/ctor.cc.bar b/test/suite/ctor_files/ctor.cc.bar index 218f9cc..ab88379 100644 --- a/test/suite/ctor_files/ctor.cc.bar +++ b/test/suite/ctor_files/ctor.cc.bar @@ -23,6 +23,7 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings) "-g", "-Wall", "-Werror", + "-fexceptions", }, }, .externals = {"bar"}, diff --git a/test/suite/ctor_files/ctor.cc.base b/test/suite/ctor_files/ctor.cc.base index eab39c4..a8b3c92 100644 --- a/test/suite/ctor_files/ctor.cc.base +++ b/test/suite/ctor_files/ctor.cc.base @@ -23,6 +23,7 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings) "-g", "-Wall", "-Werror", + "-fexceptions", }, }, .externals = {"bar"}, diff --git a/test/suite/ctor_files/ctor.cc.generated b/test/suite/ctor_files/ctor.cc.generated index 5f82fd4..59927b9 100644 --- a/test/suite/ctor_files/ctor.cc.generated +++ b/test/suite/ctor_files/ctor.cc.generated @@ -16,12 +16,32 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings) .sources = { { "world.cc", ctor::source_type::generated }, }, + .flags = { + .cxxflags = { + "-std=c++20", + "-O3", + "-g", + "-Wall", + "-Werror", + "-fexceptions", + }, + }, }, { .target = "foo", .sources = { { "foo.cc", ctor::source_type::generated }, }, + .flags = { + .cxxflags = { + "-std=c++20", + "-O3", + "-g", + "-Wall", + "-Werror", + "-fexceptions", + }, + }, }, { .target = "this_is_unused", diff --git a/test/suite/ctor_files/ctor.cc.multi b/test/suite/ctor_files/ctor.cc.multi index 2b88afe..157d96c 100644 --- a/test/suite/ctor_files/ctor.cc.multi +++ b/test/suite/ctor_files/ctor.cc.multi @@ -25,6 +25,7 @@ ctor::build_configurations ctorConfigs(const ctor::settings& settings) "-g", "-Wall", "-Werror", + "-fexceptions", }, }, .externals = {"bar"}, diff --git a/test/suite/test.bat b/test/suite/test.bat new file mode 100644 index 0000000..20f0846 --- /dev/null +++ b/test/suite/test.bat @@ -0,0 +1,13 @@ +@echo off + +set CXX=cl.exe +set CC=cl.exe +set AR=lib.exe +set LD=link.exe +set CTORDIR=..\..\build + +%CXX% /nologo /MT /std:c++20 /D_X86_ /EHsc test.cc /link /out:test.exe +@if %errorlevel% neq 0 exit /b %errorlevel% + +test.exe +@if %errorlevel% neq 0 exit /b %errorlevel% diff --git a/test/suite/test.cc b/test/suite/test.cc index 0ab1299..faa72b3 100644 --- a/test/suite/test.cc +++ b/test/suite/test.cc @@ -33,8 +33,13 @@ int fail(int value = 1, return value; } +#if _MSC_VER && !__INTEL_COMPILER +const std::string ctor_exe{"ctor.exe"}; +const std::string obj_ext{".obj"}; +#else const std::string ctor_exe{"./ctor"}; const std::string obj_ext{".o"}; +#endif void copy_config(std::string cfg) { @@ -69,6 +74,9 @@ int main() // Wipe the board std::filesystem::remove_all(BUILDDIR); +#if _MSC_VER && !__INTEL_COMPILER + std::filesystem::create_directory(BUILDDIR); +#endif std::filesystem::remove("configuration.cc"); std::filesystem::remove("config.h"); std::filesystem::remove("ctor"); @@ -78,8 +86,14 @@ int main() // Compile bootstrap binary std::vector args = +#if _MSC_VER && !__INTEL_COMPILER + {"/nologo", "/MT", "/std:c++20", "/D_X86_", "/EHsc", "/I..\\..\\src", + "ctor.cc", "/link", "/LIBPATH:"+CTORDIR, "libctor.lib", + "/subsystem:console", "/out:" + ctor_exe}; +#else {"-pthread", "-std=c++20", "-L", CTORDIR, "-lctor", "-I", "../../src", "ctor.cc", "-o", ctor_exe}; +#endif // TODO: add support for quoted strings with spaces if(!CXXFLAGS.empty()) @@ -107,11 +121,14 @@ int main() ////////////////////////////////////////////////////////////////////////////// { +#if _MSC_VER && !__INTEL_COMPILER +#else // No build files should have been created yet if(std::filesystem::exists(BUILDDIR)) { return fail(); } +#endif // capture ctor binary before configure is called auto ctor_bin = readFile(ctor_exe); diff --git a/test/suite/test.sh b/test/suite/test.sh index 4638c0d..8272247 100755 --- a/test/suite/test.sh +++ b/test/suite/test.sh @@ -1,4 +1,6 @@ #!/bin/bash +#set -x + : ${CXX:=g++} $CXX $LDFLAGS $CXXFLAGS -std=c++20 -Wall test.cc -o test && ./test -- cgit v1.2.3