From cc06d1df0be0c0ba305420ebe2986a7a199c6628 Mon Sep 17 00:00:00 2001 From: Alik Aslanyan Date: Tue, 23 Jul 2019 15:32:39 +0400 Subject: [PATCH] Use MUSL libc for full self contained shared library --- .travis.yml | 19 +++++++++++-------- CMakeLists.txt | 2 +- cmake/CMakeCargo.cmake | 4 ++-- cmake/FindRust.cmake | 6 ++++++ cpp/main.cpp | 2 +- rust/Cross.toml | 8 ++++++++ 6 files changed, 29 insertions(+), 12 deletions(-) create mode 100644 rust/Cross.toml diff --git a/.travis.yml b/.travis.yml index d780e69..756bd65 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,7 @@ dist: xenial language: rust +services: + - docker compiler: - clang rust: @@ -7,7 +9,7 @@ rust: - nightly env: global: - - PKG_CONFIG_ALLOW_CROSS=1 TARGET=i686-unknown-linux-gnu CXX=/usr/bin/clang++-8 CC=/usr/bin/clang-8 + - PKG_CONFIG_ALLOW_CROSS=1 TARGET=i686-unknown-linux-musl CXX=/usr/bin/clang++-8 CC=/usr/bin/clang-8 matrix: - RUN_DEBUG_TEST=1 RUN_DEBUG_BUILD=1 - RUN_RELEASE_TEST=1 RUN_CLIPPY=1 @@ -46,6 +48,7 @@ addons: install: - rustup target add $TARGET - cargo install cargo-sweep || true +- cargo install --git https://github.com/In-line/cross.git "--branch=cross-for-grip" || true - if [ "$TRAVIS_RUST_VERSION" = stable ]; then (rustup component add clippy || true) fi before_script: - $CXX --version @@ -56,17 +59,17 @@ script: - | cd $TRAVIS_BUILD_DIR/rust if [ "$TRAVIS_RUST_VERSION" = stable ] && [ -n "$RUN_CLIPPY" ]; then - (CARGO_TARGET_DIR=$TRAVIS_BUILD_DIR/build/debug/rust cargo clippy --target $TARGET --all -- -D clippy::all) + (CARGO_TARGET_DIR=$TRAVIS_BUILD_DIR/build/debug/rust cross clippy --target $TARGET --all -- -D clippy::all) fi - | if [ -n "$RUN_DEBUG_TEST" ]; then - CARGO_TARGET_DIR=$TRAVIS_BUILD_DIR/build/release/rust cargo test --verbose --target $TARGET + CARGO_TARGET_DIR=$TRAVIS_BUILD_DIR/build/release/rust cross test --verbose --target $TARGET fi - | if [ -n "$RUN_RELEASE_TEST" ]; then - CARGO_TARGET_DIR=$TRAVIS_BUILD_DIR/build/debug/rust cargo test --verbose --release --target $TARGET + CARGO_TARGET_DIR=$TRAVIS_BUILD_DIR/build/debug/rust cross test --verbose --release --target $TARGET fi - | @@ -121,10 +124,10 @@ before_cache: - chmod -R a+r $TRAVIS_BUILD_DIR/build/release/rust - chmod -R a+r $TRAVIS_BUILD_DIR/build/debug/rust - cd $TRAVIS_BUILD_DIR/rust -- CARGO_TARGET_DIR=$TRAVIS_BUILD_DIR/build/release/rust cargo sweep --maxsize 1500 -- CARGO_TARGET_DIR=$TRAVIS_BUILD_DIR/build/debug/rust cargo sweep --maxsize 1500 -- CARGO_TARGET_DIR=$TRAVIS_BUILD_DIR/build/release/rust cargo sweep -t 30 -- CARGO_TARGET_DIR=$TRAVIS_BUILD_DIR/build/debug/rust cargo sweep -t 30 +- CARGO_TARGET_DIR=$TRAVIS_BUILD_DIR/build/release/rust cross sweep --maxsize 1500 +- CARGO_TARGET_DIR=$TRAVIS_BUILD_DIR/build/debug/rust cross sweep --maxsize 1500 +- CARGO_TARGET_DIR=$TRAVIS_BUILD_DIR/build/release/rust cross sweep -t 30 +- CARGO_TARGET_DIR=$TRAVIS_BUILD_DIR/build/debug/rust cross sweep -t 30 - cd - notifications: diff --git a/CMakeLists.txt b/CMakeLists.txt index 3238668..539b8cb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,7 +34,7 @@ add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES} ) set(FLAGS "-m32 -O3 -mtune=generic -fvisibility=hidden -flto -fPIC") set(PORTABLE_LINK_FLAGS "${FLAGS} -static-libgcc -static-libstdc++ -Wl,--gc-sections -Wl,--version-script=${CMAKE_SOURCE_DIR}/version_script.lds") -set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "${FLAGS} -fdata-sections -ffunction-sections -fpermissive") +set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "${FLAGS} -fdata-sections -ffunction-sections -fpermissive -fno-exceptions -fno-rtti") set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "") if(WIN32) diff --git a/cmake/CMakeCargo.cmake b/cmake/CMakeCargo.cmake index 46b436b..aa18bcc 100644 --- a/cmake/CMakeCargo.cmake +++ b/cmake/CMakeCargo.cmake @@ -28,7 +28,7 @@ function(cargo_build) # if(CMAKE_SIZEOF_VOID_P EQUAL 8) # set(LIB_TARGET "x86_64-unknown-linux-gnu") # else() - set(LIB_TARGET "i686-unknown-linux-gnu") + set(LIB_TARGET "i686-unknown-linux-musl") # endif() endif() @@ -66,7 +66,7 @@ function(cargo_build) add_custom_command( OUTPUT ${LIB_FILE} - COMMAND ${CARGO_ENV_COMMAND} ${CARGO_EXECUTABLE} ARGS ${CARGO_ARGS} + COMMAND ${CARGO_ENV_COMMAND} ${CROSS_EXECUTABLE} ARGS ${CARGO_ARGS} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DEPENDS ${LIB_SOURCES} COMMENT "running cargo") diff --git a/cmake/FindRust.cmake b/cmake/FindRust.cmake index 53127a1..9da64ca 100644 --- a/cmake/FindRust.cmake +++ b/cmake/FindRust.cmake @@ -24,6 +24,12 @@ find_program(CARGO_EXECUTABLE cargo PATH_SUFFIXES "bin") mark_as_advanced(CARGO_EXECUTABLE) +# Find cross executable +find_program(CROSS_EXECUTABLE cross + HINTS "${CARGO_HOME}" + PATH_SUFFIXES "bin") +mark_as_advanced(CROSS_EXECUTABLE) + # Find rustc executable find_program(RUSTC_EXECUTABLE rustc HINTS "${CARGO_HOME}" diff --git a/cpp/main.cpp b/cpp/main.cpp index c9f210b..02e5ffd 100644 --- a/cpp/main.cpp +++ b/cpp/main.cpp @@ -685,4 +685,4 @@ void StartFrame() { init_grip(); grip_process_request(); RETURN_META(MRES_IGNORED); -} +} \ No newline at end of file diff --git a/rust/Cross.toml b/rust/Cross.toml new file mode 100644 index 0000000..95d2b85 --- /dev/null +++ b/rust/Cross.toml @@ -0,0 +1,8 @@ +[build.env] +passthrough = [ + "RUST_BACKTRACE", + "RUST_LOG", + "PKG_CONFIG_ALLOW_CROSS", +# "CARGO_TARGET_DIR", + "RUSTFLAGS", +]