diff --git a/CMakeLists.txt b/CMakeLists.txt index 31884a9fe..83bf54ad8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,13 @@ cmake_minimum_required(VERSION 2.8) + +set(CMAKE_POSITION_INDEPENDENT_CODE ON) + + +if(CMAKE_CROSSCOMPILING) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -ldl") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -ldl") +endif() + ADD_SUBDIRECTORY(exe) # If this variable is defined, a pure cmake build is done end-to-end with no luarocks diff --git a/README.md b/README.md index f7ff56274..5dbb17778 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,33 @@ [![Build Status](https://travis-ci.org/torch/distro.svg?branch=master)](https://travis-ci.org/torch/distro) + +# Torch for RISCV64 + +Cross-compiled Torch framework for RISCV64 architecture. + +## Quick Setup + +```shell script +git clone --recursive torch-riscv +cd torch-riscv +patch -p1 < torch-static.patch +bash install-deps +./install-x86.sh +#The crosscompilation step might still use a standard gcc +#on some steps so we need to manually re-wire it to the riscv one +mkdir -p /tmp/cross-wrappers +cp cross-gcc /tmp/cross-wrappers/gcc +export PATH="/tmp/cross-wrappers:$PATH" +./riscv64_cross_compilation_setup.sh +``` + +## Requirements + +- Ubuntu/Debian Linux +- RISCV64 cross-compiler: `sudo apt install gcc-riscv64-linux-gnu` +- Standard build tools: `sudo apt install cmake build-essential` + + #### NOTE: Torch is not actively developed anymore and is in maintenance mode. Self-contained Torch installation diff --git a/cross-gcc b/cross-gcc new file mode 100755 index 000000000..345c4b7fd --- /dev/null +++ b/cross-gcc @@ -0,0 +1,2 @@ +#!/bin/bash +exec riscv64-linux-gnu-gcc "$@" diff --git a/exe/luajit-rocks b/exe/luajit-rocks index 411f4b9d9..20184a238 160000 --- a/exe/luajit-rocks +++ b/exe/luajit-rocks @@ -1 +1 @@ -Subproject commit 411f4b9d9c4be176d4aab965ebfce50911583e14 +Subproject commit 20184a238783b5f6ed909f4dd40c443d42eaa606 diff --git a/extra/nn b/extra/nn index 200ae7d55..1e668eabf 160000 --- a/extra/nn +++ b/extra/nn @@ -1 +1 @@ -Subproject commit 200ae7d55a3381a232256223c0694498f8f51df0 +Subproject commit 1e668eabf80c8214a58f7a5b5c318b338c2eefee diff --git a/install-x86.sh b/install-x86.sh new file mode 100755 index 000000000..e465ef7cc --- /dev/null +++ b/install-x86.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash + +#This is a truncated version of the original install.sh script +# which defaults to LUA51 and compiles luarocks to run natievly on the build machine + +SKIP_RC=0 +BATCH_INSTALL=0 + +THIS_DIR=$(cd $(dirname $0); pwd) +if [[ "$THIS_DIR" == *" "* ]]; then + echo "$THIS_DIR: Torch cannot install to a path containing whitespace. +Please try a different path, one without any spaces." + exit 1 +fi +PREFIX=${PREFIX:-"${THIS_DIR}/install"} +TORCH_LUA_VERSION=${TORCH_LUA_VERSION:-"LUA51"} # by default install LUA51 + +while getopts 'bsh' x; do + case "$x" in + h) + echo "usage: $0 +This script will install Torch and related, useful packages into $PREFIX. + + -b Run without requesting any user input (will automatically add PATH to shell profile) + -s Skip adding the PATH to shell profile +" + exit 2 + ;; + b) + BATCH_INSTALL=1 + ;; + s) + SKIP_RC=1 + ;; + esac +done + +# Scrub an anaconda/conda install, if exists, from the PATH. +# It has a malformed MKL library (as of 1/17/2015) +OLDPATH=$PATH +if [[ $(echo $PATH | grep conda) ]]; then + export PATH=$(echo $PATH | tr ':' '\n' | grep -v "conda[2-9]\?" | uniq | tr '\n' ':') +fi + +echo "Prefix set to $PREFIX" + +if [[ `uname` == 'Linux' ]]; then + export CMAKE_LIBRARY_PATH=$PREFIX/include:/opt/OpenBLAS/include:$PREFIX/lib:/opt/OpenBLAS/lib:$CMAKE_LIBRARY_PATH +fi +export CMAKE_PREFIX_PATH=$PREFIX + +git submodule update --init --recursive + +# If we're on OS X, use clang +if [[ `uname` == "Darwin" ]]; then + # make sure that we build with Clang. CUDA's compiler nvcc + # does not play nice with any recent GCC version. + export CC=clang + export CXX=clang++ +fi +# If we're on Arch linux, use gcc v5 +if [[ `uname -a` == *"ARCH"* ]]; then + path_to_gcc5=$(which gcc-5) + if [ -x "$path_to_gcc5" ]; then + export CC="$path_to_gcc5" + else + echo "Warning: GCC v5 not found. CUDA v8 is incompatible with GCC v6, if installation fails, consider running \$ pacman -S gcc5" + fi +fi + +echo "Installing Lua version: ${TORCH_LUA_VERSION}" +mkdir -p install +mkdir -p build +cd build + +cmake .. -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DCMAKE_BUILD_TYPE=Release -DWITH_${TORCH_LUA_VERSION}=ON 2>&1 >>$PREFIX/install.log || exit 1 +(make 2>&1 >>$PREFIX/install.log || exit 1) && (make install 2>&1 >>$PREFIX/install.log || exit 1) +cd .. \ No newline at end of file diff --git a/install.sh b/install.sh index ad65434f0..5415b9dd6 100755 --- a/install.sh +++ b/install.sh @@ -1,241 +1,76 @@ #!/usr/bin/env bash -SKIP_RC=0 -BATCH_INSTALL=0 - THIS_DIR=$(cd $(dirname $0); pwd) -if [[ "$THIS_DIR" == *" "* ]]; then - echo "$THIS_DIR: Torch cannot install to a path containing whitespace. -Please try a different path, one without any spaces." - exit 1 -fi PREFIX=${PREFIX:-"${THIS_DIR}/install"} -TORCH_LUA_VERSION=${TORCH_LUA_VERSION:-"LUAJIT21"} # by default install LUAJIT21 - -while getopts 'bsh' x; do - case "$x" in - h) - echo "usage: $0 -This script will install Torch and related, useful packages into $PREFIX. - - -b Run without requesting any user input (will automatically add PATH to shell profile) - -s Skip adding the PATH to shell profile -" - exit 2 - ;; - b) - BATCH_INSTALL=1 - ;; - s) - SKIP_RC=1 - ;; - esac -done - - -# Scrub an anaconda/conda install, if exists, from the PATH. -# It has a malformed MKL library (as of 1/17/2015) -OLDPATH=$PATH -if [[ $(echo $PATH | grep conda) ]]; then - export PATH=$(echo $PATH | tr ':' '\n' | grep -v "conda[2-9]\?" | uniq | tr '\n' ':') -fi - -echo "Prefix set to $PREFIX" - -if [[ `uname` == 'Linux' ]]; then - export CMAKE_LIBRARY_PATH=$PREFIX/include:/opt/OpenBLAS/include:$PREFIX/lib:/opt/OpenBLAS/lib:$CMAKE_LIBRARY_PATH -fi -export CMAKE_PREFIX_PATH=$PREFIX - -git submodule update --init --recursive +RISCV_PREFIX="${PREFIX}/riscv64-cmake" -# If we're on OS X, use clang -if [[ `uname` == "Darwin" ]]; then - # make sure that we build with Clang. CUDA's compiler nvcc - # does not play nice with any recent GCC version. - export CC=clang - export CXX=clang++ -fi -# If we're on Arch linux, use gcc v5 -if [[ `uname -a` == *"ARCH"* ]]; then - path_to_gcc5=$(which gcc-5) - if [ -x "$path_to_gcc5" ]; then - export CC="$path_to_gcc5" - else - echo "Warning: GCC v5 not found. CUDA v8 is incompatible with GCC v6, if installation fails, consider running \$ pacman -S gcc5" - fi -fi - -echo "Installing Lua version: ${TORCH_LUA_VERSION}" -mkdir -p install -mkdir -p build -cd build -cmake .. -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DCMAKE_BUILD_TYPE=Release -DWITH_${TORCH_LUA_VERSION}=ON 2>&1 >>$PREFIX/install.log || exit 1 -(make 2>&1 >>$PREFIX/install.log || exit 1) && (make install 2>&1 >>$PREFIX/install.log || exit 1) -cd .. - -# Check for a CUDA install (using nvcc instead of nvidia-smi for cross-platform compatibility) -path_to_nvcc=$(which nvcc) -if [ $? == 1 ]; then { # look for it in /usr/local - if [[ -f /usr/local/cuda/bin/nvcc ]]; then { - path_to_nvcc=/usr/local/cuda/bin/nvcc - } - elif [[ -f /opt/cuda/bin/nvcc ]]; then { # default path for arch - path_to_nvcc=/opt/cuda/bin/nvcc - } fi -} fi - -# check if we are on mac and fix RPATH for local install -path_to_install_name_tool=$(which install_name_tool 2>/dev/null) -if [ -x "$path_to_install_name_tool" ] -then - if [ ${TORCH_LUA_VERSION} == "LUAJIT21" ] || [ ${TORCH_LUA_VERSION} == "LUAJIT20" ] ; then - install_name_tool -id ${PREFIX}/lib/libluajit.dylib ${PREFIX}/lib/libluajit.dylib - else - install_name_tool -id ${PREFIX}/lib/liblua.dylib ${PREFIX}/lib/liblua.dylib - fi -fi +# Clean previous builds +echo "Cleaning previous build artifacts..." +find . -name "build" -type d -path "*/pkg/*" -exec rm -rf {} + 2>/dev/null +find . -name "*.so" -path "*/pkg/*" -delete 2>/dev/null +find . -name "*.so" -path "*/extra/*" -delete 2>/dev/null -if [ -x "$path_to_nvcc" ] || [ -x "$path_to_nvidiasmi" ] -then - echo "Found CUDA on your machine. Installing CMake 3.6 modules to get up-to-date FindCUDA" - cd ${THIS_DIR}/cmake/3.6 && \ -(cmake -E make_directory build && cd build && cmake .. -DCMAKE_INSTALL_PREFIX="${PREFIX}" \ - && make install) && echo "FindCuda bits of CMake 3.6 installed" || exit 1 +# Make sure native luarocks is available +if [ ! -f "$PREFIX/bin/luarocks" ]; then + echo "Error: Native luarocks not found. Please run './install.sh -b' first" + exit 1 fi - setup_lua_env_cmd=$($PREFIX/bin/luarocks path) eval "$setup_lua_env_cmd" -echo "Installing common Lua packages" -cd ${THIS_DIR}/extra/luafilesystem && $PREFIX/bin/luarocks make rockspecs/luafilesystem-1.6.3-1.rockspec || exit 1 -cd ${THIS_DIR}/extra/penlight && $PREFIX/bin/luarocks make penlight-scm-1.rockspec || exit 1 -cd ${THIS_DIR}/extra/lua-cjson && $PREFIX/bin/luarocks make lua-cjson-2.1devel-1.rockspec || exit 1 - -echo "Installing core Torch packages" -cd ${THIS_DIR}/extra/luaffifb && $PREFIX/bin/luarocks make luaffi-scm-1.rockspec || exit 1 -cd ${THIS_DIR}/pkg/sundown && $PREFIX/bin/luarocks make rocks/sundown-scm-1.rockspec || exit 1 -cd ${THIS_DIR}/pkg/cwrap && $PREFIX/bin/luarocks make rocks/cwrap-scm-1.rockspec || exit 1 -cd ${THIS_DIR}/pkg/paths && $PREFIX/bin/luarocks make rocks/paths-scm-1.rockspec || exit 1 -cd ${THIS_DIR}/pkg/torch && $PREFIX/bin/luarocks make rocks/torch-scm-1.rockspec || exit 1 -cd ${THIS_DIR}/pkg/dok && $PREFIX/bin/luarocks make rocks/dok-scm-1.rockspec || exit 1 -cd ${THIS_DIR}/exe/trepl && $PREFIX/bin/luarocks make trepl-scm-1.rockspec || exit 1 -cd ${THIS_DIR}/pkg/sys && $PREFIX/bin/luarocks make sys-1.1-0.rockspec || exit 1 -cd ${THIS_DIR}/pkg/xlua && $PREFIX/bin/luarocks make xlua-1.0-0.rockspec || exit 1 -cd ${THIS_DIR}/extra/moses && $PREFIX/bin/luarocks make rockspec/moses-1.6.1-1.rockspec || exit 1 -cd ${THIS_DIR}/extra/nn && $PREFIX/bin/luarocks make rocks/nn-scm-1.rockspec || exit 1 -cd ${THIS_DIR}/extra/graph && $PREFIX/bin/luarocks make rocks/graph-scm-1.rockspec || exit 1 -cd ${THIS_DIR}/extra/nngraph && $PREFIX/bin/luarocks make nngraph-scm-1.rockspec || exit 1 -cd ${THIS_DIR}/pkg/image && $PREFIX/bin/luarocks make image-1.1.alpha-0.rockspec || exit 1 -cd ${THIS_DIR}/pkg/optim && $PREFIX/bin/luarocks make optim-1.0.5-0.rockspec || exit 1 +mkdir -p "$RISCV_PREFIX/lib/lua/5.1" +mkdir -p "$RISCV_PREFIX/share/lua/5.1" -if [ -x "$path_to_nvcc" ] -then - echo "Found CUDA on your machine. Installing CUDA packages" - cd ${THIS_DIR}/extra/cutorch && $PREFIX/bin/luarocks make rocks/cutorch-scm-1.rockspec || exit 1 - cd ${THIS_DIR}/extra/cunn && $PREFIX/bin/luarocks make rocks/cunn-scm-1.rockspec || exit 1 -fi - -# Optional packages -echo "Installing optional Torch packages" -cd ${THIS_DIR}/pkg/gnuplot && $PREFIX/bin/luarocks make rocks/gnuplot-scm-1.rockspec -cd ${THIS_DIR}/exe/env && $PREFIX/bin/luarocks make env-scm-1.rockspec -cd ${THIS_DIR}/extra/nnx && $PREFIX/bin/luarocks make nnx-0.1-1.rockspec -cd ${THIS_DIR}/exe/qtlua && $PREFIX/bin/luarocks make rocks/qtlua-scm-1.rockspec -cd ${THIS_DIR}/pkg/qttorch && $PREFIX/bin/luarocks make rocks/qttorch-scm-1.rockspec -cd ${THIS_DIR}/extra/threads && $PREFIX/bin/luarocks make rocks/threads-scm-1.rockspec -cd ${THIS_DIR}/extra/argcheck && $PREFIX/bin/luarocks make rocks/argcheck-scm-1.rockspec +# Cross-compilation environment +export CC="riscv64-linux-gnu-gcc" +export CXX="riscv64-linux-gnu-g++" +export AR="riscv64-linux-gnu-ar" +export RANLIB="riscv64-linux-gnu-ranlib" -# Optional CUDA packages -if [ -x "$path_to_nvcc" ] -then - echo "Found CUDA on your machine. Installing optional CUDA packages" - cd ${THIS_DIR}/extra/cudnn && $PREFIX/bin/luarocks make cudnn-scm-1.rockspec -fi +export CFLAGS="-march=rv64gc -mabi=lp64d -fPIC -DNO_AVX -DNO_SSE" +export CXXFLAGS="-march=rv64gc -mabi=lp64d -fPIC -DNO_AVX -DNO_SSE" +export LDFLAGS="-latomic -lm -lpthread" -export PATH=$OLDPATH # Restore anaconda distribution if we took it out. - -# Add C libs to LUA_CPATH -if [[ `uname` == "Darwin" ]]; then - CLIB_LUA_CPATH=$PREFIX/lib/?.dylib -else - CLIB_LUA_CPATH=$PREFIX/lib/?.so -fi - -cat <$PREFIX/bin/torch-activate -$setup_lua_env_cmd -export PATH=$PREFIX/bin:\$PATH -export LD_LIBRARY_PATH=$PREFIX/lib:\$LD_LIBRARY_PATH -export DYLD_LIBRARY_PATH=$PREFIX/lib:\$DYLD_LIBRARY_PATH -export LUA_CPATH='$CLIB_LUA_CPATH;'\$LUA_CPATH -EOF -chmod +x $PREFIX/bin/torch-activate - -if [[ $SKIP_RC == 1 ]]; then - exit 0 -fi - -RC_FILE=0 -DEFAULT=yes -if [[ $(echo $SHELL | grep bash) ]]; then - RC_FILE=$HOME/.bashrc -elif [[ $(echo $SHELL | grep zsh) ]]; then - RC_FILE=$HOME/.zshrc +# Test cross-compiler +echo 'int main(){return 0;}' | $CC $CFLAGS -x c - -o test_riscv 2>/dev/null +if [ -f test_riscv ]; then + rm -f test_riscv else - echo " - -Non-standard shell $SHELL detected. You might want to -add the following lines to your shell profile: - -. $PREFIX/bin/torch-activate -" -fi - -WRITE_PATH_TO_PROFILE=0 -if [[ $BATCH_INSTALL == 0 ]]; then - if [ -f "$RC_FILE" ]; then - echo " - -Do you want to automatically prepend the Torch install location -to PATH and LD_LIBRARY_PATH in your $RC_FILE? (yes/no) -[$DEFAULT] >>> " - read input - if [[ $input == "" ]]; then - input=$DEFAULT - fi - - is_yes() { - yesses={y,Y,yes,Yes,YES} - if [[ $yesses =~ $1 ]]; then - echo 1 - fi - } - - if [[ $(is_yes $input) ]]; then - WRITE_PATH_TO_PROFILE=1 - fi - fi -else - if [[ "$RC_FILE" ]]; then - WRITE_PATH_TO_PROFILE=1 - fi + echo "ERROR: Cross-compiler not working. Install with: sudo apt install gcc-riscv64-linux-gnu" + exit 1 fi -if [[ $WRITE_PATH_TO_PROFILE == 1 ]]; then - echo " - -. $PREFIX/bin/torch-activate" >> "$RC_FILE" - echo " - -. $PREFIX/bin/torch-activate" >> "$HOME"/.profile - -else - echo " - -Not updating your shell profile. -You might want to -add the following lines to your shell profile: - -. $PREFIX/bin/torch-activate -" -fi +# +## Optional packages +#echo "Installing optional Torch packages" +#cd ${THIS_DIR}/pkg/gnuplot && $PREFIX/bin/luarocks make rocks/gnuplot-scm-1.rockspec +#cd ${THIS_DIR}/exe/env && $PREFIX/bin/luarocks make env-scm-1.rockspec +#cd ${THIS_DIR}/extra/nnx && $PREFIX/bin/luarocks make nnx-0.1-1.rockspec +#cd ${THIS_DIR}/exe/qtlua && $PREFIX/bin/luarocks make rocks/qtlua-scm-1.rockspec +#cd ${THIS_DIR}/pkg/qttorch && $PREFIX/bin/luarocks make rocks/qttorch-scm-1.rockspec +#cd ${THIS_DIR}/extra/threads && $PREFIX/bin/luarocks make rocks/threads-scm-1.rockspec +#cd ${THIS_DIR}/extra/argcheck && $PREFIX/bin/luarocks make rocks/argcheck-scm-1.rockspec + + +#echo "" +#echo "=== Building TH Library using bare cmake ===" +#cd pkg/torch/lib/TH +#mkdir -p build-riscv +#cd build-riscv +# +#cmake .. \ +# -DCMAKE_C_COMPILER="$CC" -DCMAKE_CXX_COMPILER="$CXX" \ +# -DCMAKE_C_FLAGS="$CFLAGS" -DCMAKE_CXX_FLAGS="$CXXFLAGS" \ +# -DCMAKE_EXE_LINKER_FLAGS="$LDFLAGS" \ +# -DCMAKE_SHARED_LINKER_FLAGS="$LDFLAGS" \ +# -DCMAKE_INSTALL_PREFIX="$RISCV_PREFIX" \ +# -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON \ +# -DWITH_OPENMP=OFF -DWITH_SSE=OFF -DWITH_AVX=OFF \ +# -DTH_HAVE_X86_SIMD=OFF 2>&1 | tee /tmp/th-build.log +# +#make -j2 VERBOSE=1 2>&1 | tee -a /tmp/th-build.log && make install 2>&1 | tee -a /tmp/th-build.log +# +#cd "$THIS_DIR" +# +#setup_lua_env_cmd=$($PREFIX/bin/luarocks path) +#eval "$setup_lua_env_cmd" diff --git a/pkg/torch b/pkg/torch index 3e9e141ce..1600de6d4 160000 --- a/pkg/torch +++ b/pkg/torch @@ -1 +1 @@ -Subproject commit 3e9e141ced1afd0cad451e69f90e6e53503647ca +Subproject commit 1600de6d4b9f9df15c02bd2969f09ed9e8973dfe diff --git a/riscv64-toolchain.cmake b/riscv64-toolchain.cmake new file mode 100644 index 000000000..e5b7bd07a --- /dev/null +++ b/riscv64-toolchain.cmake @@ -0,0 +1,34 @@ + +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR riscv64) + +set(CMAKE_C_COMPILER /usr/bin/riscv64-linux-gnu-gcc) +set(CMAKE_CXX_COMPILER /usr/bin/riscv64-linux-gnu-g++) + +# Set position independent code by default +set(CMAKE_POSITION_INDEPENDENT_CODE ON) + +# Set the flags properly - don't reference CMAKE_C_FLAGS in its own definition +set(CMAKE_C_FLAGS "-march=rv64gc -mabi=lp64d -fPIC") +set(CMAKE_CXX_FLAGS "-march=rv64gc -mabi=lp64d -fPIC") + +# Force shared libraries +set(BUILD_SHARED_LIBS OFF) + +# For cross-compilation, we need to set the sysroot and find root path +set(CMAKE_FIND_ROOT_PATH /usr/riscv64-linux-gnu) + +# Search for programs in host directories +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + +# Search for libraries and headers in target directories +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + +# Disable PIE for cross-compilation (can cause linking issues) +set(CMAKE_EXE_LINKER_FLAGS "-no-pie") +set(CMAKE_SHARED_LINKER_FLAGS "") + +# Make sure we link against libatomic for RISC-V +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -latomic") +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -latomic") \ No newline at end of file diff --git a/riscv64_cross_compilation_setup.sh b/riscv64_cross_compilation_setup.sh new file mode 100755 index 000000000..6f13ed253 --- /dev/null +++ b/riscv64_cross_compilation_setup.sh @@ -0,0 +1,203 @@ +#!/usr/bin/env bash + +set -e # Exit on any error + +# ============================================================================== +# Configuration and Setup +# ============================================================================== + +THIS_DIR=$(cd "$(dirname "$0")"; pwd) +PREFIX=${PREFIX:-"${THIS_DIR}/install"} +RISCV_PREFIX="${PREFIX}/riscv64-cmake" + +# Cross-compilation toolchain configuration +export CC="riscv64-linux-gnu-gcc" +export CXX="riscv64-linux-gnu-g++" +export AR="riscv64-linux-gnu-ar" +export RANLIB="riscv64-linux-gnu-ranlib" + +# Compiler flags for RISC-V 64-bit with disabled SIMD +export CFLAGS="-march=rv64gc -mabi=lp64d -fPIC" +export CXXFLAGS="-march=rv64gc -mabi=lp64d -fPIC" +export LDFLAGS="-latomic -lm -lpthread" + +# CMake configuration arguments (reused across all builds) +CMAKE_ARGS=( + "CC=$CC" + "CXX=$CXX" + "AR=$AR" + "RANLIB=$RANLIB" + "STRIP=$STRIP" + "CFLAGS=$CFLAGS" + "CXXFLAGS=$CXXFLAGS" + "LDFLAGS=$LDFLAGS" + "CMAKE_C_COMPILER=$CC" + "CMAKE_CXX_COMPILER=$CXX" + "CMAKE_C_FLAGS=$CFLAGS" + "CMAKE_CXX_FLAGS=$CXXFLAGS" + "CMAKE_SHARED_LINKER_FLAGS=$LDFLAGS" + "CMAKE_POSITION_INDEPENDENT_CODE=ON" + "BUILD_SHARED_LIBS=OFF" +) + +# ============================================================================== +# Utility Functions +# ============================================================================== + +# Function to install a luarocks package with cross-compilation settings +install_luarock() { + local package_dir="$1" + local rockspec="$2" + local exit_code="${3:-1}" # Default exit code is 1 + + echo "Installing $(basename "$package_dir")..." + + if [[ ! -d "$package_dir" ]]; then + echo "Error: Directory $package_dir not found" + exit "$exit_code" + fi + + cd "$package_dir" + "$PREFIX/bin/luarocks" make "$rockspec" \ + --tree="$RISCV_PREFIX" \ + "${CMAKE_ARGS[@]}" || exit "$exit_code" + + echo "✓ Successfully installed $(basename "$package_dir")" +} + +# Function to validate cross-compiler +validate_cross_compiler() { + echo "Testing cross-compiler..." + if echo 'int main(){return 0;}' | $CC $CFLAGS -x c - -o test_riscv 2>/dev/null; then + rm -f test_riscv + echo "✓ Cross-compiler working" + else + echo "ERROR: Cross-compiler not working. Install with: sudo apt install gcc-riscv64-linux-gnu" + exit 1 + fi +} + +# ============================================================================== +# Cleanup and Preparation +# ============================================================================== + +echo "Cleaning previous build artifacts..." +find . -name "build" -type d -path "*/pkg/*" -exec rm -rf {} + 2>/dev/null || true +find . -name "*.so" -path "*/pkg/*" -delete 2>/dev/null || true +find . -name "*.so" -path "*/extra/*" -delete 2>/dev/null || true + +# Verify native luarocks is available +if [[ ! -f "$PREFIX/bin/luarocks" ]]; then + echo "Error: Native luarocks not found. Please run './install-x86.sh -b' first" + exit 1 +fi + +# Setup Lua environment +echo "Setting up Lua environment..." +setup_lua_env_cmd=$("$PREFIX/bin/luarocks" path) +eval "$setup_lua_env_cmd" + +# Create necessary directories +mkdir -p "$RISCV_PREFIX/lib/lua/5.1" +mkdir -p "$RISCV_PREFIX/share/lua/5.1" + +# Validate cross-compiler +validate_cross_compiler + +echo "✓ Setup complete. Starting package installation..." + +# ============================================================================== +# Common Lua Packages Installation +# ============================================================================== + +echo "" +echo "=== Installing Common Lua Packages ===" + +install_luarock "${THIS_DIR}/extra/luafilesystem" "rockspecs/luafilesystem-1.6.3-1.rockspec" +install_luarock "${THIS_DIR}/extra/penlight" "penlight-scm-1.rockspec" +install_luarock "${THIS_DIR}/extra/lua-cjson" "lua-cjson-2.1devel-1.rockspec" + +# ============================================================================== +# Core Torch Packages Installation +# ============================================================================== + +echo "" +echo "=== Installing Core Torch Packages ===" + +install_luarock "${THIS_DIR}/extra/luaffifb" "luaffi-scm-1.rockspec" +#install_luarock "${THIS_DIR}/pkg/sundown" "rocks/sundown-scm-1.rockspec" +install_luarock "${THIS_DIR}/pkg/cwrap" "rocks/cwrap-scm-1.rockspec" +install_luarock "${THIS_DIR}/pkg/paths" "rocks/paths-scm-1.rockspec" + +install_luarock "${THIS_DIR}/pkg/torch" "rocks/torch-scm-1.rockspec" + +#install_luarock "${THIS_DIR}/pkg/dok" "rocks/dok-scm-1.rockspec" +#install_luarock "${THIS_DIR}/exe/trepl" "trepl-scm-1.rockspec" +#install_luarock "${THIS_DIR}/pkg/sys" "sys-1.1-0.rockspec" +#install_luarock "${THIS_DIR}/pkg/xlua" "xlua-1.0-0.rockspec" + +# ============================================================================== +# Extended Torch Packages Installation +# ============================================================================== + +echo "" +echo "=== Installing Extended Torch Packages ===" + +install_luarock "${THIS_DIR}/extra/moses" "rockspec/moses-1.6.1-1.rockspec" +install_luarock "${THIS_DIR}/extra/nn" "rocks/nn-scm-1.rockspec" +#install_luarock "${THIS_DIR}/extra/graph" "rocks/graph-scm-1.rockspec" +#install_luarock "${THIS_DIR}/extra/nngraph" "nngraph-scm-1.rockspec" +#install_luarock "${THIS_DIR}/pkg/image" "image-1.1.alpha-0.rockspec" +#install_luarock "${THIS_DIR}/pkg/optim" "optim-1.0.5-0.rockspec" + +# ============================================================================== +# Optional Packages (Commented Out) +# ============================================================================== + +# Uncomment and modify as needed: +# echo "" +# echo "=== Installing Optional Torch Packages ===" +# install_luarock "${THIS_DIR}/pkg/gnuplot" "rocks/gnuplot-scm-1.rockspec" +# install_luarock "${THIS_DIR}/exe/env" "env-scm-1.rockspec" +# install_luarock "${THIS_DIR}/extra/nnx" "nnx-0.1-1.rockspec" +# install_luarock "${THIS_DIR}/exe/qtlua" "rocks/qtlua-scm-1.rockspec" +# install_luarock "${THIS_DIR}/pkg/qttorch" "rocks/qttorch-scm-1.rockspec" +# install_luarock "${THIS_DIR}/extra/threads" "rocks/threads-scm-1.rockspec" +# install_luarock "${THIS_DIR}/extra/argcheck" "rocks/argcheck-scm-1.rockspec" + + + +# ============================================================================== +# Uncomment if you need to build TH library directly with CMake: +# ============================================================================== + +# echo "" +# echo "=== Building TH Library using bare cmake ===" +# cd "${THIS_DIR}/pkg/torch/lib/TH" +# mkdir -p build-riscv +# cd build-riscv +# +# cmake .. \ +# -DCMAKE_C_COMPILER="$CC" -DCMAKE_CXX_COMPILER="$CXX" \ +# -DCMAKE_C_FLAGS="$CFLAGS" -DCMAKE_CXX_FLAGS="$CXXFLAGS" \ +# -DCMAKE_EXE_LINKER_FLAGS="$LDFLAGS" \ +# -DCMAKE_SHARED_LINKER_FLAGS="$LDFLAGS" \ +# -DCMAKE_INSTALL_PREFIX="$RISCV_PREFIX" \ +# -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON \ +# -DWITH_OPENMP=OFF -DWITH_SSE=OFF -DWITH_AVX=OFF \ +# -DTH_HAVE_X86_SIMD=OFF 2>&1 | tee /tmp/th-build.log +# +# make -j2 VERBOSE=1 2>&1 | tee -a /tmp/th-build.log && \ +# make install 2>&1 | tee -a /tmp/th-build.log +# +# cd "$THIS_DIR" +# +# # Reset Lua environment +# setup_lua_env_cmd=$("$PREFIX/bin/luarocks" path) +# eval "$setup_lua_env_cmd" + +echo "" +echo "✅ All packages installed successfully!" +echo "Installation directory: $RISCV_PREFIX" +echo "To verify installation, check for RISC-V shared objects:" +echo "find '$RISCV_PREFIX' -name '*.so' | head -5 | xargs file" diff --git a/test.lua b/test.lua new file mode 100644 index 000000000..ce9430531 --- /dev/null +++ b/test.lua @@ -0,0 +1,22 @@ +print("=== Testing Fixed Torch ===") +local ok, torch = pcall(require, 'torch') +if ok then + print("✓ torch loaded") + local t = torch.Tensor(2,2):fill(1) + print("✓ basic tensor:", t:sum()) + + local ok_nn, nn = pcall(require, 'nn') + if ok_nn then + print("✓ nn loaded") + local linear = nn.Linear(2, 1) + local out = linear:forward(torch.randn(2)) + print("✓ neural network works") + end + + local ok_img, image = pcall(require, 'image') + if ok_img then + print("✓ image loaded") + end +else + print("❌ torch failed:", torch) +end diff --git a/toolchain-changes.patch b/toolchain-changes.patch new file mode 100644 index 000000000..f284c27ec --- /dev/null +++ b/toolchain-changes.patch @@ -0,0 +1,42 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 31884a9..5ee3e0d 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,4 +1,11 @@ + cmake_minimum_required(VERSION 2.8) ++ ++if(CMAKE_CROSSCOMPILING) ++ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -ldl") ++ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -ldl") ++endif() ++ ++ + ADD_SUBDIRECTORY(exe) + + # If this variable is defined, a pure cmake build is done end-to-end with no luarocks +diff --git a/exe/luajit-rocks b/exe/luajit-rocks +--- a/exe/luajit-rocks ++++ b/exe/luajit-rocks +@@ -1 +1 @@ +-Subproject commit 411f4b9d9c4be176d4aab965ebfce50911583e14 ++Subproject commit 411f4b9d9c4be176d4aab965ebfce50911583e14-dirty +diff --git a/install.sh b/install.sh +index ad65434..15a9ae2 100755 +--- a/install.sh ++++ b/install.sh +@@ -70,7 +70,14 @@ echo "Installing Lua version: ${TORCH_LUA_VERSION}" + mkdir -p install + mkdir -p build + cd build +-cmake .. -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DCMAKE_BUILD_TYPE=Release -DWITH_${TORCH_LUA_VERSION}=ON 2>&1 >>$PREFIX/install.log || exit 1 ++ ++export CC="/usr/bin/riscv64-linux-gnu-gcc" ++export CXX="riscv64-linux-gnu-g++" ++ ++ ++TOOLCHAIN_FILE="${THIS_DIR}/riscv64-toolchain.cmake" ++ ++cmake .. -DCMAKE_TOOLCHAIN_FILE="${TOOLCHAIN_FILE}" -DHAVE_DLOPEN=1 -DCMAKE_HAVE_DLOPEN=1 -DLUA_USE_DLOPEN=ON -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DCMAKE_BUILD_TYPE=Release -DWITH_${TORCH_LUA_VERSION}=ON 2>&1 >>$PREFIX/install.log || exit 1 + (make 2>&1 >>$PREFIX/install.log || exit 1) && (make install 2>&1 >>$PREFIX/install.log || exit 1) + cd .. + diff --git a/torch-static.patch b/torch-static.patch new file mode 100644 index 000000000..57af69dea --- /dev/null +++ b/torch-static.patch @@ -0,0 +1,733 @@ +Subject: [PATCH] torch-static +--- +Index: pkg/torch/lib/TH/THAllocator.c +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/pkg/torch/lib/TH/THAllocator.c b/pkg/torch/lib/TH/THAllocator.c +--- a/pkg/torch/lib/TH/THAllocator.c (revision 1600de6d4b9f9df15c02bd2969f09ed9e8973dfe) ++++ b/pkg/torch/lib/TH/THAllocator.c (date 1753084737000) +@@ -105,6 +105,10 @@ + + static void *_map_alloc(void* ctx_, ptrdiff_t size) + { ++ if (size == 0) { ++ return NULL; ++ } ++ + THMapAllocatorContext *ctx = ctx_; + void *data = NULL; + +@@ -332,6 +336,9 @@ + } + + static void THMapAllocator_free(void* ctx_, void* data) { ++ if (data == NULL) ++ return; ++ + THMapAllocatorContext *ctx = ctx_; + + #ifdef _WIN32 +Index: extra/nn/rocks/nn-scm-1.rockspec +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/extra/nn/rocks/nn-scm-1.rockspec b/extra/nn/rocks/nn-scm-1.rockspec +--- a/extra/nn/rocks/nn-scm-1.rockspec (revision 1e668eabf80c8214a58f7a5b5c318b338c2eefee) ++++ b/extra/nn/rocks/nn-scm-1.rockspec (date 1756378843580) +@@ -2,7 +2,7 @@ + version = "scm-1" + + source = { +- url = "git://github.com/torch/nn.git", ++ url = "https://github.com/torch/nn.git", + } + + description = { +Index: pkg/torch/lib/TH/generic/THTensorMath.c +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/pkg/torch/lib/TH/generic/THTensorMath.c b/pkg/torch/lib/TH/generic/THTensorMath.c +--- a/pkg/torch/lib/TH/generic/THTensorMath.c (revision 1600de6d4b9f9df15c02bd2969f09ed9e8973dfe) ++++ b/pkg/torch/lib/TH/generic/THTensorMath.c (date 1753084737000) +@@ -1595,10 +1595,6 @@ + THLongTensor_zero(indices_); + + if(t->size[dimension] == 1) { +- if (!keepdim) { +- THTensor_(squeeze1d)(values_, values_, dimension); +- THLongTensor_squeeze1d(indices_, indices_, dimension); +- } + return; + } + +@@ -1675,10 +1671,6 @@ + THLongTensor_zero(indices_); + + if(t->size[dimension] == 1) { +- if (!keepdim) { +- THTensor_(squeeze1d)(values_, values_, dimension); +- THLongTensor_squeeze1d(indices_, indices_, dimension); +- } + return; + } + +@@ -1927,18 +1919,6 @@ + THTensor_(zero)(r_); + } + +-void THTensor_(zerosLike)(THTensor *r_, THTensor *input) +-{ +- THTensor_(resizeAs)(r_, input); +- THTensor_(zero)(r_); +-} +- +-void THTensor_(onesLike)(THTensor *r_, THTensor *input) +-{ +- THTensor_(resizeAs)(r_, input); +- THTensor_(fill)(r_, 1); +-} +- + void THTensor_(ones)(THTensor *r_, THLongStorage *size) + { + THTensor_(resize)(r_, size, NULL); +@@ -2856,14 +2836,19 @@ + TH_TENSOR_APPLY2(real, t, real, r_, *r__data = CFUNC(*t_data);); \ + } \ + ++#define LAB_IMPLEMENT_BASIC_FUNCTION_VALUE(NAME, CFUNC) \ ++ void THTensor_(NAME)(THTensor *r_, THTensor *t, real value) \ ++ { \ ++ THTensor_(resizeAs)(r_, t); \ ++ TH_TENSOR_APPLY2(real, t, real, r_, *r__data = CFUNC(*t_data, value);); \ ++ } \ ++ + #if defined(TH_REAL_IS_LONG) + LAB_IMPLEMENT_BASIC_FUNCTION(abs,labs) +-LAB_IMPLEMENT_BASIC_FUNCTION(neg,-) + #endif /* long only part */ + + #if defined(TH_REAL_IS_SHORT) || defined(TH_REAL_IS_INT) + LAB_IMPLEMENT_BASIC_FUNCTION(abs,abs) +-LAB_IMPLEMENT_BASIC_FUNCTION(neg,-) + #endif /* int only part */ + + #if defined(TH_REAL_IS_BYTE) +@@ -2905,6 +2890,7 @@ + LAB_IMPLEMENT_BASIC_FUNCTION(tan,TH_MATH_NAME(tan)) + LAB_IMPLEMENT_BASIC_FUNCTION(atan,TH_MATH_NAME(atan)) + LAB_IMPLEMENT_BASIC_FUNCTION(tanh,TH_MATH_NAME(tanh)) ++LAB_IMPLEMENT_BASIC_FUNCTION_VALUE(pow,TH_MATH_NAME(pow)) + LAB_IMPLEMENT_BASIC_FUNCTION(sqrt,TH_MATH_NAME(sqrt)) + LAB_IMPLEMENT_BASIC_FUNCTION(rsqrt,TH_MATH_NAME(TH_rsqrt)) + LAB_IMPLEMENT_BASIC_FUNCTION(ceil,TH_MATH_NAME(ceil)) +@@ -2917,35 +2903,6 @@ + LAB_IMPLEMENT_BASIC_FUNCTION(cinv, TH_MATH_NAME(1.0) / ) + + +-void THTensor_(pow)(THTensor *r_, THTensor *t, real value) +-{ +- THTensor_(resizeAs)(r_, t); +- if(value == 1){ +- THTensor_(copy)(r_, t); +- } +- else if(value == 2){ +- THTensor_(cmul)(r_, t, t); +- } +- else if(value == 3){ +- TH_TENSOR_APPLY2(real, t, real, r_, *r__data = *t_data * *t_data * *t_data;); +- } +- else if(value == 0.5){ +- THTensor_(sqrt)(r_, t); +- } +- else if(value == -0.5){ +- THTensor_(rsqrt)(r_, t); +- } +- else if(value == -1){ +- THTensor_(cinv)(r_, t); +- } +- else if(value == -2){ +- TH_TENSOR_APPLY2(real, t, real, r_, *r__data = TH_MATH_NAME(1.0) / (*t_data * *t_data);); +- } +- else{ +- TH_TENSOR_APPLY2(real, t, real, r_, *r__data = TH_MATH_NAME(pow)(*t_data, value);); +- } +-} +- + void THTensor_(atan2)(THTensor *r_, THTensor *tx, THTensor *ty) + { + THTensor_(resizeAs)(r_, tx); +@@ -3201,7 +3158,10 @@ + } + + if(n == 1) { +- THTensor_(set1d)(r_, 0, a); ++ TH_TENSOR_APPLY(real, r_, ++ *r__data = a; ++ i++; ++ ); + } else { + TH_TENSOR_APPLY(real, r_, + *r__data = a + i*(b-a)/((real)(n-1)); +@@ -3221,7 +3181,10 @@ + } + + if(n == 1) { +- THTensor_(set1d)(r_, 0, TH_MATH_NAME(pow)(10.0, a)); ++ TH_TENSOR_APPLY(real, r_, ++ *r__data = TH_MATH_NAME(pow)(10.0, a); ++ i++; ++ ); + } else { + TH_TENSOR_APPLY(real, r_, + *r__data = TH_MATH_NAME(pow)(10.0, a + i*(b-a)/((real)(n-1))); +Index: exe/qtlua/rocks/qtlua-scm-1.rockspec +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/exe/qtlua/rocks/qtlua-scm-1.rockspec b/exe/qtlua/rocks/qtlua-scm-1.rockspec +--- a/exe/qtlua/rocks/qtlua-scm-1.rockspec (revision 8b80419ca2458e172b0d245999114f2b9d4ac118) ++++ b/exe/qtlua/rocks/qtlua-scm-1.rockspec (date 1756115680926) +@@ -2,7 +2,7 @@ + version = "scm-1" + + source = { +- url = "git://github.com/torch/qtlua.git", ++ url = "https://github.com/torch/qtlua.git", + } + + description = { +Index: pkg/torch/lib/TH/generic/THTensorMath.h +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/pkg/torch/lib/TH/generic/THTensorMath.h b/pkg/torch/lib/TH/generic/THTensorMath.h +--- a/pkg/torch/lib/TH/generic/THTensorMath.h (revision 1600de6d4b9f9df15c02bd2969f09ed9e8973dfe) ++++ b/pkg/torch/lib/TH/generic/THTensorMath.h (date 1753084737000) +@@ -90,9 +90,7 @@ + TH_API void THTensor_(cminValue)(THTensor *r, THTensor *t, real value); + + TH_API void THTensor_(zeros)(THTensor *r_, THLongStorage *size); +-TH_API void THTensor_(zerosLike)(THTensor *r_, THTensor *input); + TH_API void THTensor_(ones)(THTensor *r_, THLongStorage *size); +-TH_API void THTensor_(onesLike)(THTensor *r_, THTensor *input); + TH_API void THTensor_(diag)(THTensor *r_, THTensor *t, int k); + TH_API void THTensor_(eye)(THTensor *r_, long n, long m); + TH_API void THTensor_(arange)(THTensor *r_, accreal xmin, accreal xmax, accreal step); +Index: pkg/torch/rocks/torch-scm-1.rockspec +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/pkg/torch/rocks/torch-scm-1.rockspec b/pkg/torch/rocks/torch-scm-1.rockspec +--- a/pkg/torch/rocks/torch-scm-1.rockspec (revision 1600de6d4b9f9df15c02bd2969f09ed9e8973dfe) ++++ b/pkg/torch/rocks/torch-scm-1.rockspec (date 1756115513782) +@@ -2,7 +2,7 @@ + version = "scm-1" + + source = { +- url = "git://github.com/torch/torch7.git", ++ url = "https://github.com/torch/torch7.git", + } + + description = { +Index: pkg/torch/lib/TH/THStorage.c +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/pkg/torch/lib/TH/THStorage.c b/pkg/torch/lib/TH/THStorage.c +--- a/pkg/torch/lib/TH/THStorage.c (revision 1600de6d4b9f9df15c02bd2969f09ed9e8973dfe) ++++ b/pkg/torch/lib/TH/THStorage.c (date 1753084737000) +@@ -34,11 +34,11 @@ + if (dim_infer != -1) { + THDescBuff buf = THLongStorage_sizeDesc(size); + THArgCheck(total_size > 0 && nElement % total_size == 0, 2, +- "size '%s' is invalid for input with %td elements", buf.str, nElement); ++ "size '%s' is invalid for input of with %td elements", buf.str, nElement); + } else { + THDescBuff buf = THLongStorage_sizeDesc(size); + THArgCheck(nElement == total_size, 2, +- "size '%s' is invalid for input with %td elements", buf.str, nElement); ++ "size '%s' is invalid for input of with %td elements", buf.str, nElement); + } + THLongStorage* copy = THLongStorage_newWithSize(size->size); + THLongStorage_copy(copy, size); +@@ -132,16 +132,6 @@ + long stride = (dim >= 0) ? + tensorStrides[dim] : expandedSizesCalc[i + 1] * expandedStridesCalc[i+1]; + long targetSize = THLongStorage_data(sizes)[i]; +- if (targetSize == -1) { +- if (dim < 0) { +- THFree(expandedSizesCalc); +- THFree(expandedStridesCalc); +- snprintf(error_buffer, buffer_len, "The expanded size of the tensor (%ld) isn't allowed in a leading, non-existing dimension %ld.", targetSize, i); +- return -1; +- } else { +- targetSize = size; +- } +- } + if (size != targetSize) { + if (size == 1) { + size = targetSize; +Index: pkg/paths/rocks/paths-scm-1.rockspec +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/pkg/paths/rocks/paths-scm-1.rockspec b/pkg/paths/rocks/paths-scm-1.rockspec +--- a/pkg/paths/rocks/paths-scm-1.rockspec (revision 4ebe222ba12589fb9d86c1d3895d7f509df77b6a) ++++ b/pkg/paths/rocks/paths-scm-1.rockspec (date 1756116527364) +@@ -2,7 +2,7 @@ + version = "scm-1" + + source = { +- url = "git://github.com/torch/paths.git", ++ url = "https://github.com/torch/paths.git", + } + + description = { +Index: pkg/torch/lib/TH/generic/THTensorRandom.h +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/pkg/torch/lib/TH/generic/THTensorRandom.h b/pkg/torch/lib/TH/generic/THTensorRandom.h +--- a/pkg/torch/lib/TH/generic/THTensorRandom.h (revision 1600de6d4b9f9df15c02bd2969f09ed9e8973dfe) ++++ b/pkg/torch/lib/TH/generic/THTensorRandom.h (date 1753084737000) +@@ -3,8 +3,6 @@ + #else + + TH_API void THTensor_(random)(THTensor *self, THGenerator *_generator); +-TH_API void THTensor_(clampedRandom)(THTensor *self, THGenerator *_generator, long min, long max); +-TH_API void THTensor_(cappedRandom)(THTensor *self, THGenerator *_generator, long max); + TH_API void THTensor_(geometric)(THTensor *self, THGenerator *_generator, double p); + TH_API void THTensor_(bernoulli)(THTensor *self, THGenerator *_generator, double p); + TH_API void THTensor_(bernoulli_FloatTensor)(THTensor *self, THGenerator *_generator, THFloatTensor *p); +@@ -13,9 +11,6 @@ + #if defined(TH_REAL_IS_FLOAT) || defined(TH_REAL_IS_DOUBLE) + TH_API void THTensor_(uniform)(THTensor *self, THGenerator *_generator, double a, double b); + TH_API void THTensor_(normal)(THTensor *self, THGenerator *_generator, double mean, double stdv); +-TH_API void THTensor_(normal_means)(THTensor *self, THGenerator *gen, THTensor *means, double stddev); +-TH_API void THTensor_(normal_stddevs)(THTensor *self, THGenerator *gen, double mean, THTensor *stddevs); +-TH_API void THTensor_(normal_means_stddevs)(THTensor *self, THGenerator *gen, THTensor *means, THTensor *stddevs); + TH_API void THTensor_(exponential)(THTensor *self, THGenerator *_generator, double lambda); + TH_API void THTensor_(cauchy)(THTensor *self, THGenerator *_generator, double median, double sigma); + TH_API void THTensor_(logNormal)(THTensor *self, THGenerator *_generator, double mean, double stdv); +Index: exe/luajit-rocks/lua-5.1/CMakeLists.txt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/exe/luajit-rocks/lua-5.1/CMakeLists.txt b/exe/luajit-rocks/lua-5.1/CMakeLists.txt +--- a/exe/luajit-rocks/lua-5.1/CMakeLists.txt (revision 20184a238783b5f6ed909f4dd40c443d42eaa606) ++++ b/exe/luajit-rocks/lua-5.1/CMakeLists.txt (date 1753266004552) +@@ -91,13 +91,16 @@ + PREFIX "lib" IMPORT_PREFIX "lib" OUTPUT_NAME "lua") + ADD_EXECUTABLE(lua src/lua.c ${SRC_LIB}) + ADD_EXECUTABLE(luac src/luac.c src/print.c ${SRC_LIB}) +-TARGET_LINK_LIBRARIES(liblua ${LIBS}) +-TARGET_LINK_LIBRARIES(lua ${LIBS}) ++ + + if(CMAKE_CROSSCOMPILING) + target_link_libraries(luac ${LIBS} dl) ++ TARGET_LINK_LIBRARIES(liblua ${LIBS} dl) ++ TARGET_LINK_LIBRARIES(lua ${LIBS} dl) + else() + target_link_libraries(luac ${LIBS}) ++ TARGET_LINK_LIBRARIES(liblua ${LIBS}) ++ TARGET_LINK_LIBRARIES(lua ${LIBS}) + endif() + + +Index: pkg/torch/lib/TH/CMakeLists.txt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/pkg/torch/lib/TH/CMakeLists.txt b/pkg/torch/lib/TH/oldfCMakeLists.txt +rename from pkg/torch/lib/TH/CMakeLists.txt +rename to pkg/torch/lib/TH/oldfCMakeLists.txt +--- a/pkg/torch/lib/TH/CMakeLists.txt (revision 1600de6d4b9f9df15c02bd2969f09ed9e8973dfe) ++++ b/pkg/torch/lib/TH/oldfCMakeLists.txt (date 1756279809000) +@@ -8,6 +8,9 @@ + SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) + SET(CMAKE_LIBRARY_PATH /usr/lib/x86_64-linux-gnu/ ${CMAKE_LIBRARY_PATH}) + ++set(CMAKE_POSITION_INDEPENDENT_CODE ON) ++ ++ + # Can be compiled standalone + IF(NOT TH_INSTALL_BIN_SUBDIR + OR NOT TH_INSTALL_LIB_SUBDIR +@@ -82,6 +85,7 @@ + ENDIF () + ENDIF () + ++SET(WITH_OPENMP OFF CACHE BOOL "OpenMP support if available?" FORCE) + IF (WITH_OPENMP) + FIND_PACKAGE(OpenMP) + IF(OPENMP_FOUND) +@@ -154,7 +158,7 @@ + MESSAGE(STATUS "SSE3 Found") + SET(CMAKE_C_FLAGS "${C_SSE3_FLAGS} -DUSE_SSE3 ${CMAKE_C_FLAGS}") + ENDIF(C_SSE3_FOUND) +-# we don't set -mavx and -mavx2 flags globally, but only for specific files ++# we dont set -mavx and -mavx2 flags globally, but only for specific files + # however, we want to enable the AVX codepaths, so we still need to + # add USE_AVX and USE_AVX2 macro defines + IF(C_AVX_FOUND) +@@ -300,26 +304,20 @@ + ENDIF() + ENDIF() + +-FIND_PACKAGE(BLAS) +-IF(BLAS_FOUND) +- SET(USE_BLAS 1) +- IF ($ENV{TH_BINARY_BUILD}) +- MESSAGE(STATUS "TH_BINARY_BUILD detected. Enabling special linkage.") +- TARGET_LINK_LIBRARIES(TH "${BLAS_LIBRARIES};${BLAS_LIBRARIES};${BLAS_LIBRARIES}") +- ELSE ($ENV{TH_BINARY_BUILD}) +- TARGET_LINK_LIBRARIES(TH ${BLAS_LIBRARIES}) +- ENDIF ($ENV{TH_BINARY_BUILD}) +- +- IF(BLAS_INFO STREQUAL "mkl") +- ADD_DEFINITIONS(-DTH_BLAS_MKL) +- ENDIF() +-ENDIF(BLAS_FOUND) ++#FIND_PACKAGE(BLAS) ++#IF(BLAS_FOUND) ++# SET(USE_BLAS 1) ++# TARGET_LINK_LIBRARIES(TH ${BLAS_LIBRARIES}) ++# IF(BLAS_INFO STREQUAL "mkl") ++# ADD_DEFINITIONS(-DTH_BLAS_MKL) ++# ENDIF() ++#ENDIF(BLAS_FOUND) + +-FIND_PACKAGE(LAPACK) +-IF(LAPACK_FOUND) +- SET(USE_LAPACK 1) +- TARGET_LINK_LIBRARIES(TH ${LAPACK_LIBRARIES}) +-ENDIF(LAPACK_FOUND) ++#FIND_PACKAGE(LAPACK) ++#IF(LAPACK_FOUND) ++# SET(USE_LAPACK 1) ++# TARGET_LINK_LIBRARIES(TH ${LAPACK_LIBRARIES}) ++#ENDIF(LAPACK_FOUND) + + IF (UNIX AND NOT APPLE) + INCLUDE(CheckLibraryExists) +@@ -358,15 +356,15 @@ + ENDIF(NOT MSVC) + + # Is __thread supported? +-IF(NOT MSVC) +- CHECK_C_SOURCE_COMPILES("static __thread int x = 1; int main() { return x; }" C_HAS_THREAD) +-ELSE(NOT MSVC) +- CHECK_C_SOURCE_COMPILES("static __declspec( thread ) int x = 1; int main() { return x; }" C_HAS_THREAD) +-ENDIF(NOT MSVC) ++#IF(NOT MSVC) ++# CHECK_C_SOURCE_COMPILES("static __thread int x = 1; int main() { return x; }" C_HAS_THREAD) ++#ELSE(NOT MSVC) ++# CHECK_C_SOURCE_COMPILES("static __declspec( thread ) int x = 1; int main() { return x; }" C_HAS_THREAD) ++#ENDIF(NOT MSVC) + IF(NOT C_HAS_THREAD) + MESSAGE(STATUS "Warning: __thread is not supported, generating thread-unsafe code") +-ELSE(NOT C_HAS_THREAD) +- SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTH_HAVE_THREAD") ++#ELSE(NOT C_HAS_THREAD) ++# SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTH_HAVE_THREAD") + ENDIF(NOT C_HAS_THREAD) + + INCLUDE_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}") +@@ -473,12 +471,14 @@ + Install_Required_Library(${BLAS_openblas_LIBRARY}) + Install_Required_Library("${libpath}/libquadmath") + Install_Required_Library("${libpath}/libgfortran") ++ Install_Required_Library("${libpath}/libquadmath") + Install_Required_Library("${libpath}/libgcc") + ENDIF() + ENDIF() + + # Create THConfig.cmake + set(TH_LOCATION "$") ++ + SET(TH_LIBRARIES "${CMAKE_INSTALL_PREFIX}/${TH_INSTALL_LIB_SUBDIR}/${TH_OUTPUT_NAME}") + SET(TH_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/${TH_INSTALL_INCLUDE_SUBDIR}/TH") + CONFIGURE_FILE(THConfig.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/cmake-exports/THConfig.cmake") +Index: pkg/torch/lib/TH/cmake/FindMKL.cmake +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/pkg/torch/lib/TH/cmake/FindMKL.cmake b/pkg/torch/lib/TH/cmake/FindMKL.cmake +--- a/pkg/torch/lib/TH/cmake/FindMKL.cmake (revision 1600de6d4b9f9df15c02bd2969f09ed9e8973dfe) ++++ b/pkg/torch/lib/TH/cmake/FindMKL.cmake (date 1753084737000) +@@ -50,7 +50,7 @@ + IF(CMAKE_COMPILER_IS_GNUCC) + SET(mklthreads "mkl_gnu_thread" "mkl_intel_thread") + SET(mklifaces "gf" "intel") +- SET(mklrtls "gomp" "iomp5") ++ SET(mklrtls "iomp5") + ELSE(CMAKE_COMPILER_IS_GNUCC) + SET(mklthreads "mkl_intel_thread") + SET(mklifaces "intel") +@@ -92,7 +92,7 @@ + # Try linking multiple libs + MACRO(CHECK_ALL_LIBRARIES LIBRARIES _name _list _flags) + # This macro checks for the existence of the combination of libraries given by _list. +- # If the combination is found, this macro checks whether we can link against that library ++ # If the combination is found, this macro whether we can link against that library + # combination using the name of a routine given by _name using the linker + # flags given by _flags. If the combination of libraries is found and passes + # the link test, LIBRARIES is set to the list of complete library paths that +@@ -116,15 +116,8 @@ + message(STATUS "Checking for [${__list}]") + FOREACH(_library ${_list}) + SET(_combined_name ${_combined_name}_${_library}) +- IF(_libraries_work) +- IF(${_library} STREQUAL "gomp") +- FIND_PACKAGE(OpenMP) +- IF(OPENMP_FOUND) +- SET(${_prefix}_${_library}_LIBRARY ${OpenMP_C_FLAGS}) +- ENDIF(OPENMP_FOUND) +- ELSE(${_library} STREQUAL "gomp") +- FIND_LIBRARY(${_prefix}_${_library}_LIBRARY NAMES ${_library}) +- ENDIF(${_library} STREQUAL "gomp") ++ IF(_libraries_work) ++ FIND_LIBRARY(${_prefix}_${_library}_LIBRARY NAMES ${_library}) + MARK_AS_ADVANCED(${_prefix}_${_library}_LIBRARY) + SET(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}_${_library}_LIBRARY}) + SET(_libraries_work ${${_prefix}_${_library}_LIBRARY}) +@@ -138,7 +131,6 @@ + # Test this combination of libraries. + IF(_libraries_work) + SET(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}}) +- SET(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES};${CMAKE_REQUIRED_LIBRARIES}") + CHECK_FUNCTION_EXISTS(${_name} ${_prefix}${_combined_name}_WORKS) + SET(CMAKE_REQUIRED_LIBRARIES) + MARK_AS_ADVANCED(${_prefix}${_combined_name}_WORKS) +@@ -158,11 +150,6 @@ + set(mkl_m "m") + endif(WIN32) + +-if(UNIX AND NOT APPLE) +- set(mkl_dl "${CMAKE_DL_LIBS}") +-else(UNIX AND NOT APPLE) +- set(mkl_dl "") +-endif(UNIX AND NOT APPLE) + + # Check for version 10/11 + IF (NOT MKL_LIBRARIES) +@@ -174,7 +161,7 @@ + FOREACH(mklthread ${mklthreads}) + IF (NOT MKL_LIBRARIES AND NOT INTEL_MKL_SEQUENTIAL) + CHECK_ALL_LIBRARIES(MKL_LIBRARIES cblas_sgemm +- "mkl_${mkliface}${mkl64};${mklthread};mkl_core;${mklrtl};pthread;${mkl_m};${mkl_dl}" "") ++ "mkl_${mkliface}${mkl64};${mklthread};mkl_core;${mklrtl};pthread;${mkl_m}" "") + ENDIF (NOT MKL_LIBRARIES AND NOT INTEL_MKL_SEQUENTIAL) + ENDFOREACH(mklthread) + ENDFOREACH(mkl64) +@@ -185,7 +172,7 @@ + FOREACH(mkl64 ${mkl64s} "") + IF (NOT MKL_LIBRARIES) + CHECK_ALL_LIBRARIES(MKL_LIBRARIES cblas_sgemm +- "mkl_${mkliface}${mkl64};mkl_sequential;mkl_core;${mkl_m};${mkl_dl}" "") ++ "mkl_${mkliface}${mkl64};mkl_sequential;mkl_core;${mkl_m}" "") + IF (MKL_LIBRARIES) + SET(mklseq "_sequential") + ENDIF (MKL_LIBRARIES) +@@ -199,7 +186,7 @@ + FOREACH(mklthread ${mklthreads}) + IF (NOT MKL_LIBRARIES) + CHECK_ALL_LIBRARIES(MKL_LIBRARIES cblas_sgemm +- "mkl_${mkliface}${mkl64};${mklthread};mkl_core;${mklrtl};pthread;${mkl_m};${mkl_dl}" "") ++ "mkl_${mkliface}${mkl64};${mklthread};mkl_core;${mklrtl};pthread;${mkl_m}" "") + ENDIF (NOT MKL_LIBRARIES) + ENDFOREACH(mklthread) + ENDFOREACH(mkl64) +Index: pkg/torch/lib/TH/cmake/FindARM.cmake +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/pkg/torch/lib/TH/cmake/FindARM.cmake b/pkg/torch/lib/TH/cmake/FindARM.cmake +--- a/pkg/torch/lib/TH/cmake/FindARM.cmake (revision 1600de6d4b9f9df15c02bd2969f09ed9e8973dfe) ++++ b/pkg/torch/lib/TH/cmake/FindARM.cmake (date 1753084737000) +@@ -5,7 +5,7 @@ + EXEC_PROGRAM(cat ARGS "/proc/cpuinfo" OUTPUT_VARIABLE CPUINFO) + + #neon instruction can be found on the majority part of modern ARM processor +- STRING(REGEX REPLACE "^.*(neon).*$" "\\1" NEON_THERE "${CPUINFO}") ++ STRING(REGEX REPLACE "^.*(neon).*$" "\\1" NEON_THERE ${CPUINFO}) + STRING(COMPARE EQUAL "neon" "${NEON_THERE}" NEON_TRUE) + IF (NEON_TRUE) + set(NEON_FOUND true CACHE BOOL "NEON available on host") +@@ -14,7 +14,7 @@ + ENDIF (NEON_TRUE) + + # on ARMv8, neon is inherit and instead listed as 'asimd' in /proc/cpuinfo +- STRING(REGEX REPLACE "^.*(asimd).*$" "\\1" ASIMD_THERE "${CPUINFO}") ++ STRING(REGEX REPLACE "^.*(asimd).*$" "\\1" ASIMD_THERE ${CPUINFO}) + STRING(COMPARE EQUAL "asimd" "${ASIMD_THERE}" ASIMD_TRUE) + IF (ASIMD_TRUE) + set(ASIMD_FOUND true CACHE BOOL "ASIMD/NEON available on host") +@@ -23,7 +23,7 @@ + ENDIF (ASIMD_TRUE) + + #Find the processor type (for now OMAP3 or OMAP4) +- STRING(REGEX REPLACE "^.*(OMAP3).*$" "\\1" OMAP3_THERE "${CPUINFO}") ++ STRING(REGEX REPLACE "^.*(OMAP3).*$" "\\1" OMAP3_THERE ${CPUINFO}) + STRING(COMPARE EQUAL "OMAP3" "${OMAP3_THERE}" OMAP3_TRUE) + IF (OMAP3_TRUE) + set(CORTEXA8_FOUND true CACHE BOOL "OMAP3 available on host") +@@ -32,7 +32,7 @@ + ENDIF (OMAP3_TRUE) + + #Find the processor type (for now OMAP3 or OMAP4) +- STRING(REGEX REPLACE "^.*(OMAP4).*$" "\\1" OMAP4_THERE "${CPUINFO}") ++ STRING(REGEX REPLACE "^.*(OMAP4).*$" "\\1" OMAP4_THERE ${CPUINFO}) + STRING(COMPARE EQUAL "OMAP4" "${OMAP4_THERE}" OMAP4_TRUE) + IF (OMAP4_TRUE) + set(CORTEXA9_FOUND true CACHE BOOL "OMAP4 available on host") +@@ -45,7 +45,7 @@ + CPUINFO) + + #neon instruction can be found on the majority part of modern ARM processor +- STRING(REGEX REPLACE "^.*(neon).*$" "\\1" NEON_THERE "${CPUINFO}") ++ STRING(REGEX REPLACE "^.*(neon).*$" "\\1" NEON_THERE ${CPUINFO}) + STRING(COMPARE EQUAL "neon" "${NEON_THERE}" NEON_TRUE) + IF (NEON_TRUE) + set(NEON_FOUND true CACHE BOOL "NEON available on host") +Index: pkg/torch/lib/TH/generic/THTensorRandom.c +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/pkg/torch/lib/TH/generic/THTensorRandom.c b/pkg/torch/lib/TH/generic/THTensorRandom.c +--- a/pkg/torch/lib/TH/generic/THTensorRandom.c (revision 1600de6d4b9f9df15c02bd2969f09ed9e8973dfe) ++++ b/pkg/torch/lib/TH/generic/THTensorRandom.c (date 1753084737000) +@@ -23,16 +23,6 @@ + #endif + } + +-void THTensor_(clampedRandom)(THTensor *self, THGenerator *_generator, long min, long max) { +- THArgCheck(max > min, 2, "max must be greater than min"); +- TH_TENSOR_APPLY(real, self, *self_data = (real)((THRandom_random(_generator) % (max - min)) + min);) +-} +- +-void THTensor_(cappedRandom)(THTensor *self, THGenerator *_generator, long max) { +- THArgCheck(max > 0, 1, "max must be positive"); +- THTensor_(clampedRandom)(self, _generator, 0, max); +-} +- + void THTensor_(geometric)(THTensor *self, THGenerator *_generator, double p) + { + TH_TENSOR_APPLY(real, self, *self_data = (real)THRandom_geometric(_generator, p);); +@@ -65,29 +55,6 @@ + TH_TENSOR_APPLY(real, self, *self_data = (real)THRandom_normal(_generator, mean, stdv);); + } + +-void THTensor_(normal_means)(THTensor *self, THGenerator *gen, THTensor *means, double stddev) +-{ +- THTensor_(resizeAs)(self, means); +- THTensor_(normal)(self, gen, 0, stddev); +- THTensor_(cadd)(self, self, 1, means); +-} +- +-void THTensor_(normal_stddevs)(THTensor *self, THGenerator *gen, double mean, THTensor *stddevs) +-{ +- THTensor_(resizeAs)(self, stddevs); +- THTensor_(normal)(self, gen, 0, 1); +- THTensor_(cmul)(self, self, stddevs); +- THTensor_(add)(self, self, mean); +-} +- +-void THTensor_(normal_means_stddevs)(THTensor *self, THGenerator *gen, THTensor *means, THTensor *stddevs) +-{ +- THTensor_(resizeAs)(self, means); +- THTensor_(normal)(self, gen, 0, 1); +- THTensor_(cmul)(self, self, stddevs); +- THTensor_(cadd)(self, self, 1, means); +-} +- + void THTensor_(exponential)(THTensor *self, THGenerator *_generator, double lambda) + { + TH_TENSOR_APPLY(real, self, *self_data = (real)THRandom_exponential(_generator, lambda);); +@@ -147,7 +114,7 @@ + THTensor_fastSet1d(J, small, large); + q_data[large * q->stride[0]] -= 1.0 - THTensor_fastGet1d(q, small); + +- if(q_data[large * q->stride[0]] < 1.0) ++ if(q_data[large] < 1.0) + { + THTensor_fastSet1d(smaller, small_c-1, large); + large_c -= 1; +Index: pkg/torch/lib/TH/vector/VSX.c +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/pkg/torch/lib/TH/vector/VSX.c b/pkg/torch/lib/TH/vector/VSX.c +--- a/pkg/torch/lib/TH/vector/VSX.c (revision 1600de6d4b9f9df15c02bd2969f09ed9e8973dfe) ++++ b/pkg/torch/lib/TH/vector/VSX.c (date 1753084737000) +@@ -1345,7 +1345,7 @@ + // TODO + // + // +-// Finished running all tests. All tests PASSED. ++// Finished runnning all tests. All tests PASSED. + // + //------------------------------------------------ + #ifdef RUN_VSX_TESTS +@@ -2509,7 +2509,7 @@ + + + +- printf("Finished running all tests. All tests PASSED.\n"); ++ printf("Finished runnning all tests. All tests PASSED.\n"); + return 0; + } + +Index: pkg/torch/lib/TH/generic/simd/simd.h +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/pkg/torch/lib/TH/generic/simd/simd.h b/pkg/torch/lib/TH/generic/simd/simd.h +--- a/pkg/torch/lib/TH/generic/simd/simd.h (revision 1600de6d4b9f9df15c02bd2969f09ed9e8973dfe) ++++ b/pkg/torch/lib/TH/generic/simd/simd.h (date 1756376075000) +@@ -54,7 +54,7 @@ + }; + + +-#if defined(__arm__) || defined(__aarch64__) // incl. armel, armhf, arm64 ++#if defined(__arm__) || defined(__aarch64__) || (!defined(__x86_64__) && !defined(__i386__)) // incl. armel, armhf, arm64 // x86 + + #if defined(__NEON__) + +@@ -96,7 +96,7 @@ + + #endif + +-#else // x86 ++#else + static inline void cpuid(uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) + { + #if defined(_MSC_VER) +diff --git a/extra/luaffifb/ffi.c b/extra/luaffifb/ffi.c.backup +rename from extra/luaffifb/ffi.c +rename to extra/luaffifb/ffi.c.backup +diff --git a/extra/nn/lib/THNN/CMakeLists.txt b/extra/nn/lib/THNN/oldCMakeLists.txt +rename from extra/nn/lib/THNN/CMakeLists.txt +rename to extra/nn/lib/THNN/oldCMakeLists.txt +diff --git a/extra/luaffifb/ffi.h b/extra/luaffifb/ffi.h.backup +rename from extra/luaffifb/ffi.h +rename to extra/luaffifb/ffi.h.backup