diff --git a/c/.gitignore b/c/.gitignore index 0bf608c..3d4b704 100644 --- a/c/.gitignore +++ b/c/.gitignore @@ -1,3 +1,4 @@ blake3 example +build/ *.o diff --git a/c/CMakeLists.txt b/c/CMakeLists.txt index 6675709..7266345 100644 --- a/c/CMakeLists.txt +++ b/c/CMakeLists.txt @@ -5,6 +5,8 @@ enable_language(C ASM) include(GNUInstallDirs) +option(BLAKE3_STATIC ON) + set(blake3_SOURCES) list(APPEND blake3_SOURCES blake3.c @@ -15,17 +17,24 @@ if(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64) list(APPEND blake3_SOURCES blake3_avx2_x86-64_unix.S blake3_avx512_x86-64_unix.S + blake3_sse2_x86-64_unix.S blake3_sse41_x86-64_unix.S) + elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL i686) list(APPEND blake3_SOURCES blake3_avx2.c blake3_avx512.c + blake3_sse2.c blake3_sse41.c) set_source_files_properties(blake3_avx2.c PROPERTIES COMPILE_FLAGS -mavx2) set_source_files_properties(blake3_avx512.c PROPERTIES COMPILE_FLAGS "-mavx512f -mavx512vl") + set_source_files_properties(blake3_sse2.c PROPERTIES COMPILE_FLAGS -msse2) set_source_files_properties(blake3_sse41.c PROPERTIES COMPILE_FLAGS -msse4.1) + elseif((ANDROID_ABI STREQUAL armeabi-v7a) OR - (CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64) OR (CMAKE_SYSTEM_PROCESSOR STREQUAL arm64)) + (CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64) OR + (CMAKE_SYSTEM_PROCESSOR STREQUAL arm64) # For M1 macs + ) list(APPEND blake3_SOURCES blake3_neon.c) set_source_files_properties(blake3_dispatch.c PROPERTIES COMPILE_FLAGS -DBLAKE3_USE_NEON=1) set_source_files_properties(blake3_neon.c PROPERTIES COMPILE_FLAGS -mfpu=neon) @@ -35,22 +44,31 @@ configure_file(libblake3.pc.in libblake3.pc @ONLY) install(FILES ${CMAKE_BINARY_DIR}/libblake3.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) -add_library(blake3-shared SHARED ${blake3_SOURCES}) -set_target_properties(blake3-shared PROPERTIES VERSION ${PROJECT_VERSION}) -set_target_properties(blake3-shared PROPERTIES SOVERSION 0) -set_target_properties(blake3-shared PROPERTIES PUBLIC_HEADER blake3.h) -target_include_directories(blake3-shared PUBLIC .) -install(TARGETS blake3-shared +if(BLAKE3_STATIC) + add_library(blake3-static STATIC ${blake3_SOURCES}) + set_target_properties(blake3-static PROPERTIES OUTPUT_NAME blake3) + set_target_properties(blake3-static PROPERTIES VERSION ${PROJECT_VERSION}) + set_target_properties(blake3-static PROPERTIES SOVERSION 0) + set_target_properties(blake3-static PROPERTIES PUBLIC_HEADER blake3.h) + set_target_properties(blake3-static PROPERTIES COMPILE_FLAGS -fPIC) + target_include_directories(blake3-static PUBLIC .) + + install(TARGETS blake3-static LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) -add_library(blake3-static STATIC ${blake3_SOURCES}) -set_target_properties(blake3-static PROPERTIES OUTPUT_NAME blake3) -set_target_properties(blake3-static PROPERTIES VERSION ${PROJECT_VERSION}) -set_target_properties(blake3-static PROPERTIES SOVERSION 0) -set_target_properties(blake3-static PROPERTIES PUBLIC_HEADER blake3.h) -set_target_properties(blake3-static PROPERTIES COMPILE_FLAGS -fPIC) -target_include_directories(blake3-static PUBLIC .) -install(TARGETS blake3-static - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +else() + + add_library(blake3-shared SHARED ${blake3_SOURCES}) + set_target_properties(blake3-shared PROPERTIES VERSION ${PROJECT_VERSION}) + set_target_properties(blake3-shared PROPERTIES SOVERSION 0) + set_target_properties(blake3-shared PROPERTIES PUBLIC_HEADER blake3.h) + target_include_directories(blake3-shared PUBLIC .) + + install(TARGETS blake3-shared + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + +endif(BLAKE3_STATIC) + +unset(BLAKE3_STATIC) \ No newline at end of file