Skip to content

Commit

Permalink
Make System.Globalization.Native compile as C on recent MSVC
Browse files Browse the repository at this point in the history
We can now use __typeof__ in recent MSVC and some small tweaks to how
the function pointers are defined.

Also fix the PDB not getting copied next to the .dll and disable
validating the .so file which doesn't apply to Windows.
  • Loading branch information
akoeplinger committed Mar 6, 2024
1 parent 914797e commit ab25074
Show file tree
Hide file tree
Showing 4 changed files with 123 additions and 117 deletions.
4 changes: 4 additions & 0 deletions src/native/libs/Common/pal_compiler.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,10 @@ do_abort_unless (bool condition, const char* fmt, ...)
#ifdef __cplusplus
#define TYPEOF decltype
#else
#ifdef _MSC_VER
#define TYPEOF __typeof__
#else
#define TYPEOF __typeof
#endif // _MSVC_VER
#endif // __cplusplus
#endif // TYPEOF
18 changes: 10 additions & 8 deletions src/native/libs/System.Globalization.Native/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,6 @@ cmake_minimum_required(VERSION 3.10..3.20)

project(System.Globalization.Native C)

if (CLR_CMAKE_TARGET_WIN32)
enable_language(CXX)
endif()

if(CLR_CMAKE_TARGET_UNIX OR CLR_CMAKE_TARGET_WASI)
if (ANDROID_FORCE_ICU_DATA_DIR)
add_definitions(-DANDROID_FORCE_ICU_DATA_DIR)
Expand Down Expand Up @@ -135,8 +131,9 @@ if (NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI AND NOT CLR_CMAKE
set(NATIVEGLOBALIZATION_SOURCES ${NATIVEGLOBALIZATION_SOURCES} pal_timeZoneInfo.c)
endif()

if (MSVC)
set_source_files_properties(${NATIVEGLOBALIZATION_SOURCES} PROPERTIES LANGUAGE CXX)
if (MSVC AND MSVC_VERSION LESS 1939)
# on VS < 17.9 we need to force compile sources as C++ since msvc doesn't support __typeof__ there
set_source_files_properties(${NATIVEGLOBALIZATION_SOURCES} PROPERTIES COMPILE_FLAGS "/TP")
endif()

include_directories("../Common")
Expand Down Expand Up @@ -167,7 +164,12 @@ if (GEN_SHARED_LIB)
${FOUNDATION}
)

install_with_stripped_symbols (System.Globalization.Native PROGRAMS .)
if(CLR_CMAKE_TARGET_WIN32)
install (TARGETS System.Globalization.Native DESTINATION .)
install (FILES $<TARGET_PDB_FILE:System.Globalization.Native> DESTINATION .)
else()
install_with_stripped_symbols (System.Globalization.Native PROGRAMS .)
endif()
endif()

add_library(System.Globalization.Native-Static
Expand All @@ -182,7 +184,7 @@ endif()

install (TARGETS System.Globalization.Native-Static DESTINATION ${STATIC_LIB_DESTINATION} COMPONENT libs)

if(NOT CLR_CMAKE_TARGET_APPLE AND NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_LINUX_MUSL AND NOT CLR_CMAKE_TARGET_HAIKU)
if(NOT CLR_CMAKE_TARGET_WIN32 AND NOT CLR_CMAKE_TARGET_APPLE AND NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_LINUX_MUSL AND NOT CLR_CMAKE_TARGET_HAIKU)
if (GEN_SHARED_LIB)
add_custom_command(TARGET System.Globalization.Native POST_BUILD
COMMENT "Verifying System.Globalization.Native.so dependencies"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ static void FillIgnoreWidthRules(UChar* completeRules, int32_t* fillIndex, int32
if (isIgnoreCase && (!isIgnoreWidth))
{
assert((*fillIndex) + (FullWidthAlphabetRangeLength * 4) <= completeRulesLength);
const int UpperCaseToLowerCaseOffset = 0xFF41 - 0xFF21;
const UChar UpperCaseToLowerCaseOffset = 0xFF41 - 0xFF21;

for (UChar ch = 0xFF21; ch <= 0xFF3A; ch++)
{
Expand Down
216 changes: 108 additions & 108 deletions src/native/libs/System.Globalization.Native/pal_icushim_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -232,114 +232,114 @@ FOR_ALL_ICU_FUNCTIONS

// Redefine all calls to ICU functions as calls through pointers that are set
// to the functions of the selected version of ICU in the initialization.
#define u_charsToUChars(...) u_charsToUChars_ptr(__VA_ARGS__)
#define u_getVersion(...) u_getVersion_ptr(__VA_ARGS__)
#define u_strcmp(...) u_strcmp_ptr(__VA_ARGS__)
#define u_strcpy(...) u_strcpy_ptr(__VA_ARGS__)
#define u_strlen(...) u_strlen_ptr(__VA_ARGS__)
#define u_strncpy(...) u_strncpy_ptr(__VA_ARGS__)
#define u_tolower(...) u_tolower_ptr(__VA_ARGS__)
#define u_toupper(...) u_toupper_ptr(__VA_ARGS__)
#define u_uastrncpy(...) u_uastrncpy_ptr(__VA_ARGS__)
#define ubrk_close(...) ubrk_close_ptr(__VA_ARGS__)
#define ubrk_openRules(...) ubrk_openRules_ptr(__VA_ARGS__)
#define ucal_add(...) ucal_add_ptr(__VA_ARGS__)
#define ucal_close(...) ucal_close_ptr(__VA_ARGS__)
#define ucal_get(...) ucal_get_ptr(__VA_ARGS__)
#define ucal_getAttribute(...) ucal_getAttribute_ptr(__VA_ARGS__)
#define ucal_getKeywordValuesForLocale(...) ucal_getKeywordValuesForLocale_ptr(__VA_ARGS__)
#define ucal_getLimit(...) ucal_getLimit_ptr(__VA_ARGS__)
#define ucal_getNow(...) ucal_getNow_ptr(__VA_ARGS__)
#define ucal_getTimeZoneDisplayName(...) ucal_getTimeZoneDisplayName_ptr(__VA_ARGS__)
#define ucal_getTimeZoneIDForWindowsID(...) ucal_getTimeZoneIDForWindowsID_ptr(__VA_ARGS__)
#define ucal_getWindowsTimeZoneID(...) ucal_getWindowsTimeZoneID_ptr(__VA_ARGS__)
#define ucal_open(...) ucal_open_ptr(__VA_ARGS__)
#define ucal_openTimeZoneIDEnumeration(...) ucal_openTimeZoneIDEnumeration_ptr(__VA_ARGS__)
#define ucal_set(...) ucal_set_ptr(__VA_ARGS__)
#define ucal_setMillis(...) ucal_setMillis_ptr(__VA_ARGS__)
#define ucol_clone(...) ucol_clone_ptr(__VA_ARGS__)
#define ucol_close(...) ucol_close_ptr(__VA_ARGS__)
#define ucol_closeElements(...) ucol_closeElements_ptr(__VA_ARGS__)
#define ucol_getOffset(...) ucol_getOffset_ptr(__VA_ARGS__)
#define ucol_getRules(...) ucol_getRules_ptr(__VA_ARGS__)
#define ucol_getSortKey(...) ucol_getSortKey_ptr(__VA_ARGS__)
#define ucol_getStrength(...) ucol_getStrength_ptr(__VA_ARGS__)
#define ucol_getVersion(...) ucol_getVersion_ptr(__VA_ARGS__)
#define ucol_next(...) ucol_next_ptr(__VA_ARGS__)
#define ucol_previous(...) ucol_previous_ptr(__VA_ARGS__)
#define ucol_open(...) ucol_open_ptr(__VA_ARGS__)
#define ucol_openElements(...) ucol_openElements_ptr(__VA_ARGS__)
#define ucol_openRules(...) ucol_openRules_ptr(__VA_ARGS__)
#define ucol_setAttribute(...) ucol_setAttribute_ptr(__VA_ARGS__)
#define ucol_setMaxVariable(...) ucol_setMaxVariable_ptr(__VA_ARGS__)
#define ucol_strcoll(...) ucol_strcoll_ptr(__VA_ARGS__)
#define ucurr_forLocale(...) ucurr_forLocale_ptr(__VA_ARGS__)
#define ucurr_getName(...) ucurr_getName_ptr(__VA_ARGS__)
#define udat_close(...) udat_close_ptr(__VA_ARGS__)
#define udat_countSymbols(...) udat_countSymbols_ptr(__VA_ARGS__)
#define udat_format(...) udat_format_ptr(__VA_ARGS__)
#define udat_getSymbols(...) udat_getSymbols_ptr(__VA_ARGS__)
#define udat_open(...) udat_open_ptr(__VA_ARGS__)
#define udat_setCalendar(...) udat_setCalendar_ptr(__VA_ARGS__)
#define udat_toPattern(...) udat_toPattern_ptr(__VA_ARGS__)
#define udatpg_close(...) udatpg_close_ptr(__VA_ARGS__)
#define udatpg_getBestPattern(...) udatpg_getBestPattern_ptr(__VA_ARGS__)
#define udatpg_open(...) udatpg_open_ptr(__VA_ARGS__)
#define uenum_close(...) uenum_close_ptr(__VA_ARGS__)
#define uenum_count(...) uenum_count_ptr(__VA_ARGS__)
#define uenum_next(...) uenum_next_ptr(__VA_ARGS__)
#define uidna_close(...) uidna_close_ptr(__VA_ARGS__)
#define uidna_nameToASCII(...) uidna_nameToASCII_ptr(__VA_ARGS__)
#define uidna_nameToUnicode(...) uidna_nameToUnicode_ptr(__VA_ARGS__)
#define uidna_openUTS46(...) uidna_openUTS46_ptr(__VA_ARGS__)
#define uldn_close(...) uldn_close_ptr(__VA_ARGS__)
#define uldn_keyValueDisplayName(...) uldn_keyValueDisplayName_ptr(__VA_ARGS__)
#define uldn_open(...) uldn_open_ptr(__VA_ARGS__)
#define uloc_canonicalize(...) uloc_canonicalize_ptr(__VA_ARGS__)
#define uloc_countAvailable(...) uloc_countAvailable_ptr(__VA_ARGS__)
#define uloc_getAvailable(...) uloc_getAvailable_ptr(__VA_ARGS__)
#define uloc_getBaseName(...) uloc_getBaseName_ptr(__VA_ARGS__)
#define uloc_getCharacterOrientation(...) uloc_getCharacterOrientation_ptr(__VA_ARGS__)
#define uloc_getCountry(...) uloc_getCountry_ptr(__VA_ARGS__)
#define uloc_getDefault(...) uloc_getDefault_ptr(__VA_ARGS__)
#define uloc_getDisplayCountry(...) uloc_getDisplayCountry_ptr(__VA_ARGS__)
#define uloc_getDisplayLanguage(...) uloc_getDisplayLanguage_ptr(__VA_ARGS__)
#define uloc_getDisplayName(...) uloc_getDisplayName_ptr(__VA_ARGS__)
#define uloc_getISO3Country(...) uloc_getISO3Country_ptr(__VA_ARGS__)
#define uloc_getISO3Language(...) uloc_getISO3Language_ptr(__VA_ARGS__)
#define uloc_getKeywordValue(...) uloc_getKeywordValue_ptr(__VA_ARGS__)
#define uloc_getLanguage(...) uloc_getLanguage_ptr(__VA_ARGS__)
#define uloc_getLCID(...) uloc_getLCID_ptr(__VA_ARGS__)
#define uloc_getName(...) uloc_getName_ptr(__VA_ARGS__)
#define uloc_getParent(...) uloc_getParent_ptr(__VA_ARGS__)
#define uloc_setKeywordValue(...) uloc_setKeywordValue_ptr(__VA_ARGS__)
#define ulocdata_getCLDRVersion(...) ulocdata_getCLDRVersion_ptr(__VA_ARGS__)
#define ulocdata_getMeasurementSystem(...) ulocdata_getMeasurementSystem_ptr(__VA_ARGS__)
#define unorm2_getNFCInstance(...) unorm2_getNFCInstance_ptr(__VA_ARGS__)
#define unorm2_getNFDInstance(...) unorm2_getNFDInstance_ptr(__VA_ARGS__)
#define unorm2_getNFKCInstance(...) unorm2_getNFKCInstance_ptr(__VA_ARGS__)
#define unorm2_getNFKDInstance(...) unorm2_getNFKDInstance_ptr(__VA_ARGS__)
#define unorm2_isNormalized(...) unorm2_isNormalized_ptr(__VA_ARGS__)
#define unorm2_normalize(...) unorm2_normalize_ptr(__VA_ARGS__)
#define unum_close(...) unum_close_ptr(__VA_ARGS__)
#define unum_getAttribute(...) unum_getAttribute_ptr(__VA_ARGS__)
#define unum_getSymbol(...) unum_getSymbol_ptr(__VA_ARGS__)
#define unum_open(...) unum_open_ptr(__VA_ARGS__)
#define unum_toPattern(...) unum_toPattern_ptr(__VA_ARGS__)
#define ures_close(...) ures_close_ptr(__VA_ARGS__)
#define ures_getByKey(...) ures_getByKey_ptr(__VA_ARGS__)
#define ures_getSize(...) ures_getSize_ptr(__VA_ARGS__)
#define ures_getStringByIndex(...) ures_getStringByIndex_ptr(__VA_ARGS__)
#define ures_open(...) ures_open_ptr(__VA_ARGS__)
#define usearch_close(...) usearch_close_ptr(__VA_ARGS__)
#define usearch_first(...) usearch_first_ptr(__VA_ARGS__)
#define usearch_getBreakIterator(...) usearch_getBreakIterator_ptr(__VA_ARGS__)
#define usearch_getMatchedLength(...) usearch_getMatchedLength_ptr(__VA_ARGS__)
#define usearch_last(...) usearch_last_ptr(__VA_ARGS__)
#define usearch_openFromCollator(...) usearch_openFromCollator_ptr(__VA_ARGS__)
#define usearch_reset(...) usearch_reset_ptr(__VA_ARGS__)
#define usearch_setPattern(...) usearch_setPattern_ptr(__VA_ARGS__)
#define usearch_setText(...) usearch_setText_ptr(__VA_ARGS__)
#define u_charsToUChars(...) (*u_charsToUChars_ptr)(__VA_ARGS__)
#define u_getVersion(...) (*u_getVersion_ptr)(__VA_ARGS__)
#define u_strcmp(...) (*u_strcmp_ptr)(__VA_ARGS__)
#define u_strcpy(...) (*u_strcpy_ptr)(__VA_ARGS__)
#define u_strlen(...) (*u_strlen_ptr)(__VA_ARGS__)
#define u_strncpy(...) (*u_strncpy_ptr)(__VA_ARGS__)
#define u_tolower(...) (*u_tolower_ptr)(__VA_ARGS__)
#define u_toupper(...) (*u_toupper_ptr)(__VA_ARGS__)
#define u_uastrncpy(...) (*u_uastrncpy_ptr)(__VA_ARGS__)
#define ubrk_close(...) (*ubrk_close_ptr)(__VA_ARGS__)
#define ubrk_openRules(...) (*ubrk_openRules_ptr)(__VA_ARGS__)
#define ucal_add(...) (*ucal_add_ptr)(__VA_ARGS__)
#define ucal_close(...) (*ucal_close_ptr)(__VA_ARGS__)
#define ucal_get(...) (*ucal_get_ptr)(__VA_ARGS__)
#define ucal_getAttribute(...) (*ucal_getAttribute_ptr)(__VA_ARGS__)
#define ucal_getKeywordValuesForLocale(...) (*ucal_getKeywordValuesForLocale_ptr)(__VA_ARGS__)
#define ucal_getLimit(...) (*ucal_getLimit_ptr)(__VA_ARGS__)
#define ucal_getNow(...) (*ucal_getNow_ptr)(__VA_ARGS__)
#define ucal_getTimeZoneDisplayName(...) (*ucal_getTimeZoneDisplayName_ptr)(__VA_ARGS__)
#define ucal_getTimeZoneIDForWindowsID(...) (*ucal_getTimeZoneIDForWindowsID_ptr)(__VA_ARGS__)
#define ucal_getWindowsTimeZoneID(...) (*ucal_getWindowsTimeZoneID_ptr)(__VA_ARGS__)
#define ucal_open(...) (*ucal_open_ptr)(__VA_ARGS__)
#define ucal_openTimeZoneIDEnumeration(...) (*ucal_openTimeZoneIDEnumeration_ptr)(__VA_ARGS__)
#define ucal_set(...) (*ucal_set_ptr)(__VA_ARGS__)
#define ucal_setMillis(...) (*ucal_setMillis_ptr)(__VA_ARGS__)
#define ucol_clone(...) (*ucol_clone_ptr)(__VA_ARGS__)
#define ucol_close(...) (*ucol_close_ptr)(__VA_ARGS__)
#define ucol_closeElements(...) (*ucol_closeElements_ptr)(__VA_ARGS__)
#define ucol_getOffset(...) (*ucol_getOffset_ptr)(__VA_ARGS__)
#define ucol_getRules(...) (*ucol_getRules_ptr)(__VA_ARGS__)
#define ucol_getSortKey(...) (*ucol_getSortKey_ptr)(__VA_ARGS__)
#define ucol_getStrength(...) (*ucol_getStrength_ptr)(__VA_ARGS__)
#define ucol_getVersion(...) (*ucol_getVersion_ptr)(__VA_ARGS__)
#define ucol_next(...) (*ucol_next_ptr)(__VA_ARGS__)
#define ucol_previous(...) (*ucol_previous_ptr)(__VA_ARGS__)
#define ucol_open(...) (*ucol_open_ptr)(__VA_ARGS__)
#define ucol_openElements(...) (*ucol_openElements_ptr)(__VA_ARGS__)
#define ucol_openRules(...) (*ucol_openRules_ptr)(__VA_ARGS__)
#define ucol_setAttribute(...) (*ucol_setAttribute_ptr)(__VA_ARGS__)
#define ucol_setMaxVariable(...) (*ucol_setMaxVariable_ptr)(__VA_ARGS__)
#define ucol_strcoll(...) (*ucol_strcoll_ptr)(__VA_ARGS__)
#define ucurr_forLocale(...) (*ucurr_forLocale_ptr)(__VA_ARGS__)
#define ucurr_getName(...) (*ucurr_getName_ptr)(__VA_ARGS__)
#define udat_close(...) (*udat_close_ptr)(__VA_ARGS__)
#define udat_countSymbols(...) (*udat_countSymbols_ptr)(__VA_ARGS__)
#define udat_format(...) (*udat_format_ptr)(__VA_ARGS__)
#define udat_getSymbols(...) (*udat_getSymbols_ptr)(__VA_ARGS__)
#define udat_open(...) (*udat_open_ptr)(__VA_ARGS__)
#define udat_setCalendar(...) (*udat_setCalendar_ptr)(__VA_ARGS__)
#define udat_toPattern(...) (*udat_toPattern_ptr)(__VA_ARGS__)
#define udatpg_close(...) (*udatpg_close_ptr)(__VA_ARGS__)
#define udatpg_getBestPattern(...) (*udatpg_getBestPattern_ptr)(__VA_ARGS__)
#define udatpg_open(...) (*udatpg_open_ptr)(__VA_ARGS__)
#define uenum_close(...) (*uenum_close_ptr)(__VA_ARGS__)
#define uenum_count(...) (*uenum_count_ptr)(__VA_ARGS__)
#define uenum_next(...) (*uenum_next_ptr)(__VA_ARGS__)
#define uidna_close(...) (*uidna_close_ptr)(__VA_ARGS__)
#define uidna_nameToASCII(...) (*uidna_nameToASCII_ptr)(__VA_ARGS__)
#define uidna_nameToUnicode(...) (*uidna_nameToUnicode_ptr)(__VA_ARGS__)
#define uidna_openUTS46(...) (*uidna_openUTS46_ptr)(__VA_ARGS__)
#define uldn_close(...) (*uldn_close_ptr)(__VA_ARGS__)
#define uldn_keyValueDisplayName(...) (*uldn_keyValueDisplayName_ptr)(__VA_ARGS__)
#define uldn_open(...) (*uldn_open_ptr)(__VA_ARGS__)
#define uloc_canonicalize(...) (*uloc_canonicalize_ptr)(__VA_ARGS__)
#define uloc_countAvailable(...) (*uloc_countAvailable_ptr)(__VA_ARGS__)
#define uloc_getAvailable(...) (*uloc_getAvailable_ptr)(__VA_ARGS__)
#define uloc_getBaseName(...) (*uloc_getBaseName_ptr)(__VA_ARGS__)
#define uloc_getCharacterOrientation(...) (*uloc_getCharacterOrientation_ptr)(__VA_ARGS__)
#define uloc_getCountry(...) (*uloc_getCountry_ptr)(__VA_ARGS__)
#define uloc_getDefault(...) (*uloc_getDefault_ptr)(__VA_ARGS__)
#define uloc_getDisplayCountry(...) (*uloc_getDisplayCountry_ptr)(__VA_ARGS__)
#define uloc_getDisplayLanguage(...) (*uloc_getDisplayLanguage_ptr)(__VA_ARGS__)
#define uloc_getDisplayName(...) (*uloc_getDisplayName_ptr)(__VA_ARGS__)
#define uloc_getISO3Country(...) (*uloc_getISO3Country_ptr)(__VA_ARGS__)
#define uloc_getISO3Language(...) (*uloc_getISO3Language_ptr)(__VA_ARGS__)
#define uloc_getKeywordValue(...) (*uloc_getKeywordValue_ptr)(__VA_ARGS__)
#define uloc_getLanguage(...) (*uloc_getLanguage_ptr)(__VA_ARGS__)
#define uloc_getLCID(...) (*uloc_getLCID_ptr)(__VA_ARGS__)
#define uloc_getName(...) (*uloc_getName_ptr)(__VA_ARGS__)
#define uloc_getParent(...) (*uloc_getParent_ptr)(__VA_ARGS__)
#define uloc_setKeywordValue(...) (*uloc_setKeywordValue_ptr)(__VA_ARGS__)
#define ulocdata_getCLDRVersion(...) (*ulocdata_getCLDRVersion_ptr)(__VA_ARGS__)
#define ulocdata_getMeasurementSystem(...) (*ulocdata_getMeasurementSystem_ptr)(__VA_ARGS__)
#define unorm2_getNFCInstance(...) (*unorm2_getNFCInstance_ptr)(__VA_ARGS__)
#define unorm2_getNFDInstance(...) (*unorm2_getNFDInstance_ptr)(__VA_ARGS__)
#define unorm2_getNFKCInstance(...) (*unorm2_getNFKCInstance_ptr)(__VA_ARGS__)
#define unorm2_getNFKDInstance(...) (*unorm2_getNFKDInstance_ptr)(__VA_ARGS__)
#define unorm2_isNormalized(...) (*unorm2_isNormalized_ptr)(__VA_ARGS__)
#define unorm2_normalize(...) (*unorm2_normalize_ptr)(__VA_ARGS__)
#define unum_close(...) (*unum_close_ptr)(__VA_ARGS__)
#define unum_getAttribute(...) (*unum_getAttribute_ptr)(__VA_ARGS__)
#define unum_getSymbol(...) (*unum_getSymbol_ptr)(__VA_ARGS__)
#define unum_open(...) (*unum_open_ptr)(__VA_ARGS__)
#define unum_toPattern(...) (*unum_toPattern_ptr)(__VA_ARGS__)
#define ures_close(...) (*ures_close_ptr)(__VA_ARGS__)
#define ures_getByKey(...) (*ures_getByKey_ptr)(__VA_ARGS__)
#define ures_getSize(...) (*ures_getSize_ptr)(__VA_ARGS__)
#define ures_getStringByIndex(...) (*ures_getStringByIndex_ptr)(__VA_ARGS__)
#define ures_open(...) (*ures_open_ptr)(__VA_ARGS__)
#define usearch_close(...) (*usearch_close_ptr)(__VA_ARGS__)
#define usearch_first(...) (*usearch_first_ptr)(__VA_ARGS__)
#define usearch_getBreakIterator(...) (*usearch_getBreakIterator_ptr)(__VA_ARGS__)
#define usearch_getMatchedLength(...) (*usearch_getMatchedLength_ptr)(__VA_ARGS__)
#define usearch_last(...) (*usearch_last_ptr)(__VA_ARGS__)
#define usearch_openFromCollator(...) (*usearch_openFromCollator_ptr)(__VA_ARGS__)
#define usearch_reset(...) (*usearch_reset_ptr)(__VA_ARGS__)
#define usearch_setPattern(...) (*usearch_setPattern_ptr)(__VA_ARGS__)
#define usearch_setText(...) (*usearch_setText_ptr)(__VA_ARGS__)

#else // !defined(STATIC_ICU)

Expand Down

0 comments on commit ab25074

Please sign in to comment.