diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5cb3f5d5f7ae9fd68d505740d49a06530aaff157..b31978e9e050ec4ba38d79c352162175363f6a0d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -206,19 +206,7 @@ if ( ENABLE_STATIC ) set(CRC32C_LIBRARY Crc32c::crc32c) set(CRC32C_FROM_VCPKG ON) else() - include(crc32c) - # include libcrc32 - if(CRC32CLIB_DIR) - if(NOT WIN32) - include(GNUInstallDirs) - - include_directories(${CRC32CLIB_DIR}/include) - set(CRC32C_LIBRARY ${CRC32CLIB_DIR}/${CMAKE_INSTALL_LIBDIR}/libcrc32c.a) - else() - include_directories(${CRC32CLIB_DIR}/include) - set(CRC32C_LIBRARY ${CRC32CLIB_DIR}/lib/crc32c.lib) - endif() - endif() + include(crc32c) endif() # includes @@ -440,6 +428,9 @@ endif() # build shared library add_library (sdapi SHARED ${SOURCES} ${VersionFilesOutputVariable}) +if(NOT CRC32C_FROM_VCPKG) + add_dependencies(sdapi crc32c) +endif() if(NOT WIN32) target_link_libraries(sdapi PRIVATE ${CURL_LIBRARY} @@ -585,10 +576,9 @@ endif() # build static library add_library (sdapi_static STATIC ${SOURCES}) -if(NOT CRC32C_FROM_VCPKG) - add_dependencies( sdapi crc32c ) +if (NOT CRC32C_FROM_VCPKG) + add_dependencies(sdapi_static crc32c) endif() - if(NOT WIN32) set_target_properties(sdapi_static PROPERTIES POSITION_INDEPENDENT_CODE ON) diff --git a/src/modules/crc32c.cmake b/src/modules/crc32c.cmake index 93a3df44218942e6ff447d937a58280bb9be03d6..9bbfc2ffa2cb9d29b007c62ceefe3ac0486a5e74 100644 --- a/src/modules/crc32c.cmake +++ b/src/modules/crc32c.cmake @@ -17,21 +17,33 @@ if( NOT CRC32CLIB_DIR ) include(ExternalProject) - + include(GNUInstallDirs) + if(NOT WIN32) + SET(CRC32C_LIBRARY "${CMAKE_BINARY_DIR}/crc32c/${CMAKE_INSTALL_LIBDIR}/libcrc32c.a") + ExternalProject_add( crc32c PREFIX "${CMAKE_BINARY_DIR}/crc32c" URL "${CMAKE_SOURCE_DIR}/third-party/crc32c" PATCH_COMMAND patch --binary -N -p0 -i "${CMAKE_SOURCE_DIR}/third-party/crc32c_reloc_static.patch" CMAKE_ARGS -DCRC32C_BUILD_TESTS=OFF -DCRC32C_BUILD_BENCHMARKS=OFF -DCRC32C_USE_GLOG=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_INSTALL_PREFIX:PATH= -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + BUILD_BYPRODUCTS ${CRC32C_LIBRARY} ) else() - ExternalProject_add( crc32c - PREFIX "${CMAKE_BINARY_DIR}/crc32c" - URL "${CMAKE_SOURCE_DIR}/third-party/crc32c" - PATCH_COMMAND patch -N -p0 -i "${CMAKE_SOURCE_DIR}/third-party/crc32c_reloc_static.patch" - CMAKE_ARGS -DCRC32C_BUILD_TESTS=OFF -DCRC32C_BUILD_BENCHMARKS=OFF -DCRC32C_USE_GLOG=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_INSTALL_PREFIX:PATH= -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - ) + set(CRC32C_LIBRARY "${CMAKE_BINARY_DIR}/crc32c/${CMAKE_INSTALL_LIBDIR}/crc32c.lib") + + find_program(PATCH_EXE NAMES patch.exe PATHS "c:/Program Files/Git/usr/bin/" "c:/MinGW/git/usr/bin/") + if(PATCH_EXE) + ExternalProject_add( crc32c + PREFIX "${CMAKE_BINARY_DIR}/crc32c" + URL "${CMAKE_SOURCE_DIR}/third-party/crc32c" + PATCH_COMMAND ${PATCH_EXE} -N -p0 -i "${CMAKE_SOURCE_DIR}/third-party/crc32c_reloc_static.patch" + CMAKE_ARGS -DCRC32C_BUILD_TESTS=OFF -DCRC32C_BUILD_BENCHMARKS=OFF -DCRC32C_USE_GLOG=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_INSTALL_PREFIX:PATH= -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + BUILD_BYPRODUCTS ${CRC32C_LIBRARY} + ) + else() + message("Can't find 'patch.exe' program") + endif() endif() ExternalProject_Get_Property( crc32c SOURCE_DIR INSTALL_DIR ) @@ -39,6 +51,8 @@ if( NOT CRC32CLIB_DIR ) message( STATUS "Install directory of crc32c ${INSTALL_DIR}" ) set( CRC32CLIB_DIR ${INSTALL_DIR} ) + include_directories(${CRC32CLIB_DIR}/include) + else() add_custom_target( crc32c ) endif() diff --git a/src/test/seismic-store-lib/CMakeLists.txt b/src/test/seismic-store-lib/CMakeLists.txt index dd79a29467c795431aaa7bd59e5230f0d3c41e66..828cc7b97ccdf79dca334478b951e5f63acf1bc8 100644 --- a/src/test/seismic-store-lib/CMakeLists.txt +++ b/src/test/seismic-store-lib/CMakeLists.txt @@ -20,7 +20,9 @@ target_link_libraries(http_request ${CURL_LIBRARY} ${CMAKE_DL_LIBS}) # GCS ACCESSOR TEST add_executable(gcs_accessor gcs_accessor.cc ../shared/utils.cc) -add_dependencies(gcs_accessor crc32c) +if (NOT CRC32C_FROM_VCPKG) + add_dependencies(gcs_accessor crc32c) +endif() target_include_directories(gcs_accessor PRIVATE ${CRC32CLIB_DIR}/include) target_link_libraries(gcs_accessor ${CURL_LIBRARY} ${OPENSSL_LIBRARY} ${CRC32C_LIBRARY} ${CMAKE_DL_LIBS}) @@ -168,13 +170,17 @@ endif(GCS_PROVIDER_ENABLED) # GCS XML 2 JSON add_executable(gcs_xml_vs_json gcs_xml_vs_json.cc ../shared/utils.cc) -add_dependencies(gcs_xml_vs_json crc32c) +if (NOT CRC32C_FROM_VCPKG) + add_dependencies(gcs_xml_vs_json crc32c) +endif() target_include_directories(gcs_xml_vs_json PRIVATE ${CRC32CLIB_DIR}/include) target_link_libraries(gcs_xml_vs_json ${CURL_LIBRARY} ${OPENSSL_LIBRARY} ${CRC32C_LIBRARY} ${CMAKE_DL_LIBS}) # GCS BATCH MULTITHREAD add_executable(gcs_batch_multithread gcs_batch_multithread.cc ../shared/utils.cc) -add_dependencies(gcs_batch_multithread crc32c) +if (NOT CRC32C_FROM_VCPKG) + add_dependencies(gcs_batch_multithread crc32c) +endif() if(NOT WIN32) target_link_libraries(gcs_batch_multithread ${CURL_LIBRARY} ${OPENSSL_LIBRARY} ${CRC32C_LIBRARY} ${CMAKE_DL_LIBS} pthread) else()