diff --git a/.github/workflows/appimage-build.yml b/.github/workflows/appimage-build.yml index 32e47ef..9c92976 100644 --- a/.github/workflows/appimage-build.yml +++ b/.github/workflows/appimage-build.yml @@ -8,7 +8,7 @@ jobs: linux-appimage: name: "Build" runs-on: ubuntu-22.04 - timeout-minutes: 120 + timeout-minutes: 30 steps: - uses: actions/checkout@v4 with: @@ -17,11 +17,15 @@ jobs: - name: Install Packages run: scripts/appimage/install-packages.sh + - name: Build Deps + run: scripts/appimage/build-deps.sh + - name: Compile Build shell: bash run: | make scripts/appimage/make-appimage.sh + - name: Upload AppImage uses: actions/upload-artifact@v4 with: diff --git a/CMakeLists.txt b/CMakeLists.txt index 810fc7f..17caed7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,9 +12,8 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build) # Source files for various targets -file(GLOB LIND_OBJS "src/lindbergh/*.c" "src/lindbergh/*.cpp") -list(FILTER LIND_OBJS EXCLUDE REGEX "src/lindbergh/lindbergh.o") -list(FILTER LIND_OBJS EXCLUDE REGEX "src/lindbergh/evdevinput.o") +file(GLOB LIND_OBJS "src/lindbergh/*.c") +list(FILTER LIND_OBJS EXCLUDE REGEX "src/lindbergh/lindbergh.c") file(GLOB XDIFF_SRCS "src/libxdiff/xdiff/*.c") @@ -27,12 +26,12 @@ set(LINDBERGH_CXX_FLAGS ${LINDBERGH_C_FLAGS} -std=c++11) set(LIBXDIFF_C_FLAGS -DHAVE_CONFIG_H -fPIC -m32) set(LIBSEGAAPI_CXX_FLAGS -m32 -fPIC -shared) set(LIBSEGAAPI_LINKER_FLAGS -m32 -lFAudio) -set(SHARED_LINKER_FLAGS -m32 -Wl,-z,defs -rdynamic -static-libstdc++ -static-libgcc -lc -ldl -lGL -lglut -lX11 -lSDL2 -lm -lpthread -shared -lstdc++ -nostdlib -lasound) +set(SHARED_LINKER_FLAGS -m32 -Wl,-z,defs -rdynamic -static-libstdc++ -static-libgcc -lc -ldl -lGL -lglut -lX11 -lXcursor -lSDL2 -lm -lpthread -shared -lstdc++ -nostdlib -lasound) # Build executable for lindbergh -add_executable(lindyloader src/lindbergh/lindbergh.c src/lindbergh/evdevinput.c src/lindbergh/evdevinput.h) +add_executable(lindyloader src/lindbergh/lindbergh.c src/lindbergh/evdevinput.c src/lindbergh/evdevinput.h src/lindbergh/log.c src/lindbergh/log.h src/lindbergh/jvs.c src/lindbergh/jvs.h src/lindbergh/config.h src/lindbergh/config.c) set_target_properties(lindyloader PROPERTIES OUTPUT_NAME "lindbergh") -set_target_properties(lindyloader PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} LINK_FLAGS "-m32") +set_target_properties(lindyloader PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} LINK_FLAGS "-m32 -lm") target_compile_options(lindyloader PRIVATE ${LINDBERGH_EXE}) # Build static library libxdiff.a with its own flags diff --git a/scripts/appimage/build-deps.sh b/scripts/appimage/build-deps.sh new file mode 100755 index 0000000..58207a3 --- /dev/null +++ b/scripts/appimage/build-deps.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +APPIMAGEDIRNAME=lindbergh-loader.AppDir +OUTPUT_FOLDER=$(realpath "./$APPIMAGEDIRNAME") + +mkdir build-deps +cd build-deps + +# Build openal +wget https://github.com/kcat/openal-soft/archive/refs/tags/openal-soft-1.17.2.tar.gz +tar -xzf openal-soft-1.17.2.tar.gz +cd openal-soft-openal-soft-1.17.2/build + +CFLAGS="-m32 -mstackrealign" CXXFLAGS="-m32 -std=c++14 -mstackrealign" cmake ../ -DALSOFT_BACKEND_PULSEAUDIO=ON -DALSOFT_BACKEND_ALSA=ON -DALSOFT_BACKEND_JACK=OFF -DALSOFT_BACKEND_SNDIO=ON + +make -j4 +cp libopenal.so.1.17.2 /usr/lib/i386-linux-gnu/libopenal.so.0 +cd ../../ + +# Build libSSL and libCrypto +wget https://github.com/openssl/openssl/archive/refs/tags/OpenSSL_0_9_7.tar.gz +tar -xzf OpenSSL_0_9_7.tar.gz +cd openssl-OpenSSL_0_9_7 +cp ../../scripts/appimage/patches/openssl-0.9.7.patch . +./Configure shared 386 no-asm no-krb5 linux-pentium -m32 +patch -p1 < openssl-0.9.7.patch +CFLAGS=-m32 make +cp libcrypto.so.0.9.7 /usr/lib/i386-linux-gnu +cp libssl.so.0.9.7 /usr/lib/i386-linux-gnu + diff --git a/scripts/appimage/install-packages.sh b/scripts/appimage/install-packages.sh index 485927e..f14edc5 100755 --- a/scripts/appimage/install-packages.sh +++ b/scripts/appimage/install-packages.sh @@ -2,10 +2,10 @@ echo "Install Packages Running..." sudo dpkg --add-architecture i386 -sudo apt-get update -sudo apt-get -y install --no-install-recommends \ - build-essential gcc-multilib fuse freeglut3-dev:i386 libsdl2-dev:i386 libfaudio-dev:i386 libvdpau1:i386 \ - libstdc++5:i386 libxmu6:i386 libpcsclite1:i386 libncurses5:i386 unzip +sudo apt update +sudo apt -y install --no-install-recommends \ + build-essential gcc-multilib g++-multilib cmake fuse freeglut3-dev:i386 libsdl2-dev:i386 libfaudio-dev:i386 libvdpau1:i386 \ + libstdc++5:i386 libxmu6:i386 libpcsclite1:i386 libncurses5:i386 unzip libsndio-dev:i386 sudo add-apt-repository ppa:kisak/kisak-mesa -y -sudo apt-get -y update && sudo apt -y dist-upgrade +sudo apt update -y && sudo apt upgrade -y \ No newline at end of file diff --git a/scripts/appimage/make-appimage.sh b/scripts/appimage/make-appimage.sh index 85f049a..05c6acf 100755 --- a/scripts/appimage/make-appimage.sh +++ b/scripts/appimage/make-appimage.sh @@ -13,6 +13,8 @@ declare -a ADDED_LIBS=( "libGLU.so.1" "libglut.so.3" "libglapi.so.0" + "libICE.so.6" + "libSM.so.6" "libX11.so.6" "libX11-xcb.so.1" "libxcb.so.1" @@ -25,6 +27,10 @@ declare -a ADDED_LIBS=( "libstdc++.so.5" "libdrm.so.2" "libexpat.so.1" + "libm.so.6" + "libopenal.so.0" + "libcrypto.so.0.9.7" + "libssl.so.0.9.7" ) set -e @@ -71,10 +77,7 @@ cp lindbergh.so $OUTPUT_FOLDER/usr/lib cp libposixtime.so $OUTPUT_FOLDER/usr/lib mv lindbergh $OUTPUT_FOLDER/usr/bin mkdir -p $OUTPUT_FOLDER/usr/lib/dri -cp /usr/lib/i386-linux-gnu/dri/* $OUTPUT_FOLDER/usr/lib/dri -cp ../libs/libcrypto.so.0.9.7 $OUTPUT_FOLDER/usr/lib -cp ../libs/libssl.so.0.9.7 $OUTPUT_FOLDER/usr/lib -cp ../libs/libopenal.so.0 $OUTPUT_FOLDER/usr/lib +cp /usr/lib/i386-linux-gnu/dri/* $OUTPUT_FOLDER/usr/lib/dri cd .. echo "Running linuxdeploy to create AppDir..." @@ -86,9 +89,6 @@ mv $OUTPUT_FOLDER/usr/lib/libkswapapi.so $OUTPUT_FOLDER/usr/lib32 mv $OUTPUT_FOLDER/usr/lib/libsegaapi.so $OUTPUT_FOLDER/usr/lib32 mv $OUTPUT_FOLDER/usr/lib/lindbergh.so $OUTPUT_FOLDER/usr/lib32 mv $OUTPUT_FOLDER/usr/lib/libposixtime.so $OUTPUT_FOLDER/usr/lib32 -mv $OUTPUT_FOLDER/usr/lib/libcrypto.so.0.9.7 $OUTPUT_FOLDER/usr/lib32 -mv $OUTPUT_FOLDER/usr/lib/libssl.so.0.9.7 $OUTPUT_FOLDER/usr/lib32 -mv $OUTPUT_FOLDER/usr/lib/libopenal.so.0 $OUTPUT_FOLDER/usr/lib32 mv $OUTPUT_FOLDER/usr/lib/dri $OUTPUT_FOLDER/usr/lib32 unzip libs/Cg-3.1.zip -d $OUTPUT_FOLDER/usr/lib32 diff --git a/scripts/appimage/patches/openssl-0.9.7.patch b/scripts/appimage/patches/openssl-0.9.7.patch new file mode 100644 index 0000000..17b8b9d --- /dev/null +++ b/scripts/appimage/patches/openssl-0.9.7.patch @@ -0,0 +1,13 @@ +diff -ruN openssl-OpenSSL_0_9_7.orig/Makefile.ssl openssl-OpenSSL_0_9_7/Makefile.ssl +--- openssl-OpenSSL_0_9_7.orig/Makefile.ssl 2025-04-14 05:05:11.162340308 +0000 ++++ openssl-OpenSSL_0_9_7/Makefile.ssl 2025-04-14 05:06:22.261420144 +0000 +@@ -198,7 +198,7 @@ + SHARED_SSL=libssl$(SHLIB_EXT) + SHARED_LIBS=$(SHARED_CRYPTO) $(SHARED_SSL) + SHARED_LIBS_LINK_EXTS=.so.$(SHLIB_MAJOR) .so +-SHARED_LDFLAGS= ++SHARED_LDFLAGS=-m32 + + GENERAL= Makefile + BASENAME= openssl + diff --git a/src/lindbergh/lindbergh.c b/src/lindbergh/lindbergh.c index 96dae62..91732e6 100644 --- a/src/lindbergh/lindbergh.c +++ b/src/lindbergh/lindbergh.c @@ -338,9 +338,13 @@ void setEnvironmentVariables(const char *ldLibPath, const char *originalDir, con setenv("__NV_PRIME_RENDER_OFFLOAD", "1", 1); } - char libglDriPath[MAX_PATH_LENGTH]; - sprintf(libglDriPath, "%s/usr/lib32/dri", getenv("APP_IMG_ROOT")); - setenv("LIBGL_DRIVERS_PATH", libglDriPath, 1); + char *appImgRoot = getenv("APP_IMG_ROOT"); + if (appImgRoot != NULL) + { + char libglDriPath[MAX_PATH_LENGTH]; + sprintf(libglDriPath, "%s/usr/lib32/dri", appImgRoot); + setenv("LIBGL_DRIVERS_PATH", libglDriPath, 1); + } } void printUsage(char *argv[])