diff --git a/StgSharp.Native/CMakeLists.txt b/StgSharp.Native/CMakeLists.txt index 4bc879c1..9bbc2912 100644 --- a/StgSharp.Native/CMakeLists.txt +++ b/StgSharp.Native/CMakeLists.txt @@ -20,22 +20,20 @@ sn_resolve_target_identifiers( file(GLOB STGSHARP_NATIVE_SOURCES CONFIGURE_DEPENDS ${CMAKE_CURRENT_LIST_DIR}/sn-src/*.c) -list(REMOVE_ITEM STGSHARP_NATIVE_SOURCES - ${CMAKE_CURRENT_LIST_DIR}/sn-src/formatted.c - ${CMAKE_CURRENT_LIST_DIR}/sn-src/StgSharpC.c) +file(GLOB STGSHARP_NATIVE_HEADERS CONFIGURE_DEPENDS + ${CMAKE_CURRENT_LIST_DIR}/sn-head/*.h) + +file(GLOB STGSHARP_NATIVE_TEMPLATES CONFIGURE_DEPENDS + ${CMAKE_CURRENT_LIST_DIR}/sn-template/*.h + ${CMAKE_CURRENT_LIST_DIR}/sn-template/*.inl + ${CMAKE_CURRENT_LIST_DIR}/sn-template/*.inc + ${CMAKE_CURRENT_LIST_DIR}/sn-template/*.ipp) if(NOT STGSHARP_NATIVE_SOURCES) message(FATAL_ERROR "No source files found under sn-src/.") endif() -get_filename_component(STGSHARP_SOURCE_ROOT ${CMAKE_CURRENT_LIST_DIR} DIRECTORY) -get_filename_component(STGSHARP_SOURCE_ROOT_NAME ${STGSHARP_SOURCE_ROOT} NAME) - -if(STGSHARP_SOURCE_ROOT_NAME STREQUAL "src") - get_filename_component(STGSHARP_SOLUTION_ROOT ${STGSHARP_SOURCE_ROOT} DIRECTORY) -else() - set(STGSHARP_SOLUTION_ROOT ${STGSHARP_SOURCE_ROOT}) -endif() +get_filename_component(STGSHARP_SOLUTION_ROOT ${CMAKE_CURRENT_LIST_DIR} DIRECTORY) if(SN_RESOLVED_OS_NAME STREQUAL "windows") set(STGSHARP_OS_TAG win) @@ -57,12 +55,16 @@ else() set(STGSHARP_ARCH_TAG ${SN_RESOLVED_ARCH_NAME}) endif() -set(STGSHARP_BUILD_OUTPUT_DIR ${STGSHARP_SOLUTION_ROOT}/cmake_build/${STGSHARP_OS_TAG}_${STGSHARP_ARCH_TAG}) +set(STGSHARP_BUILD_OUTPUT_DIR ${STGSHARP_SOLUTION_ROOT}/build/${STGSHARP_OS_TAG}-${STGSHARP_ARCH_TAG}) set(STGSHARP_OBJECT_ROOT_DIR ${STGSHARP_SOLUTION_ROOT}/obj/${PROJECT_NAME}) +set(STGSHARP_NATIVE_PROJECT_FILES + ${STGSHARP_NATIVE_SOURCES} + ${STGSHARP_NATIVE_HEADERS} + ${STGSHARP_NATIVE_TEMPLATES}) -set(STGSHARP_C_FRONTEND_VARIANT "${CMAKE_C_COMPILER_FRONTEND_VARIANT}") +add_library(${PROJECT_NAME} SHARED ${STGSHARP_NATIVE_PROJECT_FILES}) -add_library(${PROJECT_NAME} SHARED ${STGSHARP_NATIVE_SOURCES}) +source_group(TREE ${CMAKE_CURRENT_LIST_DIR} FILES ${STGSHARP_NATIVE_PROJECT_FILES}) set_target_properties(${PROJECT_NAME} PROPERTIES C_STANDARD 11 @@ -84,25 +86,35 @@ endforeach() set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_PDB_OUTPUT_DIRECTORY ${STGSHARP_OBJECT_ROOT_DIR}/$/${STGSHARP_ARCH_TAG}) -if(MSVC OR STGSHARP_C_FRONTEND_VARIANT STREQUAL "MSVC") +if(MSVC OR (CMAKE_C_COMPILER_ID STREQUAL "Clang" AND CMAKE_C_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC")) target_compile_options(${PROJECT_NAME} PRIVATE /Fd${STGSHARP_OBJECT_ROOT_DIR}/$/${STGSHARP_ARCH_TAG}/) endif() if(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND SN_RESOLVED_ARCH_NAME STREQUAL "x86_64") - if(STGSHARP_C_FRONTEND_VARIANT STREQUAL "MSVC") + # Keep the intrinsic type system and builtin declarations visible to all TUs. + # The runtime dispatch contract still follows T_arch/T_feature at the function level. + if(CMAKE_C_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC") target_compile_options(${PROJECT_NAME} PRIVATE /clang:-mavx /clang:-mavx2 /clang:-mfma + /clang:-mf16c /clang:-mavx512f + /clang:-mavx512cd + /clang:-mavx512dq + /clang:-mavx512bw /clang:-mavx512vl) else() target_compile_options(${PROJECT_NAME} PRIVATE -mavx -mavx2 -mfma + -mf16c -mavx512f + -mavx512cd + -mavx512dq + -mavx512bw -mavx512vl) endif() endif() @@ -128,5 +140,4 @@ endif() message(STATUS "StgSharp.Native target OS: ${SN_RESOLVED_OS_NAME} (${SN_RESOLVED_OS_DEFINE})") message(STATUS "StgSharp.Native target ISA: ${SN_RESOLVED_ARCH_NAME} (${SN_RESOLVED_ARCH_DEFINE})") -message(STATUS "StgSharp.Native compiler front-end: ${STGSHARP_C_FRONTEND_VARIANT}") message(STATUS "StgSharp.Native output dir: ${STGSHARP_BUILD_OUTPUT_DIR}") diff --git a/StgSharp.Native/sn-head/StgSharpNative.h b/StgSharp.Native/sn-head/StgSharpNative.h index 8abf5265..0f141334 100644 --- a/StgSharp.Native/sn-head/StgSharpNative.h +++ b/StgSharp.Native/sn-head/StgSharpNative.h @@ -13,7 +13,7 @@ #include "gl.h" // #include "wgl.h" -#define GLFWAPI INTERNAL +// #define GLFWAPI INTERNAL #include "glfw\glfw3.h" #include #include diff --git a/StgSharp.Native/sn-head/sn_intrinsic.context.x86.h b/StgSharp.Native/sn-head/sn_intrinsic.context.x86.h index 68b8c7be..9c892e68 100644 --- a/StgSharp.Native/sn-head/sn_intrinsic.context.x86.h +++ b/StgSharp.Native/sn-head/sn_intrinsic.context.x86.h @@ -6,7 +6,8 @@ #include "sn_intrinsic.std.h" #ifndef SN_X86_TARGET_ATTR_sse -#define SN_X86_TARGET_ATTR_sse SN_CLANG_TARGET_ATTR("sse42") +#define SN_STD_TARGET_ATTR_IMPL(T_arch, T_feature) SN_X86_TARGET_ATTR_##T_arch##T_feature +#define SN_X86_TARGET_ATTR_sse SN_CLANG_TARGET_ATTR("sse4.2") #define SN_X86_TARGET_ATTR_avx SN_CLANG_TARGET_ATTR("avx") #define SN_X86_TARGET_ATTR_avx_fma SN_CLANG_TARGET_ATTR("avx,avx2,fma") #define SN_X86_TARGET_ATTR_512 SN_CLANG_TARGET_ATTR("avx512f,avx512vl") diff --git a/StgSharp.Native/sn-head/sn_intrinsic.matkernel.h b/StgSharp.Native/sn-head/sn_intrinsic.matkernel.h index dfd35a5a..6e71afc0 100644 --- a/StgSharp.Native/sn-head/sn_intrinsic.matkernel.h +++ b/StgSharp.Native/sn-head/sn_intrinsic.matkernel.h @@ -138,17 +138,6 @@ extern __declspec(align(64)) sn_zero_kernel_u64 SN_ZERO_KERNEL; int col_length, int row_length, \ int col_index, int row_index) -/* Declarations for AVX float variant -DECLARE_BUILD_PANEL(avx, float); -DECLARE_BUILD_PANEL(512, float); -DECLARE_STORE_PANEL(avx, float); -DECLARE_STORE_PANEL(512, float); -DECLARE_STORE_PANEL(512, float); - -DECLARE_BUILD_PANEL(512, double); - -DECLARE_STORE_PANEL(512, double); -/**/ #endif /* SN_MATKERNEL */ diff --git a/StgSharp.Native/sn-head/sn_intrinsic.std.h b/StgSharp.Native/sn-head/sn_intrinsic.std.h index 046c1ce0..3dbab2f7 100644 --- a/StgSharp.Native/sn-head/sn_intrinsic.std.h +++ b/StgSharp.Native/sn-head/sn_intrinsic.std.h @@ -1,8 +1,7 @@ -#ifndef SN_INTRINSIC_CallCONV_STD -#define SN_INTRINSIC_CallCONV_STD +#ifndef SN_INTRINSIC_CALLCONV_STD +#define SN_INTRINSIC_CALLCONV_STD #include "sn_internal.h" -#include "sn_target.h" #include "sn_intrinsic.h" #ifndef static_assert @@ -10,7 +9,6 @@ #endif #define SN_STD_TARGET_ATTR(T_arch, T_feature) SN_STD_TARGET_ATTR_IMPL(T_arch, T_feature) -#define SN_STD_TARGET_ATTR_IMPL(T_arch, T_feature) SN_X86_TARGET_ATTR_##T_arch##T_feature #define MK_PROC_NAME_STD(T_type, T_arch, T_feature, T_op) \ T_type##_multi_kernel_proc_##T_op##_##T_arch##_##T_feature diff --git a/StgSharp.Native/sn-src/mk.p_scan.x86.c b/StgSharp.Native/sn-src/mk.p_scan.x86.c index 1df0b589..81648f5f 100644 --- a/StgSharp.Native/sn-src/mk.p_scan.x86.c +++ b/StgSharp.Native/sn-src/mk.p_scan.x86.c @@ -5,9 +5,9 @@ #if SN_IS_ARCH(SN_ARCH_X86_64) #include "sn_internal.h" +#include "sn_intrinsic.context.x86.h" #include "sn_intrinsic.h" #include "sn_intrinsic.std.h" -#include "sn_intrinsic.context.x86.h" #include "sn_intrinsic.matkernel.h" #include #include