From 1b885906cc1219285e21be4a9307c09f7a2831a4 Mon Sep 17 00:00:00 2001 From: Ivan Mahonin Date: Sep 09 2020 17:35:26 +0000 Subject: full static linking for linux --- diff --git a/win/build-program-win.sh b/win/build-program-win.sh index 00e624f..dc553f0 100755 --- a/win/build-program-win.sh +++ b/win/build-program-win.sh @@ -34,16 +34,26 @@ newpackages="program" function build_program() { - echocall $CC \ - "${ARGS[@]}" \ - -Wall $OPTIONS \ - -I"$ROOT/release/include/helianthus" \ - "$ROOT/release/lib$bits/libhelianthus.a" \ - -lmingw32 -mconsole \ - -lm -static-libgcc \ - -lopengl32 -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lshlwapi \ - -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lsetupapi -lversion -luuid \ - -o "$TARGETPATH/$PROGNAME$bits.exe" + if [ -z "$LINUX" ]; then + echocall $CC \ + "${ARGS[@]}" \ + -Wall $OPTIONS \ + -I"$ROOT/release/include/helianthus" \ + "$ROOT/release/lib-$bits/libhelianthus.a" \ + -lmingw32 -mconsole \ + -lm -static-libgcc \ + -lopengl32 -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lshlwapi \ + -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lsetupapi -lversion -luuid \ + -o "$TARGETPATH/$PROGNAME-$bits.exe" + else + echocall $CC \ + "${ARGS[@]}" \ + -Wall $OPTIONS \ + -I"$ROOT/release/include/helianthus" \ + "$ROOT/release/lib-$bits/libhelianthus.a" \ + -lm -static-libgcc -lGL -ldl -pthread \ + -o "$TARGETPATH/$PROGNAME-$bits" + fi } @@ -51,8 +61,10 @@ function build_program() { rm -f build*/program.done -build 32 i686-w64-mingw32 -build 64 x86_64-w64-mingw32 +build win32 i686-w64-mingw32 +build win64 x86_64-w64-mingw32 +#LINUX=1 ADDCFLAGS="-m32 -fPIC" build linux32 "" +LINUX=1 ADDCFLAGS=-fPIC build linux64 "" rm -f build*/program.done print_section done diff --git a/win/build-win.sh b/win/build-win.sh index 0501904..31e74a1 100755 --- a/win/build-win.sh +++ b/win/build-win.sh @@ -89,7 +89,8 @@ function build_freetype() { --prefix="$prefix" \ --host="$host" \ --enable-static \ - --enable-shared + --enable-shared \ + --without-bzip2 make -j4 make install mkdir -p build-shared @@ -98,7 +99,8 @@ function build_freetype() { --prefix="$prefix" \ --host="$host" \ --disable-static \ - --enable-shared + --enable-shared \ + --without-bzip2 make -j4 make install cd .. @@ -132,7 +134,8 @@ function build_flac() { --prefix="$prefix" \ --host="$host" \ --enable-static \ - --enable-shared + --enable-shared \ + --disable-cpplibs make -j4 make install } @@ -198,35 +201,60 @@ function build_helianthus() { mkdir -p src cp -r ../../../src/data src/ + local flags= + if [ ! -z "$LINUX" ]; then + flags="-fPIC" + fi + local file= + local srcfiles=() + local compileflags=(-Wall $OPTIONS $flags -I"$prefix/include/SDL2" -I"$prefix/include/freetype2") for file in ../../../src/*.c ../../../src/*.S; do - local filename=$(basename $file) - echocall $CC \ - $file \ - -Wall $OPTIONS \ - -I"$prefix/include/SDL2" \ - -I"$prefix/include/freetype2" \ - -c -o $filename.o + local filename=$(basename "$file") + srcfiles+=("$file") + echocall "$CC" "$file" ${compileflags[@]} -c -o "$filename.o" done - local libs="z png16 freetype ogg vorbis vorbisfile FLAC mpg123 SDL2 SDL2_image SDL2_mixer" + local libs="SDL2 SDL2_image SDL2_mixer FLAC mpg123 vorbisfile vorbis ogg freetype png16 z" local lib= local file= + local libfiles=() rm -f libhelianthus.a for lib in $libs; do mkdir -p $lib cd $lib - echocall $AR -x "$prefix/lib/lib$lib.a" + echocall "$AR" -x "$prefix/lib/lib$lib.a" for file in *.o; do cp $file ../thirdparty_${lib}_$file done + libfiles+=("$prefix/lib/lib$lib.a") cd .. done - echocall $AR rcs libhelianthus.a *.o + echocall "$AR" rcs libhelianthus.a *.o + + if [ -z "$LINUX" ]; then + echocall "$CC" -shared "${srcfiles[@]}" ${compileflags[@]} "${libfiles[@]}" \ + -lmingw32 \ + -lm -static-libgcc \ + -lopengl32 -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lshlwapi \ + -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lsetupapi -lversion -luuid \ + -Wl,--out-implib,libhelianthus.dll.a \ + -o libhelianthus.dll + else + echocall "$CC" -shared "${srcfiles[@]}" ${compileflags[@]} "${libfiles[@]}" \ + -lm -static-libgcc -lGL -ldl -pthread \ + -o libhelianthus.so + fi mkdir -p ../../release/include/helianthus/helianthus - mkdir -p ../../release/lib$bits - cp libhelianthus.a ../../release/lib$bits/ + mkdir -p ../../release/lib-$bits + cp libhelianthus.a ../../release/lib-$bits/ + if [ -z "$LINUX" ]; then + cp libhelianthus.dll ../../release/lib-$bits/ + cp libhelianthus.dll.a ../../release/lib-$bits/ + else + cp libhelianthus.so ../../release/lib-$bits/ + fi cp -r ../../../src/*.h ../../release/include/helianthus/helianthus/ rm -f ../../release/include/helianthus/helianthus/private.h mv ../../release/include/helianthus/helianthus/helianthus.h ../../release/include/helianthus/ @@ -234,18 +262,32 @@ function build_helianthus() { function build_demo() { - echocall $CC \ - ../../../demo/src/*.c \ - -Wall $OPTIONS \ - -I"$ROOT/release/include/helianthus" \ - "$ROOT/release/lib$bits/libhelianthus.a" \ - -lmingw32 -mconsole \ - -lm -static-libgcc \ - -lopengl32 -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lshlwapi \ - -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lsetupapi -lversion -luuid \ - -o demo.exe + if [ -z "$LINUX" ]; then + echocall $CC \ + ../../../demo/src/*.c \ + -Wall $OPTIONS \ + -I"$ROOT/release/include/helianthus" \ + "$ROOT/release/lib-$bits/libhelianthus.a" \ + -lmingw32 -mconsole \ + -lm -static-libgcc \ + -lopengl32 -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lshlwapi \ + -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lsetupapi -lversion -luuid \ + -o demo.exe + else + echocall $CC \ + ../../../demo/src/*.c \ + -Wall $OPTIONS \ + -I"$ROOT/release/include/helianthus" \ + "$ROOT/release/lib-$bits/libhelianthus.a" \ + -lm -static-libgcc -lGL -ldl -pthread \ + -o demo + fi mkdir -p ../../release/demo - cp demo.exe ../../release/demo/demo$bits.exe + if [ -z "$LINUX" ]; then + cp demo.exe ../../release/demo/demo-$bits.exe + else + cp demo ../../release/demo/demo-$bits + fi cp -r ../../../demo/data ../../release/demo/ mkdir -p ../../release/doc/ cp -r ../../../doc/ru ../../release/doc/ @@ -257,8 +299,10 @@ function build_demo() { download unpack -build 32 i686-w64-mingw32 -build 64 x86_64-w64-mingw32 +build win32 i686-w64-mingw32 +build win64 x86_64-w64-mingw32 +#LINUX=1 ADDCFLAGS="-m32 -fPIC" build linux32 "" +LINUX=1 ADDCFLAGS=-fPIC build linux64 "" print_section done diff --git a/win/function.sh b/win/function.sh index 97bda57..6251574 100644 --- a/win/function.sh +++ b/win/function.sh @@ -61,18 +61,18 @@ function build() { host=$2 toolchain $host - prefix="$ROOT/usr$bits" - export CFLAGS="-I$prefix/include" + prefix="$ROOT/usr-$bits" + export CFLAGS="$ADDCFLAGS -I$prefix/include" export CPPFLAGS="-I$prefix/include" export LDFLAGS="-L$prefix/lib" export PKG_CONFIG_PATH="$prefix/lib/pkgconfig" export PKG_CONFIG_LIBDIR="$prefix/lib/pkgconfig" - mkdir -p build$bits - cd build$bits + mkdir -p build-$bits + cd build-$bits for package in $packages $newpackages; do if [ ! -f "$package.done" ]; then - print_section "build$bits $package" + print_section "build-$bits $package" local v=dir_$package srcdir="$ROOT/unpack/${!v}" diff --git a/win/toolchain.sh b/win/toolchain.sh index 8f024b4..ba9ef36 100644 --- a/win/toolchain.sh +++ b/win/toolchain.sh @@ -9,43 +9,45 @@ function toolchain() { export HOST="$1" local PREFIX="/usr/$HOST" - local BINPREFIX="/usr/bin/$HOST" + local BINPREFIX="/usr/bin/$HOST-" + if [ -z "$HOST" ]; then + PREFIX="/usr" + BINPREFIX="/usr/bin/" + fi #export PATH="$PREFIX/bin:$INITIAL_PATH" #export LD_LIBRARY_PATH="$PREFIX/lib:$INITIAL_LD_LIBRARY_PATH" - export TC_PREFIX="$PREFIX" - - export ADDR2LINE=$BINPREFIX-addr2line - export AS=$BINPREFIX-as - export AR=$BINPREFIX-ar - export CC=$BINPREFIX-gcc - export CXXFILT=$BINPREFIX-c++filt - export CXX=$BINPREFIX-c++ - export CPP=$BINPREFIX-cpp - export DLLTOOL=$BINPREFIX-dlltool - export DLLWRAP=$BINPREFIX-dllwrap - export ELFEDIT=$BINPREFIX-elfedit - export FORTRAN=$BINPREFIX-gfortran - export GXX=$BINPREFIX-g++ - export GCC=$BINPREFIX-gcc - export GCOV=$BINPREFIX-gcov - export GCOV_TOOL=$BINPREFIX-gcov-tool - export GFORTRAN=$BINPREFIX-gfortran - export GPROF=$BINPREFIX-gprof - export LD=$BINPREFIX-ld - export LD_BFD=$BINPREFIX-ld.bfd - export NM=$BINPREFIX-nm - export OBJCOPY=$BINPREFIX-objcopy - export OBJDUMP=$BINPREFIX-objdump - export RANLIB=$BINPREFIX-ranlib - export READELF=$BINPREFIX-readelf - export SIZE=$BINPREFIX-size - export STRINGS=$BINPREFIX-strings - export STRIP=$BINPREFIX-strip - export WINDMC=$BINPREFIX-windmc - export RC=$BINPREFIX-windres - export WINDRES=$BINPREFIX-windres + export ADDR2LINE=${BINPREFIX}addr2line + export AS=${BINPREFIX}as + export AR=${BINPREFIX}ar + export CC=${BINPREFIX}gcc + export CXXFILT=${BINPREFIX}c++filt + export CXX=${BINPREFIX}c++ + export CPP=${BINPREFIX}cpp + export DLLTOOL=${BINPREFIX}dlltool + export DLLWRAP=${BINPREFIX}dllwrap + export ELFEDIT=${BINPREFIX}elfedit + export FORTRAN=${BINPREFIX}gfortran + export GXX=${BINPREFIX}g++ + export GCC=${BINPREFIX}gcc + export GCOV=${BINPREFIX}gcov + export GCOV_TOOL=${BINPREFIX}gcov-tool + export GFORTRAN=${BINPREFIX}gfortran + export GPROF=${BINPREFIX}gprof + export LD=${BINPREFIX}ld + export LD_BFD=${BINPREFIX}ld.bfd + export NM=${BINPREFIX}nm + export OBJCOPY=${BINPREFIX}objcopy + export OBJDUMP=${BINPREFIX}objdump + export RANLIB=${BINPREFIX}ranlib + export READELF=${BINPREFIX}readelf + export SIZE=${BINPREFIX}size + export STRINGS=${BINPREFIX}strings + export STRIP=${BINPREFIX}strip + export WINDMC=${BINPREFIX}windmc + export RC=${BINPREFIX}windres + export WINDRES=${BINPREFIX}windres #export LDFLAGS=" -L$PREFIX/lib $INITIAL_LDFLAGS" }