diff --git a/CMake/FindDeps.cmake b/CMake/FindDeps.cmake index ec91aff..3693c0b 100644 --- a/CMake/FindDeps.cmake +++ b/CMake/FindDeps.cmake @@ -2,8 +2,9 @@ include(FetchContent) set(BUILD_SHARED_LIBS OFF CACHE INTERNAL "Force static libs") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=int-conversion") -add_compile_definitions(-D_ITERATOR_DEBUG_LEVEL=0) +find_package(OpenSSL REQUIRED) +find_package(zstd REQUIRED) +find_package(ZLIB REQUIRED) FetchContent_Declare( httplib @@ -37,23 +38,6 @@ FetchContent_Declare( EXCLUDE_FROM_ALL ) -FetchContent_Declare( - ZLIB - GIT_REPOSITORY https://github.com/zlib-ng/zlib-ng.git - GIT_TAG 2.3.2 - SYSTEM - EXCLUDE_FROM_ALL -) - -FetchContent_Declare( - zstd - GIT_REPOSITORY https://github.com/facebook/zstd.git - GIT_TAG v1.5.7 - SOURCE_SUBDIR build/cmake - SYSTEM - EXCLUDE_FROM_ALL -) - FetchContent_Declare( mimalloc GIT_REPOSITORY https://github.com/microsoft/mimalloc.git @@ -100,14 +84,4 @@ set(HTTPLIB_REQUIRE_OPENSSL OFF CACHE BOOL "" FORCE) set(HTTPLIB_REQUIRE_ZLIB OFF CACHE BOOL "" FORCE) set(HTTPLIB_NO_EXCEPTIONS ON CACHE BOOL "" FORCE) -set(ZSTD_BUILD_SHARED OFF CACHE BOOL "" FORCE) -set(ZSTD_BUILD_STATIC ON CACHE BOOL "" FORCE) - -set(ZLIB_COMPAT ON CACHE BOOL "" FORCE) -set(BUILD_TESTING OFF CACHE BOOL "" FORCE) - -FetchContent_MakeAvailable(ZLIB zstd) - FetchContent_MakeAvailable(httplib pugixml nlohmann_json glaze simdjson tl-expected unordered_dense mimalloc) - -find_package(OpenSSL REQUIRED) diff --git a/CMake/Toolchains/linux-arm64.cmake b/CMake/Toolchains/linux-arm64.cmake index 37b267e..c945669 100644 --- a/CMake/Toolchains/linux-arm64.cmake +++ b/CMake/Toolchains/linux-arm64.cmake @@ -8,11 +8,8 @@ set(CMAKE_CXX_COMPILER_TARGET ${triple}) set(CMAKE_SYSROOT /usr/aarch64-linux-gnu/sys-root) set(CMAKE_LIBRARY_ARCHITECTURE aarch64-linux-gnu) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --gcc-toolchain=/usr") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --gcc-toolchain=/usr") - -set(CMAKE_C_FLAGS "-march=armv8-a+simd") -set(CMAKE_CXX_FLAGS "-march=armv8-a+simd") +string(APPEND CMAKE_C_FLAGS " --gcc-toolchain=/usr -march=armv8-a+simd") +string(APPEND CMAKE_CXX_FLAGS " --gcc-toolchain=/usr -march=armv8-a+simd") set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) diff --git a/CMake/Toolchains/linux-x64.cmake b/CMake/Toolchains/linux-x64.cmake new file mode 100644 index 0000000..d7399e8 --- /dev/null +++ b/CMake/Toolchains/linux-x64.cmake @@ -0,0 +1,5 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR AMD64) + +string(APPEND CMAKE_C_FLAGS " -mavx2 -mfma -mxsave -msse4.2") +string(APPEND CMAKE_CXX_FLAGS " -mavx2 -mfma -mxsave -msse4.2") diff --git a/CMake/Toolchains/wasm.cmake b/CMake/Toolchains/wasm.cmake index d0d81c8..78ff32a 100644 --- a/CMake/Toolchains/wasm.cmake +++ b/CMake/Toolchains/wasm.cmake @@ -1,4 +1,7 @@ set(CMAKE_SYSTEM_NAME Emscripten) set(CMAKE_SYSTEM_PROCESSOR wasm32) -include("$ENV{EMSDK}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake") \ No newline at end of file +include("$ENV{EMSDK}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake") + +string(APPEND CMAKE_C_FLAGS " -msimd128 -pthread") +string(APPEND CMAKE_CXX_FLAGS " -msimd128 -pthread") diff --git a/CMake/Toolchains/windows-arm64.cmake b/CMake/Toolchains/windows-arm64.cmake index c6960aa..fa57ef6 100644 --- a/CMake/Toolchains/windows-arm64.cmake +++ b/CMake/Toolchains/windows-arm64.cmake @@ -1,13 +1,17 @@ set(CMAKE_SYSTEM_NAME Windows) set(CMAKE_SYSTEM_PROCESSOR aarch64) +set(CMAKE_C_COMPILER clang-cl) +set(CMAKE_CXX_COMPILER clang-cl) + +set(CMAKE_LINKER lld-link) set(triple arm64-pc-windows-msvc) set(CMAKE_C_COMPILER_TARGET ${triple}) set(CMAKE_CXX_COMPILER_TARGET ${triple}) -set(CMAKE_LINKER lld-link) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=lld-link") - set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) \ No newline at end of file +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + +string(APPEND CMAKE_C_FLAGS " --target=arm64-pc-windows-msvc -fuse-ld=lld-link") +string(APPEND CMAKE_CXX_FLAGS " --target=arm64-pc-windows-msvc -fuse-ld=lld-link") diff --git a/CMake/Toolchains/windows-x64.cmake b/CMake/Toolchains/windows-x64.cmake new file mode 100644 index 0000000..bbd186b --- /dev/null +++ b/CMake/Toolchains/windows-x64.cmake @@ -0,0 +1,9 @@ +set(CMAKE_SYSTEM_NAME Windows) +set(CMAKE_SYSTEM_PROCESSOR AMD64) +set(CMAKE_C_COMPILER clang-cl) +set(CMAKE_CXX_COMPILER clang-cl) + +set(CMAKE_LINKER lld-link) + +string(APPEND CMAKE_C_FLAGS " /arch:AVX2 -fuse-ld=lld-link") +string(APPEND CMAKE_CXX_FLAGS " /arch:AVX2 -fuse-ld=lld-link") diff --git a/CMake/Triplets/arm64-linux-clang.cmake b/CMake/Triplets/arm64-linux-clang.cmake index cd203ca..abf83ad 100644 --- a/CMake/Triplets/arm64-linux-clang.cmake +++ b/CMake/Triplets/arm64-linux-clang.cmake @@ -3,7 +3,5 @@ set(VCPKG_CRT_LINKAGE dynamic) set(VCPKG_LIBRARY_LINKAGE static) set(VCPKG_CMAKE_SYSTEM_NAME Linux) -set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${CMAKE_CURRENT_LIST_DIR}/../toolchains/linux-arm64.cmake") - -set(VCPKG_C_FLAGS "-march=armv8-a+simd") -set(VCPKG_CXX_FLAGS "-march=armv8-a+simd") +set(VCPKG_C_FLAGS "--gcc-toolchain=/usr -march=armv8-a+simd") +set(VCPKG_CXX_FLAGS " --gcc-toolchain=/usr -march=armv8-a+simd") diff --git a/CMake/Triplets/arm64-windows-cross.cmake b/CMake/Triplets/arm64-windows-clang.cmake similarity index 100% rename from CMake/Triplets/arm64-windows-cross.cmake rename to CMake/Triplets/arm64-windows-clang.cmake diff --git a/CMake/Triplets/wasm32-emscripten-simd.cmake b/CMake/Triplets/wasm32-emscripten-clang.cmake similarity index 67% rename from CMake/Triplets/wasm32-emscripten-simd.cmake rename to CMake/Triplets/wasm32-emscripten-clang.cmake index ef2926b..7b90f8c 100644 --- a/CMake/Triplets/wasm32-emscripten-simd.cmake +++ b/CMake/Triplets/wasm32-emscripten-clang.cmake @@ -5,5 +5,3 @@ set(VCPKG_CMAKE_SYSTEM_NAME Emscripten) set(VCPKG_C_FLAGS "-msimd128 -pthread") set(VCPKG_CXX_FLAGS "-msimd128 -pthread") - -set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "$ENV{EMSDK}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake") \ No newline at end of file diff --git a/CMake/Triplets/x64-linux-avx2.cmake b/CMake/Triplets/x64-linux-clang.cmake similarity index 56% rename from CMake/Triplets/x64-linux-avx2.cmake rename to CMake/Triplets/x64-linux-clang.cmake index cf0539a..89245d1 100644 --- a/CMake/Triplets/x64-linux-avx2.cmake +++ b/CMake/Triplets/x64-linux-clang.cmake @@ -3,5 +3,5 @@ set(VCPKG_CRT_LINKAGE dynamic) set(VCPKG_LIBRARY_LINKAGE static) set(VCPKG_CMAKE_SYSTEM_NAME Linux) -set(VCPKG_C_FLAGS "-mavx2 -mfma") -set(VCPKG_CXX_FLAGS "-mavx2 -mfma") +set(VCPKG_C_FLAGS "-mavx2 -mfma -mxsave -msse4.2") +set(VCPKG_CXX_FLAGS "-mavx2 -mfma -mxsave -msse4.2") diff --git a/CMake/Triplets/x64-windows-clang.cmake b/CMake/Triplets/x64-windows-clang.cmake new file mode 100644 index 0000000..d1a4477 --- /dev/null +++ b/CMake/Triplets/x64-windows-clang.cmake @@ -0,0 +1,7 @@ +set(VCPKG_TARGET_ARCHITECTURE x64) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE static) +set(VCPKG_CMAKE_SYSTEM_NAME Windows) + +set(VCPKG_C_FLAGS "/arch:AVX2") +set(VCPKG_CXX_FLAGS "/arch:AVX2") diff --git a/CMakePresets.json b/CMakePresets.json index 8a6e8a4..d58eda0 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -13,22 +13,23 @@ "cacheVariables": { "CMAKE_C_COMPILER": "clang", "CMAKE_CXX_COMPILER": "clang++", - "CMAKE_EXPORT_COMPILE_COMMANDS": "ON", + "VCPKG_MANIFEST_MODE": "ON", "VCPKG_OVERLAY_TRIPLETS": "${sourceDir}/CMake/Triplets", - "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" + "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake", + "VCPKG_CHAINLOAD_TOOLCHAIN_FILE": "${sourceDir}/CMake/Toolchains/${presetName}.cmake" } }, { "name": "linux-x64", - "displayName": "Linux x64 (AVX2)", + "displayName": "Linux x64 (Clang)", "inherits": "base-common", "cacheVariables": { - "VCPKG_TARGET_TRIPLET": "x64-linux-avx2" + "VCPKG_TARGET_TRIPLET": "x64-linux-clang" } }, { "name": "linux-arm64", - "displayName": "Linux ARM64 (Clang/Sysroot)", + "displayName": "Linux ARM64 (Clang Cross)", "inherits": "base-common", "cacheVariables": { "VCPKG_TARGET_TRIPLET": "arm64-linux-clang" @@ -36,24 +37,26 @@ }, { "name": "windows-x64", - "displayName": "Windows x64 (AVX2)", - "inherits": "base-common" + "displayName": "Windows x64 (Clang)", + "inherits": "base-common", + "cacheVariables": { + "VCPKG_TARGET_TRIPLET": "x64-windows-clang" + } }, { "name": "windows-arm64", - "displayName": "Windows ARM64 (Cross-Compile)", + "displayName": "Windows ARM64 (Clang Cross)", "inherits": "base-common", "cacheVariables": { - "VCPKG_TARGET_TRIPLET": "arm64-windows-cross", - "VCPKG_CHAINLOAD_TOOLCHAIN_FILE": "${sourceDir}/CMake/Toolchains/windows-arm64.cmake" + "VCPKG_TARGET_TRIPLET": "arm64-windows-clang" } }, { "name": "wasm", - "displayName": "WebAssembly (SIMD/Pthreads)", + "displayName": "WebAssembly (Clang)", "inherits": "base-common", "cacheVariables": { - "VCPKG_TARGET_TRIPLET": "wasm32-emscripten-simd" + "VCPKG_TARGET_TRIPLET": "wasm32-emscripten-clang" } } ] diff --git a/Src/IACore/CMakeLists.txt b/Src/IACore/CMakeLists.txt index d4fe72b..d0d7f99 100644 --- a/Src/IACore/CMakeLists.txt +++ b/Src/IACore/CMakeLists.txt @@ -22,8 +22,8 @@ target_include_directories(IACore PUBLIC inc/) target_include_directories(IACore PRIVATE imp/hpp/) target_link_libraries(IACore PUBLIC - zlibstatic - libzstd_static + ZLIB::ZLIB + zstd::libzstd_static tl::expected glaze::glaze pugixml::pugixml diff --git a/Tests/Unit/DataOps.cpp b/Tests/Unit/DataOps.cpp index 53663a4..71129d0 100644 --- a/Tests/Unit/DataOps.cpp +++ b/Tests/Unit/DataOps.cpp @@ -37,7 +37,7 @@ BOOL TestCRC32() { UINT32 result = DataOps::CRC32({}); - IAT_CHECK_EQ(result, 0); + IAT_CHECK_EQ(result, 0U); } { diff --git a/vcpkg.json b/vcpkg.json new file mode 100644 index 0000000..15a4b62 --- /dev/null +++ b/vcpkg.json @@ -0,0 +1,9 @@ +{ + "name": "iacore", + "version": "0.1.0", + "dependencies": [ + "openssl", + "zlib-ng", + "zstd" + ] +} \ No newline at end of file