From c2f07265cb5b8bbc926d35c8206395505bb747a5 Mon Sep 17 00:00:00 2001 From: Arthur LE MOIGNE Date: Wed, 29 Nov 2023 14:21:56 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=B7=20Build=20also=20for=20Windows?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also add build as release target in CI --- .github/workflows/ci.yml | 11 ++++++++--- quickfix-ffi/build.rs | 10 +++++++++- quickfix-ffi/libquickfix | 2 +- quickfix-ffi/quickfix-bind/CMakeLists.txt | 9 ++++++++- quickfix-ffi/quickfix-bind/include/quickfix_bind.h | 2 +- quickfix-ffi/quickfix-bind/src/quickfix_bind.cpp | 2 +- quickfix-ffi/src/lib.rs | 6 +----- quickfix/src/message.rs | 2 +- 8 files changed, 30 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 70abf76..4ec94f4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,15 +10,20 @@ env: CARGO_TERM_COLOR: always jobs: - test: - runs-on: ubuntu-latest + build_and_test: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-lastest, windows-latest] steps: - uses: actions/checkout@v4 with: submodules: true - uses: Swatinem/rust-cache@v2 - - name: Build + - name: Build debug run: cargo build --verbose + - name: Build release + run: cargo build --verbose --release - name: Run tests no default features run: cargo test --no-default-features - name: Run tests diff --git a/quickfix-ffi/build.rs b/quickfix-ffi/build.rs index 7eda453..acb62fe 100644 --- a/quickfix-ffi/build.rs +++ b/quickfix-ffi/build.rs @@ -73,7 +73,15 @@ fn main() { "cargo:rustc-link-search=native={}/lib", quickfix_bind_dst.display() ); - println!("cargo:rustc-link-lib=static=quickfix"); + + if matches!(env::var("PROFILE").as_deref(), Ok("debug")) + && matches!(env::var("CARGO_CFG_TARGET_OS").as_deref(), Ok("windows")) + { + println!("cargo:rustc-link-lib=static=quickfixd"); + } else { + println!("cargo:rustc-link-lib=static=quickfix"); + } + println!("cargo:rustc-link-lib=static=quickfixbind"); println!("cargo:rustc-link-lib=stdc++"); diff --git a/quickfix-ffi/libquickfix b/quickfix-ffi/libquickfix index cb377b6..8dc57c6 160000 --- a/quickfix-ffi/libquickfix +++ b/quickfix-ffi/libquickfix @@ -1 +1 @@ -Subproject commit cb377b6de4344a693b81b6f93d022ccad3813289 +Subproject commit 8dc57c67003613406b79d55a663a0f6e1d06ba00 diff --git a/quickfix-ffi/quickfix-bind/CMakeLists.txt b/quickfix-ffi/quickfix-bind/CMakeLists.txt index f04cfe2..778bee9 100644 --- a/quickfix-ffi/quickfix-bind/CMakeLists.txt +++ b/quickfix-ffi/quickfix-bind/CMakeLists.txt @@ -4,7 +4,14 @@ include_directories(include) add_library(quickfixbind STATIC src/quickfix_bind.cpp ) -target_link_libraries(quickfixbind ${MYSQL_CLIENT_LIBS} ${PostgreSQL_LIBRARIES} quickfix) +target_link_libraries(quickfixbind ${MYSQL_CLIENT_LIBS} ${PostgreSQL_LIBRARIES}) + +if (WIN32) + target_link_libraries(quickfixbind debug quickfixd) + target_link_libraries(quickfixbind optimized quickfix) +else() + target_link_libraries(quickfixbind quickfix) +endif() # Add option if asked if (WITH_PRINT_EX_STDOUT) diff --git a/quickfix-ffi/quickfix-bind/include/quickfix_bind.h b/quickfix-ffi/quickfix-bind/include/quickfix_bind.h index aeef680..6b2fe95 100644 --- a/quickfix-ffi/quickfix-bind/include/quickfix_bind.h +++ b/quickfix-ffi/quickfix-bind/include/quickfix_bind.h @@ -133,7 +133,7 @@ FixMessage_t *FixMessage_fromStringAndDictionary(const char *text, const FixData const char *FixMessage_getField(const FixMessage_t *obj, int32_t tag); int8_t FixMessage_setField(FixMessage_t *obj, int32_t tag, const char *value); int8_t FixMessage_removeField(FixMessage_t *obj, int32_t tag); -int8_t FixMessage_toBuffer(const FixMessage_t *obj, char *buffer, size_t length); +int8_t FixMessage_toBuffer(const FixMessage_t *obj, char *buffer, uint64_t length); void FixMessage_delete(const FixMessage_t *obj); FixHeader_t *FixMessage_copyHeader(const FixMessage_t *obj); diff --git a/quickfix-ffi/quickfix-bind/src/quickfix_bind.cpp b/quickfix-ffi/quickfix-bind/src/quickfix_bind.cpp index 3727a12..3418a7f 100644 --- a/quickfix-ffi/quickfix-bind/src/quickfix_bind.cpp +++ b/quickfix-ffi/quickfix-bind/src/quickfix_bind.cpp @@ -595,7 +595,7 @@ int8_t FixMessage_removeField(Message *obj, int32_t tag) { }); } -int8_t FixMessage_toBuffer(const Message *obj, char *buffer, size_t length) { +int8_t FixMessage_toBuffer(const Message *obj, char *buffer, uint64_t length) { if (length == 0) return 0; diff --git a/quickfix-ffi/src/lib.rs b/quickfix-ffi/src/lib.rs index 7ecfb13..8d067d7 100644 --- a/quickfix-ffi/src/lib.rs +++ b/quickfix-ffi/src/lib.rs @@ -317,11 +317,7 @@ extern "C" { pub fn FixMessage_removeField(obj: FixMessage_t, tag: i32) -> i8; #[must_use] - pub fn FixMessage_toBuffer( - obj: FixMessage_t, - buffer: *mut ffi::c_char, - length: ffi::c_long, - ) -> i8; + pub fn FixMessage_toBuffer(obj: FixMessage_t, buffer: *mut ffi::c_char, length: u64) -> i8; pub fn FixMessage_delete(obj: FixMessage_t); // Header diff --git a/quickfix/src/message.rs b/quickfix/src/message.rs index 5886c56..becd432 100644 --- a/quickfix/src/message.rs +++ b/quickfix/src/message.rs @@ -43,7 +43,7 @@ impl Message { pub fn as_string_with_len(&self, max_len: usize) -> Result { let mut buffer = vec![0_u8; max_len]; let buffer_ptr = buffer.as_mut_ptr() as *mut i8; - match unsafe { FixMessage_toBuffer(self.0, buffer_ptr, max_len as i64) } { + match unsafe { FixMessage_toBuffer(self.0, buffer_ptr, max_len as u64) } { 0 => Ok(read_buffer_to_string(&buffer)), code => Err(QuickFixError::InvalidFunctionReturnCode(code)), }