diff --git a/CMakeLists.txt b/CMakeLists.txt index cd2d50dac..f393ee96d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -73,6 +73,9 @@ option(WITH_BOOTSTRAP "build lokinet-bootstrap tool" ${DEFAULT_WITH_BOOTSTRAP}) include(cmake/enable_lto.cmake) +option(CROSS_PLATFORM "cross compiler platform" "Linux") +option(CROSS_PREFIX "toolchain cross compiler prefix" "") + option(BUILD_STATIC_DEPS "Download, build, and statically link against core dependencies" OFF) option(STATIC_LINK "link statically against dependencies" ${BUILD_STATIC_DEPS}) if(BUILD_STATIC_DEPS AND NOT STATIC_LINK) diff --git a/contrib/cross.sh b/contrib/cross.sh index 125a7c54e..81d40edae 100755 --- a/contrib/cross.sh +++ b/contrib/cross.sh @@ -8,10 +8,11 @@ die() { exit 1 } +platform=${PLATFORM:-Linux} root="$(readlink -e $(dirname $0)/../)" cd $root set -e -set -x +set +x test $# = 0 && die no targets provided mkdir -p build-cross echo "all: $@" > build-cross/Makefile @@ -20,9 +21,11 @@ for targ in $@ ; do cd $root/build-cross/build-$targ cmake \ -G 'Unix Makefiles' \ + -DCROSS_PLATFORM=$platform \ + -DCROSS_PREFIX=$targ \ -DCMAKE_EXE_LINKER_FLAGS=-fstack-protector \ -DCMAKE_CXX_FLAGS=-fdiagnostics-color=always\ - -DCMAKE_TOOLCHAIN_FILE=$root/contrib/cross/$targ.toolchain.cmake\ + -DCMAKE_TOOLCHAIN_FILE=$root/contrib/cross/cross.toolchain.cmake\ -DBUILD_STATIC_DEPS=ON \ -DBUILD_SHARED_LIBS=OFF \ -DBUILD_TESTING=OFF \ diff --git a/contrib/cross/aarch64.toolchain.cmake b/contrib/cross/aarch64.toolchain.cmake deleted file mode 100644 index ada0993c3..000000000 --- a/contrib/cross/aarch64.toolchain.cmake +++ /dev/null @@ -1,13 +0,0 @@ -set(CMAKE_SYSTEM_NAME Linux) -set(TOOLCHAIN_PREFIX aarch64-linux-gnu) -set(TOOLCHAIN_SUFFIX) - -set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) - -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc${TOOLCHAIN_SUFFIX}) -set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++${TOOLCHAIN_SUFFIX}) -set(ARCH_TRIPLET ${TOOLCHAIN_PREFIX}) diff --git a/contrib/cross/armhf.toolchain.cmake b/contrib/cross/armhf.toolchain.cmake deleted file mode 100644 index 552975e6d..000000000 --- a/contrib/cross/armhf.toolchain.cmake +++ /dev/null @@ -1,13 +0,0 @@ -set(CMAKE_SYSTEM_NAME Linux) -set(TOOLCHAIN_PREFIX arm-linux-gnueabihf) -set(TOOLCHAIN_SUFFIX) - -set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) - -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc${TOOLCHAIN_SUFFIX}) -set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++${TOOLCHAIN_SUFFIX}) -set(ARCH_TRIPLET ${TOOLCHAIN_PREFIX}) diff --git a/contrib/cross/mips.toolchain.cmake b/contrib/cross/cross.toolchain.cmake similarity index 80% rename from contrib/cross/mips.toolchain.cmake rename to contrib/cross/cross.toolchain.cmake index 758fa4fb2..2a7cde131 100644 --- a/contrib/cross/mips.toolchain.cmake +++ b/contrib/cross/cross.toolchain.cmake @@ -1,7 +1,5 @@ -set(CMAKE_SYSTEM_NAME Linux) -set(TOOLCHAIN_PREFIX mips-linux-gnu) -set(TOOLCHAIN_SUFFIX) - +set(CMAKE_SYSTEM_NAME ${CROSS_PLATFORM}) +set(TOOLCHAIN_PREFIX ${CROSS_PREFIX}) set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) diff --git a/contrib/cross/mips64.toolchain.cmake b/contrib/cross/mips64.toolchain.cmake deleted file mode 100644 index e71867b68..000000000 --- a/contrib/cross/mips64.toolchain.cmake +++ /dev/null @@ -1,13 +0,0 @@ -set(CMAKE_SYSTEM_NAME Linux) -set(TOOLCHAIN_PREFIX mips64-linux-gnuabi64) -set(TOOLCHAIN_SUFFIX) - -set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) - -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc${TOOLCHAIN_SUFFIX}) -set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++${TOOLCHAIN_SUFFIX}) -set(ARCH_TRIPLET ${TOOLCHAIN_PREFIX}) diff --git a/contrib/cross/mipsel.toolchain.cmake b/contrib/cross/mipsel.toolchain.cmake deleted file mode 100644 index 142f96337..000000000 --- a/contrib/cross/mipsel.toolchain.cmake +++ /dev/null @@ -1,13 +0,0 @@ -set(CMAKE_SYSTEM_NAME Linux) -set(TOOLCHAIN_PREFIX mipsel-linux-gnu) -set(TOOLCHAIN_SUFFIX) - -set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) - -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc${TOOLCHAIN_SUFFIX}) -set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++${TOOLCHAIN_SUFFIX}) -set(ARCH_TRIPLET ${TOOLCHAIN_PREFIX}) diff --git a/contrib/cross/ppc64le.toolchain.cmake b/contrib/cross/ppc64le.toolchain.cmake deleted file mode 100644 index f0b956079..000000000 --- a/contrib/cross/ppc64le.toolchain.cmake +++ /dev/null @@ -1,13 +0,0 @@ -set(CMAKE_SYSTEM_NAME Linux) -set(TOOLCHAIN_PREFIX powerpc64le-linux-gnu) -set(TOOLCHAIN_SUFFIX) - -set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) - -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc${TOOLCHAIN_SUFFIX}) -set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++${TOOLCHAIN_SUFFIX}) -set(ARCH_TRIPLET ${TOOLCHAIN_PREFIX}) diff --git a/readme.md b/readme.md index e6fdaede5..be57d75f3 100644 --- a/readme.md +++ b/readme.md @@ -68,9 +68,21 @@ If you want to build from source: $ make -j$(nproc) $ sudo make install + #### Cross Compile For Linux -install the toolchain for `$arch` this example is `aarch64` +current cross targets: + +* aarch64-linux-gnu +* arm-linux-gnueabihf +* mips-linux-gnu +* mips64-linux-gnuabi64 +* mipsel-linux-gnu +* powerpc64le-linux-gnu + + + +install the toolchain (this one is for `aarch64-linux-gnu`) $ sudo apt install g{cc,++}-aarch64-linux-gnu