diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 0abb342f..320b88b8 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -54,7 +54,7 @@ jobs:
- run: msbuild tools\windows\sp\sp.sln /p:Configuration=Release /p:Platform=x64 /m
- shell: bash
run: |
- for t in tools/windows/sp/build/vs/Release/bin/*.exe; do
+ for t in tools/windows/sp/build/vs/Release/bin/*.exe tools/windows/sp/build/vs/Release/bin/spn/*.exe; do
echo "=== $t ==="
"$t" || exit 1
done
diff --git a/sp/sp_test.h b/sp/sp_test.h
index aad15ac2..3e9348f3 100644
--- a/sp/sp_test.h
+++ b/sp/sp_test.h
@@ -152,20 +152,27 @@ typedef struct {
#if defined(__ELF__) || defined(SP_WASM) || (defined(SP_TCC) && defined(SP_LINUX))
#define SP_TEST_AUTOREG 1
- #define __sp_test_section __attribute__((used, section("sp_test")))
+ #if SP_HAS_ATTRIBUTE(retain)
+ #define __sp_test_section __attribute__((used, retain, section("sp_test")))
+ #else
+ #define __sp_test_section __attribute__((used, section("sp_test")))
+ #endif
#define __sp_test_ptr_const const
+ #define __sp_test_keep(ID)
#elif defined(SP_MACOS)
#define SP_TEST_AUTOREG 1
#define __sp_test_section __attribute__((used, section("__DATA,sp_test"), no_sanitize("address")))
#define __sp_test_ptr_const const
+ #define __sp_test_keep(ID)
#elif defined(SP_WIN32) && defined(SP_GNUC)
#define SP_TEST_AUTOREG 1
// The pointer must be const: lld's MinGW driver only merges and $-sorts
// same-named section chunks with identical flags, and the anchors are const
- #define __sp_test_section __attribute__((used, section("sp_test$m")))
+ #define __sp_test_section __declspec(dllexport) __attribute__((used, section("sp_test$m")))
#define __sp_test_ptr_const const
+ #define __sp_test_keep(ID)
#elif defined(SP_WIN32) && defined(SP_MSVC)
#define SP_TEST_AUTOREG 1
@@ -176,6 +183,7 @@ typedef struct {
#pragma section("sp_test$z", read)
#define __sp_test_section __declspec(allocate("sp_test$m"))
#define __sp_test_ptr_const
+ #define __sp_test_keep(ID) __pragma(comment(linker, "/include:" sp_mstr(ID)))
#else
#define SP_TEST_AUTOREG 0
#endif
@@ -189,9 +197,10 @@ typedef struct {
__VA_ARGS__ \
} \
}; \
- static __sp_test_section const sp_test_entry_t* __sp_test_ptr_const ID = &sp_mcat(ID, _v)
+ __sp_test_keep(ID) \
+ SP_EXTERN_C __sp_test_section const sp_test_entry_t* __sp_test_ptr_const ID = &sp_mcat(ID, _v)
- #define sp_test_reg(SUITE, ...) __sp_test_reg(sp_mcat(sp_test_reg_, __COUNTER__), SUITE, __VA_ARGS__)
+ #define sp_test_reg(SUITE, NAME, ...) __sp_test_reg(sp_mcat(sp_mcat(sp_test_reg_, SUITE), sp_mcat(_, NAME)), SUITE, __VA_ARGS__)
#define __sp_test_reg_suite(ID, SUITE, ...) \
static const sp_test_entry_t sp_mcat(ID, _v) = { \
@@ -201,13 +210,14 @@ typedef struct {
__VA_ARGS__ \
} \
}; \
- static __sp_test_section const sp_test_entry_t* __sp_test_ptr_const ID = &sp_mcat(ID, _v)
+ __sp_test_keep(ID) \
+ SP_EXTERN_C __sp_test_section const sp_test_entry_t* __sp_test_ptr_const ID = &sp_mcat(ID, _v)
- #define sp_test_suite(SUITE, ...) __sp_test_reg_suite(sp_mcat(sp_test_suite_reg_, __COUNTER__), SUITE, __VA_ARGS__)
+ #define sp_test_suite(SUITE, ...) __sp_test_reg_suite(sp_mcat(sp_test_suite_reg_, SUITE), SUITE, __VA_ARGS__)
#define sp_test(SUITE, NAME, ...) \
static sp_err_t __sp_test_fn(SUITE, NAME)(sp_test_t* t); \
- sp_test_reg(SUITE, \
+ sp_test_reg(SUITE, NAME, \
.name = #NAME, \
.kind = SP_TEST_DECL_FN, \
.fn = __sp_test_fn(SUITE, NAME), \
@@ -234,7 +244,7 @@ typedef struct {
#define sp_test_each(SUITE, NAME, TYPE, ARR, ...) \
__sp_test_each_def(SUITE, NAME, TYPE, ARR) \
__sp_test_each_name_check(ARR); \
- sp_test_reg(SUITE, \
+ sp_test_reg(SUITE, NAME, \
.name = #NAME, \
.kind = SP_TEST_DECL_EACH, \
.each = { \
@@ -251,7 +261,7 @@ typedef struct {
#define sp_test_each_anon(SUITE, NAME, TYPE, ARR, ...) \
__sp_test_each_def(SUITE, NAME, TYPE, ARR) \
- sp_test_reg(SUITE, \
+ sp_test_reg(SUITE, NAME, \
.name = #NAME, \
.kind = SP_TEST_DECL_EACH, \
.each = { \
@@ -268,7 +278,7 @@ typedef struct {
sp_static_assert(sizeof(TYPE) == sizeof((ARR)[0]), sp_test_each_row_type_mismatch); \
__sp_test_each_name_check(ARR); \
__sp_test_each_thunk_def(SUITE, NAME, TYPE, FN) \
- sp_test_reg(SUITE, \
+ sp_test_reg(SUITE, NAME, \
.name = #NAME, \
.kind = SP_TEST_DECL_EACH, \
.each = { \
@@ -285,7 +295,7 @@ typedef struct {
#define sp_test_sweep(SUITE, NAME, TYPE, ...) \
static sp_err_t __sp_test_fn(SUITE, NAME)(sp_test_t* t, TYPE* it); \
__sp_test_each_thunk_def(SUITE, NAME, TYPE, __sp_test_fn(SUITE, NAME)) \
- sp_test_reg(SUITE, \
+ sp_test_reg(SUITE, NAME, \
.name = #NAME, \
.kind = SP_TEST_DECL_SWEEP, \
.sweep = { \
@@ -299,7 +309,7 @@ typedef struct {
#define __sp_test_unsupported() \
sp_static_assert(false, no_sp_test_autoreg_for_this_object_format__pass_entries_to_sp_test_main)
- #define sp_test_reg(SUITE, ...) __sp_test_unsupported()
+ #define sp_test_reg(SUITE, NAME, ...) __sp_test_unsupported()
#define sp_test_suite(SUITE, ...) __sp_test_unsupported()
#define sp_test(SUITE, NAME, ...) __sp_test_unsupported(); static sp_err_t __sp_test_fn(SUITE, NAME)(sp_test_t* t)
#define sp_test_each(SUITE, NAME, TYPE, ARR, ...) __sp_test_unsupported(); static sp_err_t __sp_test_fn(SUITE, NAME)(sp_test_t* t, TYPE* it)
diff --git a/test/msvc/sdk.c b/test/msvc/sdk.c
index 12bbf65e..8ca6f6fb 100644
--- a/test/msvc/sdk.c
+++ b/test/msvc/sdk.c
@@ -54,7 +54,7 @@ sp_test_each(msvc, sdk_new, test_t, tests) {
c8 buf [SP_MSVC_PATH_MAX] = sp_zero;
sp_expect_str_eq_c(t, sp_msvc_sdk_path_buf(buf, sizeof(buf), &sdk, SP_MSVC_SDK_PATH_LIB_UM).value, it->expect.lib_um);
- c8 small [8] = sp_zero;
- sp_expect_eq(t, sp_msvc_sdk_path_buf(small, sizeof(small), &sdk, SP_MSVC_SDK_PATH_LIB_UM).err, SP_ERR_IO_NO_SPACE);
+ c8 tiny [8] = sp_zero;
+ sp_expect_eq(t, sp_msvc_sdk_path_buf(tiny, sizeof(tiny), &sdk, SP_MSVC_SDK_PATH_LIB_UM).err, SP_ERR_IO_NO_SPACE);
return SP_OK;
}
diff --git a/tools/windows/sp/tls.vcxproj b/tools/windows/sp/qsort.vcxproj
similarity index 75%
rename from tools/windows/sp/tls.vcxproj
rename to tools/windows/sp/qsort.vcxproj
index 82391359..d7bf5119 100644
--- a/tools/windows/sp/tls.vcxproj
+++ b/tools/windows/sp/qsort.vcxproj
@@ -13,24 +13,18 @@
17.0
Win32Proj
- {E1D4B7A9-6A0C-4F2B-8D3E-9B5C1A7F4D21}
- tls
- tls
+ {21A5F3D1-2C70-4A11-9F8B-1A2B3C4D5E68}
+ qsort
+ qsort
10.0
- tls
- ..\..\..\test\tls.c
- ..\..\..\sp.h;..\..\..\sp\sp_tls.h;..\..\..\test\tools\utest.h
+ qsort
+ ..\..\..\test\qsort.c
+ ..\..\..\sp.h;..\..\..\test\tools\utest.h
- SP_TLS_WITH_MBEDTLS
- $(MSBuildThisFileDirectory)..\..\vendor\mbedtls\include;$(MSBuildThisFileDirectory)..\..\vendor\mbedtls\library
- ws2_32.lib;crypt32.lib;advapi32.lib;bcrypt.lib
+
+
+
-
-
- Level1
- false
-
-
Debug
diff --git a/tools/windows/sp/sp.props b/tools/windows/sp/sp.props
index a800eac8..47eaccc7 100644
--- a/tools/windows/sp/sp.props
+++ b/tools/windows/sp/sp.props
@@ -46,7 +46,7 @@
Console
true
- shell32.lib;ws2_32.lib;$(SpAdditionalDependencies);%(AdditionalDependencies)
+ shell32.lib;ws2_32.lib;crypt32.lib;advapi32.lib;bcrypt.lib;$(SpAdditionalDependencies);%(AdditionalDependencies)
true
diff --git a/tools/windows/sp/sp.sln b/tools/windows/sp/sp.sln
index 2a66bdea..3e71bb24 100644
--- a/tools/windows/sp/sp.sln
+++ b/tools/windows/sp/sp.sln
@@ -78,6 +78,32 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "prompt_fancy", "examples\pr
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cli", "examples\cli.vcxproj", "{10000014-0014-4014-8014-000000000014}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qsort", "qsort.vcxproj", "{21A5F3D1-2C70-4A11-9F8B-1A2B3C4D5E68}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "term", "term.vcxproj", "{21A5F3D1-2C70-4A11-9F8B-1A2B3C4D5E69}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "spn", "spn", "{FFFFFFFF-EEEE-DDDD-CCCC-AAAAAAAAAAAA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "amalgamation", "spn\amalgamation.vcxproj", "{20000001-0001-4001-8001-000000000001}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "meta", "spn\meta.vcxproj", "{20000002-0002-4002-8002-000000000002}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sys", "spn\sys.vcxproj", "{20000003-0003-4003-8003-000000000003}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "atomic", "spn\atomic.vcxproj", "{20000004-0004-4004-8004-000000000004}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fs", "spn\fs.vcxproj", "{20000005-0005-4005-8005-000000000005}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "msvct", "spn\msvct.vcxproj", "{20000006-0006-4006-8006-000000000006}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sync", "spn\sync.vcxproj", "{20000007-0007-4007-8007-000000000007}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mem", "spn\mem.vcxproj", "{20000008-0008-4008-8008-000000000008}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "http", "spn\http.vcxproj", "{20000009-0009-4009-8009-000000000009}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tls", "spn\tls.vcxproj", "{20000010-0010-4010-8010-000000000010}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
@@ -232,6 +258,54 @@ Global
{CB96468E-6F42-4AD6-BD41-CBD668979062}.Debug|x64.Build.0 = Debug|x64
{CB96468E-6F42-4AD6-BD41-CBD668979062}.Release|x64.ActiveCfg = Release|x64
{CB96468E-6F42-4AD6-BD41-CBD668979062}.Release|x64.Build.0 = Release|x64
+ {21A5F3D1-2C70-4A11-9F8B-1A2B3C4D5E68}.Debug|x64.ActiveCfg = Debug|x64
+ {21A5F3D1-2C70-4A11-9F8B-1A2B3C4D5E68}.Debug|x64.Build.0 = Debug|x64
+ {21A5F3D1-2C70-4A11-9F8B-1A2B3C4D5E68}.Release|x64.ActiveCfg = Release|x64
+ {21A5F3D1-2C70-4A11-9F8B-1A2B3C4D5E68}.Release|x64.Build.0 = Release|x64
+ {21A5F3D1-2C70-4A11-9F8B-1A2B3C4D5E69}.Debug|x64.ActiveCfg = Debug|x64
+ {21A5F3D1-2C70-4A11-9F8B-1A2B3C4D5E69}.Debug|x64.Build.0 = Debug|x64
+ {21A5F3D1-2C70-4A11-9F8B-1A2B3C4D5E69}.Release|x64.ActiveCfg = Release|x64
+ {21A5F3D1-2C70-4A11-9F8B-1A2B3C4D5E69}.Release|x64.Build.0 = Release|x64
+ {20000001-0001-4001-8001-000000000001}.Debug|x64.ActiveCfg = Debug|x64
+ {20000001-0001-4001-8001-000000000001}.Debug|x64.Build.0 = Debug|x64
+ {20000001-0001-4001-8001-000000000001}.Release|x64.ActiveCfg = Release|x64
+ {20000001-0001-4001-8001-000000000001}.Release|x64.Build.0 = Release|x64
+ {20000002-0002-4002-8002-000000000002}.Debug|x64.ActiveCfg = Debug|x64
+ {20000002-0002-4002-8002-000000000002}.Debug|x64.Build.0 = Debug|x64
+ {20000002-0002-4002-8002-000000000002}.Release|x64.ActiveCfg = Release|x64
+ {20000002-0002-4002-8002-000000000002}.Release|x64.Build.0 = Release|x64
+ {20000003-0003-4003-8003-000000000003}.Debug|x64.ActiveCfg = Debug|x64
+ {20000003-0003-4003-8003-000000000003}.Debug|x64.Build.0 = Debug|x64
+ {20000003-0003-4003-8003-000000000003}.Release|x64.ActiveCfg = Release|x64
+ {20000003-0003-4003-8003-000000000003}.Release|x64.Build.0 = Release|x64
+ {20000004-0004-4004-8004-000000000004}.Debug|x64.ActiveCfg = Debug|x64
+ {20000004-0004-4004-8004-000000000004}.Debug|x64.Build.0 = Debug|x64
+ {20000004-0004-4004-8004-000000000004}.Release|x64.ActiveCfg = Release|x64
+ {20000004-0004-4004-8004-000000000004}.Release|x64.Build.0 = Release|x64
+ {20000005-0005-4005-8005-000000000005}.Debug|x64.ActiveCfg = Debug|x64
+ {20000005-0005-4005-8005-000000000005}.Debug|x64.Build.0 = Debug|x64
+ {20000005-0005-4005-8005-000000000005}.Release|x64.ActiveCfg = Release|x64
+ {20000005-0005-4005-8005-000000000005}.Release|x64.Build.0 = Release|x64
+ {20000006-0006-4006-8006-000000000006}.Debug|x64.ActiveCfg = Debug|x64
+ {20000006-0006-4006-8006-000000000006}.Debug|x64.Build.0 = Debug|x64
+ {20000006-0006-4006-8006-000000000006}.Release|x64.ActiveCfg = Release|x64
+ {20000006-0006-4006-8006-000000000006}.Release|x64.Build.0 = Release|x64
+ {20000007-0007-4007-8007-000000000007}.Debug|x64.ActiveCfg = Debug|x64
+ {20000007-0007-4007-8007-000000000007}.Debug|x64.Build.0 = Debug|x64
+ {20000007-0007-4007-8007-000000000007}.Release|x64.ActiveCfg = Release|x64
+ {20000007-0007-4007-8007-000000000007}.Release|x64.Build.0 = Release|x64
+ {20000008-0008-4008-8008-000000000008}.Debug|x64.ActiveCfg = Debug|x64
+ {20000008-0008-4008-8008-000000000008}.Debug|x64.Build.0 = Debug|x64
+ {20000008-0008-4008-8008-000000000008}.Release|x64.ActiveCfg = Release|x64
+ {20000008-0008-4008-8008-000000000008}.Release|x64.Build.0 = Release|x64
+ {20000009-0009-4009-8009-000000000009}.Debug|x64.ActiveCfg = Debug|x64
+ {20000009-0009-4009-8009-000000000009}.Debug|x64.Build.0 = Debug|x64
+ {20000009-0009-4009-8009-000000000009}.Release|x64.ActiveCfg = Release|x64
+ {20000009-0009-4009-8009-000000000009}.Release|x64.Build.0 = Release|x64
+ {20000010-0010-4010-8010-000000000010}.Debug|x64.ActiveCfg = Debug|x64
+ {20000010-0010-4010-8010-000000000010}.Debug|x64.Build.0 = Debug|x64
+ {20000010-0010-4010-8010-000000000010}.Release|x64.ActiveCfg = Release|x64
+ {20000010-0010-4010-8010-000000000010}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -251,5 +325,15 @@ Global
{10000012-0012-4012-8012-000000000012} = {FFFFFFFF-EEEE-DDDD-CCCC-BBBBBBBBBBBB}
{10000013-0013-4013-8013-000000000013} = {FFFFFFFF-EEEE-DDDD-CCCC-BBBBBBBBBBBB}
{10000014-0014-4014-8014-000000000014} = {FFFFFFFF-EEEE-DDDD-CCCC-BBBBBBBBBBBB}
+ {20000001-0001-4001-8001-000000000001} = {FFFFFFFF-EEEE-DDDD-CCCC-AAAAAAAAAAAA}
+ {20000002-0002-4002-8002-000000000002} = {FFFFFFFF-EEEE-DDDD-CCCC-AAAAAAAAAAAA}
+ {20000003-0003-4003-8003-000000000003} = {FFFFFFFF-EEEE-DDDD-CCCC-AAAAAAAAAAAA}
+ {20000004-0004-4004-8004-000000000004} = {FFFFFFFF-EEEE-DDDD-CCCC-AAAAAAAAAAAA}
+ {20000005-0005-4005-8005-000000000005} = {FFFFFFFF-EEEE-DDDD-CCCC-AAAAAAAAAAAA}
+ {20000006-0006-4006-8006-000000000006} = {FFFFFFFF-EEEE-DDDD-CCCC-AAAAAAAAAAAA}
+ {20000007-0007-4007-8007-000000000007} = {FFFFFFFF-EEEE-DDDD-CCCC-AAAAAAAAAAAA}
+ {20000008-0008-4008-8008-000000000008} = {FFFFFFFF-EEEE-DDDD-CCCC-AAAAAAAAAAAA}
+ {20000009-0009-4009-8009-000000000009} = {FFFFFFFF-EEEE-DDDD-CCCC-AAAAAAAAAAAA}
+ {20000010-0010-4010-8010-000000000010} = {FFFFFFFF-EEEE-DDDD-CCCC-AAAAAAAAAAAA}
EndGlobalSection
EndGlobal
diff --git a/tools/windows/sp/sp.targets b/tools/windows/sp/sp.targets
index 3dbdfd23..3f9e3d90 100644
--- a/tools/windows/sp/sp.targets
+++ b/tools/windows/sp/sp.targets
@@ -11,6 +11,13 @@
+
+
+
+ $(IntDir)$([System.String]::Copy('%(RelativeDir)').Replace('..\', '').Replace('\', '_'))%(Filename).obj
+
+
+
diff --git a/tools/windows/sp/spn/amalgamation.vcxproj b/tools/windows/sp/spn/amalgamation.vcxproj
new file mode 100644
index 00000000..9d801ae5
--- /dev/null
+++ b/tools/windows/sp/spn/amalgamation.vcxproj
@@ -0,0 +1,65 @@
+
+
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {20000001-0001-4001-8001-000000000001}
+ amalgamation
+ amalgamation
+ 10.0
+ amalgamation
+ ..\..\..\..\test\main.c;..\..\..\..\test\test\axis.c;..\..\..\..\test\test\filter.c;..\..\..\..\test\test\matrix.c;..\..\..\..\test\test\resolve.c;..\..\..\..\test\test\sweep.c;..\..\..\..\test\test\tracking.c;..\..\..\..\test\sys\sys.c;..\..\..\..\test\sys\open.c;..\..\..\..\test\sys\path.c;..\..\..\..\test\sys\iter.c;..\..\..\..\test\sys\futex.c;..\..\..\..\test\sys\fd.c;..\..\..\..\test\sys\nanosleep.c;..\..\..\..\test\sys\timestamps.c;..\..\..\..\test\sys\perms.c;..\..\..\..\test\sys\self_path.c;..\..\..\..\test\sys\pipe\data.c;..\..\..\..\test\sys\pipe\blocking.c;..\..\..\..\test\sys\transfer.c;..\..\..\..\test\sys\readlink.c;..\..\..\..\test\sys\socket\data.c;..\..\..\..\test\sys\socket\listen.c;..\..\..\..\test\sys\socket\desc.c;..\..\..\..\test\sys\tty\contract.c;..\..\..\..\test\sys\tty\mode.c;..\..\..\..\test\sys\vtable.c;..\..\..\..\test\sys\wait\event.c;..\..\..\..\test\sys\wait\wait.c;..\..\..\..\test\sys\inherit.c;..\..\..\..\test\fs\iter\os.c;..\..\..\..\test\fs\iter\iter.c;..\..\..\..\test\fs\wtf8\*.c;..\..\..\..\test\fs\*.c;..\..\..\..\test\fs\windows\nt_path.c;..\..\..\..\test\msvc\*.c;..\..\..\..\test\mem\uninitialized.c;..\..\..\..\test\atomic.c;..\..\..\..\test\sync\*.c;..\..\..\..\test\sync\os\*.c
+ ..\..\..\..\sp.h;..\..\..\..\sp\sp_test.h
+ false
+
+
+
+
+
+
+
+ Debug
+ x64
+
+
+ Application
+ true
+ v143
+ MultiByte
+
+
+ Application
+ false
+ v143
+ true
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(SolutionDir)build\vs\$(Configuration)\bin\spn\
+ $(SolutionDir)build\vs\$(Configuration)\obj\spn\$(MSBuildProjectName)\
+
+
+
+
+
diff --git a/tools/windows/sp/spn/atomic.vcxproj b/tools/windows/sp/spn/atomic.vcxproj
new file mode 100644
index 00000000..f6392c4e
--- /dev/null
+++ b/tools/windows/sp/spn/atomic.vcxproj
@@ -0,0 +1,65 @@
+
+
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {20000004-0004-4004-8004-000000000004}
+ atomic
+ atomic
+ 10.0
+ atomic
+ ..\..\..\..\test\main.c;..\..\..\..\test\atomic.c
+ ..\..\..\..\sp.h;..\..\..\..\sp\sp_test.h
+ false
+
+
+
+
+
+
+
+ Debug
+ x64
+
+
+ Application
+ true
+ v143
+ MultiByte
+
+
+ Application
+ false
+ v143
+ true
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(SolutionDir)build\vs\$(Configuration)\bin\spn\
+ $(SolutionDir)build\vs\$(Configuration)\obj\spn\$(MSBuildProjectName)\
+
+
+
+
+
diff --git a/tools/windows/sp/spn/fs.vcxproj b/tools/windows/sp/spn/fs.vcxproj
new file mode 100644
index 00000000..1b68e9c1
--- /dev/null
+++ b/tools/windows/sp/spn/fs.vcxproj
@@ -0,0 +1,65 @@
+
+
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {20000005-0005-4005-8005-000000000005}
+ fs
+ fs
+ 10.0
+ fs
+ ..\..\..\..\test\main.c;..\..\..\..\test\fs\iter\iter.c;..\..\..\..\test\fs\iter\os.c;..\..\..\..\test\fs\wtf8\*.c;..\..\..\..\test\fs\*.c;..\..\..\..\test\fs\windows\nt_path.c
+ ..\..\..\..\sp.h;..\..\..\..\sp\sp_test.h
+ false
+
+
+
+
+
+
+
+ Debug
+ x64
+
+
+ Application
+ true
+ v143
+ MultiByte
+
+
+ Application
+ false
+ v143
+ true
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(SolutionDir)build\vs\$(Configuration)\bin\spn\
+ $(SolutionDir)build\vs\$(Configuration)\obj\spn\$(MSBuildProjectName)\
+
+
+
+
+
diff --git a/tools/windows/sp/spn/http.vcxproj b/tools/windows/sp/spn/http.vcxproj
new file mode 100644
index 00000000..9a0e7ef6
--- /dev/null
+++ b/tools/windows/sp/spn/http.vcxproj
@@ -0,0 +1,65 @@
+
+
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {20000009-0009-4009-8009-000000000009}
+ http
+ http
+ 10.0
+ http
+ ..\..\..\..\test\main.c;..\..\..\..\test\http\*.c
+ ..\..\..\..\sp.h;..\..\..\..\sp\sp_test.h;..\..\..\..\sp\sp_http.h
+ false
+
+
+
+
+
+
+
+ Debug
+ x64
+
+
+ Application
+ true
+ v143
+ MultiByte
+
+
+ Application
+ false
+ v143
+ true
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(SolutionDir)build\vs\$(Configuration)\bin\spn\
+ $(SolutionDir)build\vs\$(Configuration)\obj\spn\$(MSBuildProjectName)\
+
+
+
+
+
diff --git a/tools/windows/sp/spn/mem.vcxproj b/tools/windows/sp/spn/mem.vcxproj
new file mode 100644
index 00000000..0cb88db5
--- /dev/null
+++ b/tools/windows/sp/spn/mem.vcxproj
@@ -0,0 +1,65 @@
+
+
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {20000008-0008-4008-8008-000000000008}
+ mem
+ mem
+ 10.0
+ mem
+ ..\..\..\..\test\main.c;..\..\..\..\test\mem\uninitialized.c
+ ..\..\..\..\sp.h;..\..\..\..\sp\sp_test.h
+ false
+
+
+
+
+
+
+
+ Debug
+ x64
+
+
+ Application
+ true
+ v143
+ MultiByte
+
+
+ Application
+ false
+ v143
+ true
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(SolutionDir)build\vs\$(Configuration)\bin\spn\
+ $(SolutionDir)build\vs\$(Configuration)\obj\spn\$(MSBuildProjectName)\
+
+
+
+
+
diff --git a/tools/windows/sp/spn/meta.vcxproj b/tools/windows/sp/spn/meta.vcxproj
new file mode 100644
index 00000000..f1f40bfd
--- /dev/null
+++ b/tools/windows/sp/spn/meta.vcxproj
@@ -0,0 +1,65 @@
+
+
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {20000002-0002-4002-8002-000000000002}
+ meta
+ meta
+ 10.0
+ meta
+ ..\..\..\..\test\test\*.c
+ ..\..\..\..\sp.h;..\..\..\..\sp\sp_test.h
+ false
+
+
+
+
+
+
+
+ Debug
+ x64
+
+
+ Application
+ true
+ v143
+ MultiByte
+
+
+ Application
+ false
+ v143
+ true
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(SolutionDir)build\vs\$(Configuration)\bin\spn\
+ $(SolutionDir)build\vs\$(Configuration)\obj\spn\$(MSBuildProjectName)\
+
+
+
+
+
diff --git a/tools/windows/sp/spn/msvct.vcxproj b/tools/windows/sp/spn/msvct.vcxproj
new file mode 100644
index 00000000..edb19327
--- /dev/null
+++ b/tools/windows/sp/spn/msvct.vcxproj
@@ -0,0 +1,65 @@
+
+
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {20000006-0006-4006-8006-000000000006}
+ msvct
+ msvct
+ 10.0
+ msvct
+ ..\..\..\..\test\main.c;..\..\..\..\test\msvc\*.c
+ ..\..\..\..\sp.h;..\..\..\..\sp\sp_test.h;..\..\..\..\sp\sp_msvc.h
+ false
+
+
+
+
+
+
+
+ Debug
+ x64
+
+
+ Application
+ true
+ v143
+ MultiByte
+
+
+ Application
+ false
+ v143
+ true
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(SolutionDir)build\vs\$(Configuration)\bin\spn\
+ $(SolutionDir)build\vs\$(Configuration)\obj\spn\$(MSBuildProjectName)\
+
+
+
+
+
diff --git a/tools/windows/sp/spn/sync.vcxproj b/tools/windows/sp/spn/sync.vcxproj
new file mode 100644
index 00000000..ca70c228
--- /dev/null
+++ b/tools/windows/sp/spn/sync.vcxproj
@@ -0,0 +1,65 @@
+
+
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {20000007-0007-4007-8007-000000000007}
+ sync
+ sync
+ 10.0
+ sync
+ ..\..\..\..\test\main.c;..\..\..\..\test\sync\*.c;..\..\..\..\test\sync\os\*.c
+ ..\..\..\..\sp.h;..\..\..\..\sp\sp_test.h
+ false
+
+
+
+
+
+
+
+ Debug
+ x64
+
+
+ Application
+ true
+ v143
+ MultiByte
+
+
+ Application
+ false
+ v143
+ true
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(SolutionDir)build\vs\$(Configuration)\bin\spn\
+ $(SolutionDir)build\vs\$(Configuration)\obj\spn\$(MSBuildProjectName)\
+
+
+
+
+
diff --git a/tools/windows/sp/spn/sys.vcxproj b/tools/windows/sp/spn/sys.vcxproj
new file mode 100644
index 00000000..0485588b
--- /dev/null
+++ b/tools/windows/sp/spn/sys.vcxproj
@@ -0,0 +1,65 @@
+
+
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {20000003-0003-4003-8003-000000000003}
+ sys
+ sys
+ 10.0
+ sys
+ ..\..\..\..\test\main.c;..\..\..\..\test\sys\sys.c;..\..\..\..\test\sys\open.c;..\..\..\..\test\sys\path.c;..\..\..\..\test\sys\iter.c;..\..\..\..\test\sys\futex.c;..\..\..\..\test\sys\fd.c;..\..\..\..\test\sys\nanosleep.c;..\..\..\..\test\sys\timestamps.c;..\..\..\..\test\sys\perms.c;..\..\..\..\test\sys\self_path.c;..\..\..\..\test\sys\pipe\data.c;..\..\..\..\test\sys\pipe\blocking.c;..\..\..\..\test\sys\transfer.c;..\..\..\..\test\sys\readlink.c;..\..\..\..\test\sys\socket\data.c;..\..\..\..\test\sys\socket\listen.c;..\..\..\..\test\sys\socket\desc.c;..\..\..\..\test\sys\tty\contract.c;..\..\..\..\test\sys\tty\mode.c;..\..\..\..\test\sys\vtable.c;..\..\..\..\test\sys\wait\event.c;..\..\..\..\test\sys\wait\wait.c;..\..\..\..\test\sys\inherit.c
+ ..\..\..\..\sp.h;..\..\..\..\sp\sp_test.h
+ false
+
+
+
+
+
+
+
+ Debug
+ x64
+
+
+ Application
+ true
+ v143
+ MultiByte
+
+
+ Application
+ false
+ v143
+ true
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(SolutionDir)build\vs\$(Configuration)\bin\spn\
+ $(SolutionDir)build\vs\$(Configuration)\obj\spn\$(MSBuildProjectName)\
+
+
+
+
+
diff --git a/tools/windows/sp/msvc.vcxproj b/tools/windows/sp/spn/tls.vcxproj
similarity index 50%
rename from tools/windows/sp/msvc.vcxproj
rename to tools/windows/sp/spn/tls.vcxproj
index 8bd6e734..f5093473 100644
--- a/tools/windows/sp/msvc.vcxproj
+++ b/tools/windows/sp/spn/tls.vcxproj
@@ -13,9 +13,18 @@
17.0
Win32Proj
- {F2A1B3C4-D5E6-7890-ABCD-EF1234567890}
- msvc
+ {20000010-0010-4010-8010-000000000010}
+ tls
+ tls
10.0
+ tls
+ ..\..\..\..\test\main.c;..\..\..\..\test\http\tls\*.c
+ ..\..\..\..\sp.h;..\..\..\..\sp\sp_test.h;..\..\..\..\sp\sp_http.h
+ false
+
+ SP_TLS_WITH_MBEDTLS;SP_TLS_MBEDTLS_SINGLE_THREAD
+
+
@@ -45,60 +54,34 @@
+
- $(SolutionDir)build\vs\$(Configuration)\bin\
- $(SolutionDir)build\vs\$(Configuration)\obj\msvc\
- msvc
+ $(SolutionDir)build\vs\$(Configuration)\bin\spn\
+ $(SolutionDir)build\vs\$(Configuration)\obj\spn\$(MSBuildProjectName)\
-
-
- Level4
- true
- _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
- .;..\..\..;..\..\..\sp;%(AdditionalIncludeDirectories)
- CompileAsC
- stdc17
- Disabled
- ProgramDatabase
- /we4715 %(AdditionalOptions)
-
-
- Console
- true
- advapi32.lib;%(AdditionalDependencies)
-
-
-
+
+ $(SpRoot)\tools\vendor\mbedtls
+ $(MSBuildThisFileDirectory)..\build\vs
+ $(SpBuildDir)\mbedtls-3.6.6
+ $(SpMbedtlsVendorDir)
+ $(SpMbedtlsFetchDir)
+
+
- Level4
- true
- true
- true
- _CRT_SECURE_NO_WARNINGS;NDEBUG;%(PreprocessorDefinitions)
- .;..\..\..;..\..\..\sp;%(AdditionalIncludeDirectories)
- CompileAsC
- stdc17
- MaxSpeed
- /we4715 %(AdditionalOptions)
+ $(SpMbedtlsDir)\include;$(SpMbedtlsDir)\library;%(AdditionalIncludeDirectories)
-
- Console
- true
- true
- true
- advapi32.lib;%(AdditionalDependencies)
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+ Level1
+ false
+
+
+
+
diff --git a/tools/windows/sp/term.vcxproj b/tools/windows/sp/term.vcxproj
new file mode 100644
index 00000000..6478a1c9
--- /dev/null
+++ b/tools/windows/sp/term.vcxproj
@@ -0,0 +1,60 @@
+
+
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {21A5F3D1-2C70-4A11-9F8B-1A2B3C4D5E69}
+ term
+ term
+ 10.0
+ term
+ ..\..\..\test\term.c
+ ..\..\..\sp.h;..\..\..\test\tools\utest.h
+
+
+ $(SpRoot)\test
+
+
+
+
+ Debug
+ x64
+
+
+ Application
+ true
+ v143
+ MultiByte
+
+
+ Application
+ false
+ v143
+ true
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+