From 271a49f8ca9d1dbc60c6f8372ccda0dff5bf889d Mon Sep 17 00:00:00 2001 From: s1lentq Date: Tue, 13 Apr 2021 04:01:14 +0700 Subject: [PATCH] Add workflows/build.yml (Migrate to Github CI) Add CMakeLists.txt build system Update README.md Minor fixes --- .github/workflows/build.yml | 276 ++++++++++++++++++ .gitmodules | 3 + CMakeLists.txt | 12 + README.md | 103 ++++--- build.sh | 39 +++ dep/cppunitlite/CMakeLists.txt | 25 ++ regamedll/CMakeLists.txt | 393 ++++++++++++++++++++------ regamedll/common/stdc++compat.cpp | 38 ++- regamedll/compile.sh | 7 - regamedll/dlls/bot/cs_bot_learn.cpp | 4 +- regamedll/engine/unicode_strtools.cpp | 4 +- regamedll/lib/linux32/libm.so | Bin 0 -> 149392 bytes regamedll/lib/linux32/librt.so | Bin 0 -> 30684 bytes regamedll/pm_shared/pm_shared.cpp | 6 +- regamedll/version/glibc_test.sh | 83 ++++++ 15 files changed, 835 insertions(+), 158 deletions(-) create mode 100644 .github/workflows/build.yml create mode 100644 .gitmodules create mode 100644 CMakeLists.txt create mode 100755 build.sh create mode 100644 dep/cppunitlite/CMakeLists.txt delete mode 100755 regamedll/compile.sh create mode 100644 regamedll/lib/linux32/libm.so create mode 100644 regamedll/lib/linux32/librt.so create mode 100755 regamedll/version/glibc_test.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..a54b0628e --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,276 @@ +name: C/C++ CI + +on: + push: + branches: [master] + paths-ignore: + - '**.md' + + pull_request: + types: [opened, reopened, synchronize] + release: + types: [published] + +jobs: + windows: + name: 'Windows' + runs-on: windows-latest + + env: + solution: 'msvc/ReGameDLL.sln' + buildPlatform: 'Win32' + buildRelease: 'Release' + buildReleasePlay: 'Release Play' + buildTests: 'Tests' + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Setup Nuget + uses: nuget/setup-nuget@v1 + with: + nuget-api-key: ${{ secrets.NuGetAPIKey }} + nuget-version: '5.x' + + - run: nuget restore '${{ env.solution }}' + + - name: Setup MSBuild + uses: microsoft/setup-msbuild@v1.0.2 + with: + vs-version: '16.8' + + - name: Build and Run unittests + run: | + msbuild ${{ env.solution }} -p:Configuration="${{ env.buildTests }}" /t:Clean,Build /p:Platform=${{ env.buildPlatform }} /p:PlatformToolset=v140_xp /p:XPDeprecationWarning=false + .\"msvc\Tests\mp.exe" + If ($LASTEXITCODE -ne 0 -And + $LASTEXITCODE -ne 3) + {[Environment]::Exit(1)} + shell: "pwsh" + + - name: Build + run: | + msbuild ${{ env.solution }} -p:Configuration="${{ env.buildRelease }}" /t:Clean,Build /p:Platform=${{ env.buildPlatform }} /p:PlatformToolset=v140_xp /p:XPDeprecationWarning=false + msbuild ${{ env.solution }} -p:Configuration="${{ env.buildReleasePlay }}" /t:Clean,Build /p:Platform=${{ env.buildPlatform }} /p:PlatformToolset=v140_xp /p:XPDeprecationWarning=false + + - name: Move files + run: | + mkdir publish\debug + mkdir publish\tests + mkdir publish\bin\win32\cstrike\dlls + move "msvc\${{ env.buildReleasePlay }}\mp.dll" publish\tests\mp.dll + move msvc\${{ env.buildRelease }}\mp.dll publish\bin\win32\cstrike\dlls\mp.dll + move msvc\${{ env.buildRelease }}\mp.pdb publish\debug\mp.pdb + + - name: Deploy artifacts + uses: actions/upload-artifact@v2 + with: + name: win32 + path: publish/* + + testdemos: + name: 'Test demos' + runs-on: ubuntu-latest + container: s1lentq/testdemos:latest + needs: [windows] + + env: + WINEDEBUG: -all + WINEDLLOVERRIDES: mshtml= + + defaults: + run: + shell: bash + working-directory: ../../../opt/HLDS + + steps: + - name: Deploying windows artifacts + uses: actions/download-artifact@v2 + with: + name: win32 + + - name: Play demos + run: | + chown root ~ + cp -r deps/regamedll/* . + mv $GITHUB_WORKSPACE/tests/mp.dll cstrike/dlls/mp.dll + + descs=( + "CS: Testing jumping, scenarios, shooting etc" + ) + + demos=( + "cstrike-basic-1" + ) + + retVal=0 + for i in "${!demos[@]}"; do + params=$(cat "testdemos/${demos[i]}.params") + + echo -e "\e[1m[$((i + 1))/${#demos[@]}] \e[1;36m${descs[i]} testing...\e[0m" + echo -e " - \e[0;33mParameters $params\e[0m" + + wine hlds.exe --rehlds-enable-all-hooks --rehlds-test-play "testdemos/${demos[i]}.bin" $params &> result.log || retVal=$? + + if [ $retVal -ne 777 ] && [ $retVal -ne 9 ]; then + # Print with catchy messages + while read line; do + echo -e " \e[0;33m$line" + done <<< $(cat result.log | sed '0,/demo failed/I!d;/wine:/d;/./,$!d') + + echo " 🔸 🔸 🔸 🔸 🔸 🔸 🔸 🔸 🔸 🔸" + while read line; do + echo -e " \e[1;31m$line"; + done < rehlds_demo_error.txt + echo -e " \e[30;41mExit code: $retVal\e[0m" + echo -e "\e[1m[$((i + 1))/${#demos[@]}] \e[1;36m${descs[i]} testing...\e[1;31m Failed ❌" + exit 6 # Test demo failed + else + # Print result HLDS console + while read line; do + echo -e " \e[0;33m$line" + done <<< $(cat result.log | sed '/wine:/d;/./,$!d') + echo -e " \e[30;43mExit code: $retVal\e[0m" + echo -e "\e[1m[$((i + 1))/${#demos[@]}] \e[1;36m${descs[i]} testing...\e[1;32m Succeed ✔" + fi + done + + linux: + name: 'Linux' + runs-on: ubuntu-latest + container: s1lentq/linux86buildtools:latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + submodules: true + + - name: Build and Run unittests + run: | + rm -rf build && CC=icc CXX=icpc cmake -DCMAKE_BUILD_TYPE=Unittests -B build && cmake --build build -j8 + retVal=0 + ./build/regamedll/cs 2> /dev/null > result.log || retVal=$? + while read line; do + if [[ ${line} == *"Warning in test"* ]] ; then + echo -e "\e[2;38m$line" + elif [[ ${line} == *"Failure in test"* ]] ; then + echo -e "\e[1;31m$line" + else + echo -e "\e[0;33m$line" + fi + done <<< $(cat result.log) + + if [ $retVal -ne 0 ] && [ $retVal -ne 3 ]; then + echo -e "\e[30;41mExit code: $retVal\e[0m" + exit 1 # Unittest failed + else + echo -e "\e[30;43mExit code: $retVal\e[0m" + fi + shell: bash + + - name: Build using Intel C++ Compiler 19.0 + run: | + rm -rf build-icc && CC=icc CXX=icpc cmake -B build-icc && cmake --build build-icc -j8 + + - name: Build using GCC Compiler 9.3 + run: | + rm -rf build-gcc && CC=gcc CXX=g++ cmake -B build-gcc && cmake --build build-gcc -j8 + + - name: Prepare CSSDK + run: | + mkdir -p publish/cssdk + rsync -a regamedll/extra/cssdk/ publish/cssdk/ --exclude=.git --exclude=LICENSE --exclude=README.md + + - name: Move files + run: | + mkdir -p publish/bin/linux32/cstrike/dlls + mv build-icc/regamedll/cs.so publish/bin/linux32/cstrike/dlls/cs.so + mv build-gcc/regamedll/cs.so publish/cs-gcc.so + mv regamedll/version/appversion.h publish/appversion.h + + - name: Run GLIBC/ABI version compat test + run: | + binaries=( + "publish/bin/linux32/cstrike/dlls/cs.so" + "publish/cs-gcc.so" + ) + bash ./regamedll/version/glibc_test.sh ${binaries[@]} + if [[ $? -ne 0 ]]; then + exit 1 # Assertion failed + fi + shell: bash + + - name: Deploy artifacts + uses: actions/upload-artifact@v2 + id: upload-job + with: + name: linux32 + path: publish/* + + - name: Cleanup temporary artifacts + if: success() && steps.upload-job.outcome == 'success' + run: | + rm -rf cssdk + rm -f appversion.h + + publish: + name: 'Publish' + runs-on: ubuntu-latest + needs: [windows, testdemos, linux] + + steps: + - name: Deploying linux artifacts + uses: actions/download-artifact@v2 + with: + name: linux32 + + - name: Deploying windows artifacts + uses: actions/download-artifact@v2 + with: + name: win32 + + - name: Reading appversion.h + run: | + if [ -e appversion.h ]; then + APP_VERSION=$(cat appversion.h | grep -wi '#define APP_VERSION_STRD' | sed -e 's/#define APP_VERSION_STRD[ \t\r\n\v\f]\+\(.*\)/\1/i' -e 's/\r//g') + if [ $? -ne 0 ]; then + APP_VERSION="" + else + # Remove quotes + APP_VERSION=$(echo $APP_VERSION | xargs) + echo "APP_VERSION=${APP_VERSION}" >> $GITHUB_ENV + fi + fi + rm -f appversion.h + + - name: Packaging bin/dbg + id: packaging-job + if: | + github.event_name == 'release' && + github.event.action == 'published' && + startsWith(github.ref, 'refs/tags/') + run: | + 7z a -tzip regamedll-bin-${{ env.APP_VERSION }}.zip bin/ cssdk/ + + - name: Publish artifacts + uses: softprops/action-gh-release@v1 + id: publish-job + if: | + startsWith(github.ref, 'refs/tags/') && + steps.packaging-job.outcome == 'success' + with: + files: | + *.zip + env: + GITHUB_TOKEN: ${{ secrets.API_TOKEN }} + + - name: Cleanup temporary artifacts + if: success() && steps.publish-job.outcome == 'success' + run: | + rm -rf bin debug cssdk + rm -f *.zip appversion.h diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..5fe6d8874 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "regamedll/extra/cssdk"] + path = regamedll/extra/cssdk + url = https://github.com/s1lentq/CSSDK.git \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..e8bfc73d9 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.1) +project(regamedll CXX) + +if (WIN32) + message(FATAL_ERROR "CMakeLists.txt Windows platform isn't supported yet. Use msvc/ReGameDLL.sln instead it!") +endif() + +add_custom_target(appversion DEPENDS + COMMAND "${PROJECT_SOURCE_DIR}/regamedll/version/appversion.sh" "${PROJECT_SOURCE_DIR}" +) + +add_subdirectory(regamedll) diff --git a/README.md b/README.md index 37f44c15f..11f3b0a13 100644 --- a/README.md +++ b/README.md @@ -105,72 +105,81 @@ Archive's bin directory contains 2 subdirectories, 'bugfixed' and 'pure' * Enter `-bots` option at the command line HLDS ## Build instructions -There are several software requirements for building Regamedll_CS: -
    -
  1. Java Development Kit (JDK) 7+ (http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
  2. -
  3. For Windows: Visual Studio 2015 and later
  4. -
  5. For Linux: GCC/Clang/Intel C++ Compiler 15 and later
  6. -
- ### Checking requirements -#### JDK version -Windows
> %JAVA_HOME%\bin\javac -version
-javac 1.8.0_25
+There are several software requirements for building ReGameDLL_CS:
+
+#### Windows
+
+Visual Studio 2013 and later
 
-Linux -
$ javac -version
-javac 1.7.0_65
+#### Linux
+
+git >= 1.8.5
+cmake >= 3.10
+GCC >= 4.9.2 (Optional)
+ICC >= 15.0.1 20141023 (Optional)
+LLVM (Clang) >= 6.0 (Optional)
 
-#### Visual Studio -Help -> About +### Building -#### ICC -
$ icc --version
-icc (ICC) 15.0.1 20141023
-
+#### Windows +Use `Visual Studio` to build, open `msvc/ReGameDLL.sln` and just select from the solution configurations list `Release` or `Debug` -### Building and run unit tests using gradle -#### On Windows: -
gradlew --max-workers=1 clean buildRelease
-* For faster building without unit tests use this:exclamation: -
gradlew --max-workers=1 clean buildFixes
+#### Linux -#### On Linux (ICC): -
./gradlew --max-workers=1 clean buildRelease
+* Optional options using `build.sh --compiler=[gcc] --jobs=[4]` (without square brackets) +
+-c=|--compiler=[icc|gcc|clang]  - Select preferred C/C++ compiler to build
+-j=|--jobs=[N]                  - Specifies the number of jobs (commands) to run simultaneously (For faster building)
+
-* For faster building without unit tests use this:exclamation: -
./gradlew --max-workers=1 clean buildFixes
+* Optional definitions using `build.sh -D[option]=[ON or OFF]` (without square brackets) +
+DEBUG              - Enables debugging mode
+USE_STATIC_LIBSTDC - Enables static linking library libstdc++
+
-#### On Linux (Clang): -
./gradlew --max-workers=1 clean -PuseClang buildRelease
+
    +
  • +ICC: +
    ./build.sh --compiler=intel
    +
  • -* For faster building without unit tests use this:exclamation: -
    ./gradlew --max-workers=1 clean -PuseClang buildFixes
    +
  • +LLVM (Clang): +
    ./build.sh --compiler=clang
    +
  • -#### On Linux (GCC): -
    ./gradlew --max-workers=1 clean -PuseGcc buildRelease
    +
  • +GCC: +
    ./build.sh --compiler=gcc
    +
  • +
-* For faster building without unit tests use this:exclamation: -
./gradlew --max-workers=1 clean -PuseGcc buildFixes
+##### Checking build environment (Debian / Ubuntu) -Compiled binaries will be placed in the build/binaries/ directory +
+Click to expand -### Simplified building using CMake 3.1 and later -#### On Windows: -
Open solution msvc\ReGameDLL.sln and build it
+* Installing required packages +
+sudo dpkg --add-architecture i386
+sudo apt-get update
+sudo apt-get install -y gcc-multilib g++-multilib
+sudo apt-get install -y build-essential
+sudo apt-get install -y libc6-dev libc6-dev-i386
+
-#### On Linux: -* Run script `regamedll/compile.sh` -* Options using `regamedll/compile.sh -D[option]=[ON or OFF]` (without square brackets) +* Select the preferred C/C++ Compiler installation
-DEBUG              - Enables debugging mode
-USE_INTEL_COMPILER - Switch main compiler to ICC
-USE_CLANG_COMPILER - Switch main compiler to Clang
-USE_STATIC_LIBSTDC - Enables static linking library libstdc++
+1) sudo apt-get install -y gcc g++
+2) sudo apt-get install -y clang
 
+
+ ### Credits Thanks to the project [ReHLDS](https://github.com/dreamstalker/rehlds) ( ReGameDLL_CS was created on the basis of ReHLDS ) diff --git a/build.sh b/build.sh new file mode 100755 index 000000000..9b49a8dac --- /dev/null +++ b/build.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +CC=gcc +CXX=g++ + +n=0 +args=() +for i in "$@" +do +case $i in + -j=*|--jobs=*) + jobs="-j${i#*=}" + shift + ;; + -c=*|--compiler=*) + C="${i#*=}" + shift + ;; + *) + args[$n]="$i" + ((++n)) + ;; +esac +done + +case "$C" in + ("intel"|"icc") CC=icc CXX=icpc ;; + ("gcc"|"g++") CC=gcc CXX=g++ ;; + ("clang|llvm") CC=clang CXX=clang++ ;; + *) + ;; +esac + +rm -rf build +mkdir build +pushd build &> /dev/null +CC=$CC CXX=$CXX cmake ${args[@]} .. +make ${jobs} +popd > /dev/null diff --git a/dep/cppunitlite/CMakeLists.txt b/dep/cppunitlite/CMakeLists.txt new file mode 100644 index 000000000..10047e7eb --- /dev/null +++ b/dep/cppunitlite/CMakeLists.txt @@ -0,0 +1,25 @@ +cmake_minimum_required(VERSION 3.1) +project(cppunitlite CXX) + +add_library(cppunitlite STATIC) + +target_sources(cppunitlite PRIVATE + src/Test.cpp + src/TestResult.cpp + src/TestRegistry.cpp + src/Assertions.cpp + src/MainAdapter.cpp +) + +target_include_directories(cppunitlite PRIVATE + "${PROJECT_SOURCE_DIR}/src" + "${PROJECT_SOURCE_DIR}/include" +) + +target_compile_definitions(cppunitlite PRIVATE + _GLIBCXX_USE_CXX11_ABI=0 +) + +target_compile_options(cppunitlite PRIVATE + -m32 +) diff --git a/regamedll/CMakeLists.txt b/regamedll/CMakeLists.txt index c357185bb..3bee15750 100644 --- a/regamedll/CMakeLists.txt +++ b/regamedll/CMakeLists.txt @@ -1,70 +1,105 @@ +#---------------------------------------- +# 1. Preparing build: +# rm -rf build +# mkdir build && cd build +# +# 2. Select compiler and build it +# - Compile with Clang: +# CC="clang" CXX="clang++" cmake .. +# make +# +# - Compile with Intel C++ Compiler: +# CC="icc" CXX="icpc" cmake .. +# make +# +# - Compile with GCC Compiler: +# cmake .. +# make +#---------------------------------------- + cmake_minimum_required(VERSION 3.1) project(regamedll CXX) -option(DEBUG "Build debug application." OFF) -option(USE_INTEL_COMPILER "Use the Intel compiler." OFF) -option(USE_CLANG_COMPILER "Use the Clang compiler." OFF) +option(DEBUG "Build with debug information." OFF) option(USE_STATIC_LIBSTDC "Enables static linking libstdc++." OFF) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) -if (USE_INTEL_COMPILER) - set(CMAKE_C_COMPILER "/opt/intel/bin/icc") - set(CMAKE_CXX_COMPILER "/opt/intel/bin/icpc") -elseif (USE_CLANG_COMPILER) - set(CMAKE_C_COMPILER "/usr/bin/clang") - set(CMAKE_CXX_COMPILER "/usr/bin/clang++") -endif() +# Avoid -rdynamic -fPIC options +set(CMAKE_SHARED_LIBRARY_CXX_FLAGS "") +set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions") +set(COMPILE_FLAGS "-m32 -U_FORTIFY_SOURCE") +set(LINK_FLAGS "-m32 -s") -if (USE_INTEL_COMPILER OR USE_CLANG_COMPILER) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fasm-blocks") -endif() +set(COMPILE_FLAGS "${COMPILE_FLAGS} -Wall -fno-exceptions -fno-builtin -Wno-unknown-pragmas") + +# Remove noxref code and data +set(COMPILE_FLAGS "${COMPILE_FLAGS} -ffunction-sections -fdata-sections") if (DEBUG) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3 -ggdb -O3 -Wall -ffunction-sections -fdata-sections") + set(COMPILE_FLAGS "${COMPILE_FLAGS} -g3 -O3 -ggdb") else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g0 -O3 -fno-rtti -ffunction-sections -fdata-sections") + set(COMPILE_FLAGS "${COMPILE_FLAGS} -g0 -O3 -fno-stack-protector") endif() -if (USE_INTEL_COMPILER) - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -static-intel -no-intel-extensions") +# Check Intel C++ compiler +if ("$ENV{CXX}" MATCHES "icpc") + # -fp-model=precise + # ICC uses -fp-model fast=1 by default for more aggressive optimizations on floating-point calculations + # https://software.intel.com/content/www/us/en/develop/documentation/cpp-compiler-developer-guide-and-reference/top/compiler-reference/compiler-options/compiler-option-details/floating-point-options/fp-model-fp.html#fp-model-fp_GUID-99936BBA-1508-4E9F-AC09-FA98613CE2F5 + set(COMPILE_FLAGS "${COMPILE_FLAGS} \ + -fp-model=precise\ + -fasm-blocks\ + -Qoption,cpp,--treat_func_as_string_literal_cpp") + + set(LINK_FLAGS "${LINK_FLAGS} -static-intel -no-intel-extensions") + + if (NOT DEBUG) + set(COMPILE_FLAGS "${COMPILE_FLAGS} -ipo") + set(LINK_FLAGS "${LINK_FLAGS} -ipo") + endif() else() - ## Produce code optimized for the most common IA32/AMD64/EM64T processors. - ## As new processors are deployed in the marketplace, the behavior of this option will change. - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}\ + # Produce code optimized for the most common IA32/AMD64/EM64T processors. + # As new processors are deployed in the marketplace, the behavior of this option will change. + set(COMPILE_FLAGS "${COMPILE_FLAGS} \ -mtune=generic -msse3\ - -Wno-write-strings -Wno-invalid-offsetof\ - -Wno-unused-variable -Wno-unused-function\ - -Wno-unused-result -Wno-invalid-offsetof\ - -fpermissive -Wno-switch -Wno-enum-compare\ - -Wno-unknown-pragmas -Wno-unused-value") - - if (USE_CLANG_COMPILER) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}\ + -fpermissive -fno-sized-deallocation\ + -Wno-delete-non-virtual-dtor -Wno-invalid-offsetof\ + -Wno-unused-variable -Wno-unused-value -Wno-unused-result -Wno-unused-function\ + -Wno-write-strings -Wno-switch -Wno-enum-compare\ + -Wno-sign-compare -Wno-format -Wno-ignored-attributes -Wno-strict-aliasing") + + # Check Clang compiler + if ("$ENV{CXX}" MATCHES "clang") + set(COMPILE_FLAGS "${COMPILE_FLAGS} \ -Wno-unused-local-typedef\ -Wno-unused-private-field\ -fno-strict-vtable-pointers\ -Wno-overloaded-virtual") else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}\ + set(COMPILE_FLAGS "${COMPILE_FLAGS} \ + -fno-plt\ + -fno-devirtualize\ -Wno-unused-local-typedefs\ - -Wno-sign-compare\ - -Wno-strict-aliasing\ - -Wno-unused-but-set-variable\ - -fno-devirtualize") + -Wno-unused-but-set-variable") + + # GCC >= 8.3 + if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0) + set(COMPILE_FLAGS "${COMPILE_FLAGS} -Wno-stringop-truncation -Wno-format-truncation -Wno-class-memaccess") + endif() endif() endif() -if (NOT DEBUG AND USE_STATIC_LIBSTDC) - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-gc-sections -Wl,--version-script=\"${PROJECT_SOURCE_DIR}/../version_script.lds\"") +# GCC >= 8.3 +if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0) + set(COMPILE_FLAGS "${COMPILE_FLAGS} -fcf-protection=none") endif() -if (USE_STATIC_LIBSTDC) - add_definitions(-DBUILD_STATIC_LIBSTDC) - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -static-libgcc -static-libstdc++") +if (NOT DEBUG) + set(LINK_FLAGS "${LINK_FLAGS} \ + -Wl,-gc-sections -Wl,--version-script=\"${PROJECT_SOURCE_DIR}/../version_script.lds\"") endif() set(PROJECT_SRC_DIR @@ -75,6 +110,11 @@ set(PROJECT_SRC_DIR "${PROJECT_SOURCE_DIR}/game_shared" "${PROJECT_SOURCE_DIR}/pm_shared" "${PROJECT_SOURCE_DIR}/regamedll" + "${PROJECT_SOURCE_DIR}/unittests" +) + +set(PROJECT_CPPUNITLITE_DIR + "${PROJECT_SOURCE_DIR}/../dep/cppunitlite/include" ) set(PROJECT_PUBLIC_DIR @@ -86,63 +126,244 @@ set(ENGINE_SRCS "engine/unicode_strtools.cpp" ) -file(GLOB SHARED_SRCS - "game_shared/bot/*.cpp" - "game_shared/*.cpp" - "pm_shared/*.cpp" - "regamedll/*.cpp" +set(SHARED_SRCS + "game_shared/shared_util.cpp" + "game_shared/voice_gamemgr.cpp" + "game_shared/bot/bot.cpp" + "game_shared/bot/bot_manager.cpp" + "game_shared/bot/bot_profile.cpp" + "game_shared/bot/bot_util.cpp" + "game_shared/bot/nav_area.cpp" + "game_shared/bot/nav_file.cpp" + "game_shared/bot/nav_node.cpp" + "game_shared/bot/nav_path.cpp" + "pm_shared/pm_debug.cpp" + "pm_shared/pm_math.cpp" + "pm_shared/pm_shared.cpp" + "regamedll/regamedll.cpp" + "regamedll/precompiled.cpp" + "regamedll/public_amalgamation.cpp" + "regamedll/hookchains_impl.cpp" + "regamedll/sse_mathfun.cpp" "public/FileSystem.cpp" "public/interface.cpp" "public/MemPool.cpp" - "version/version.cpp" ) -list(REMOVE_ITEM SHARED_SRCS EXCLUDE "${PROJECT_SOURCE_DIR}/regamedll/classes_dummy.cpp") - -file(GLOB GAMEDLL_SRCS - "dlls/*.cpp" - "dlls/API/*.cpp" - "dlls/addons/*.cpp" - "dlls/wpn_shared/*.cpp" - "dlls/bot/*.cpp" - "dlls/bot/states/*.cpp" - "dlls/hostage/*.cpp" - "dlls/hostage/states/*.cpp" +set(GAMEDLL_SRCS + "dlls/airtank.cpp" + "dlls/ammo.cpp" + "dlls/animating.cpp" + "dlls/animation.cpp" + "dlls/basemonster.cpp" + "dlls/bmodels.cpp" + "dlls/buttons.cpp" + "dlls/career_tasks.cpp" + "dlls/cbase.cpp" + "dlls/client.cpp" + "dlls/cmdhandler.cpp" + "dlls/combat.cpp" + "dlls/debug.cpp" + "dlls/doors.cpp" + "dlls/effects.cpp" + "dlls/explode.cpp" + "dlls/func_break.cpp" + "dlls/func_tank.cpp" + "dlls/game.cpp" + "dlls/gamerules.cpp" + "dlls/ggrenade.cpp" + "dlls/gib.cpp" + "dlls/globals.cpp" + "dlls/h_battery.cpp" + "dlls/h_cycler.cpp" + "dlls/h_export.cpp" + "dlls/healthkit.cpp" + "dlls/hintmessage.cpp" + "dlls/items.cpp" + "dlls/lights.cpp" + "dlls/mapinfo.cpp" + "dlls/maprules.cpp" + "dlls/mortar.cpp" + "dlls/multiplay_gamerules.cpp" + "dlls/observer.cpp" + "dlls/pathcorner.cpp" + "dlls/plats.cpp" + "dlls/player.cpp" + "dlls/revert_saved.cpp" + "dlls/saverestore.cpp" + "dlls/singleplay_gamerules.cpp" + "dlls/skill.cpp" + "dlls/sound.cpp" + "dlls/soundent.cpp" + "dlls/spectator.cpp" + "dlls/subs.cpp" + "dlls/training_gamerules.cpp" + "dlls/triggers.cpp" + "dlls/tutor.cpp" + "dlls/tutor_base_states.cpp" + "dlls/tutor_base_tutor.cpp" + "dlls/tutor_cs_states.cpp" + "dlls/tutor_cs_tutor.cpp" + "dlls/util.cpp" + "dlls/vehicle.cpp" + "dlls/weapons.cpp" + "dlls/weapontype.cpp" + "dlls/world.cpp" + "dlls/API/CAPI_Impl.cpp" + "dlls/API/CSEntity.cpp" + "dlls/API/CSPlayer.cpp" + "dlls/API/CSPlayerItem.cpp" + "dlls/addons/item_airbox.cpp" + "dlls/addons/point_command.cpp" + "dlls/addons/trigger_random.cpp" + "dlls/addons/trigger_setorigin.cpp" + "dlls/wpn_shared/wpn_ak47.cpp" + "dlls/wpn_shared/wpn_aug.cpp" + "dlls/wpn_shared/wpn_awp.cpp" + "dlls/wpn_shared/wpn_c4.cpp" + "dlls/wpn_shared/wpn_deagle.cpp" + "dlls/wpn_shared/wpn_elite.cpp" + "dlls/wpn_shared/wpn_famas.cpp" + "dlls/wpn_shared/wpn_fiveseven.cpp" + "dlls/wpn_shared/wpn_flashbang.cpp" + "dlls/wpn_shared/wpn_g3sg1.cpp" + "dlls/wpn_shared/wpn_galil.cpp" + "dlls/wpn_shared/wpn_glock18.cpp" + "dlls/wpn_shared/wpn_hegrenade.cpp" + "dlls/wpn_shared/wpn_knife.cpp" + "dlls/wpn_shared/wpn_m3.cpp" + "dlls/wpn_shared/wpn_m4a1.cpp" + "dlls/wpn_shared/wpn_m249.cpp" + "dlls/wpn_shared/wpn_mac10.cpp" + "dlls/wpn_shared/wpn_mp5navy.cpp" + "dlls/wpn_shared/wpn_p90.cpp" + "dlls/wpn_shared/wpn_p228.cpp" + "dlls/wpn_shared/wpn_scout.cpp" + "dlls/wpn_shared/wpn_sg550.cpp" + "dlls/wpn_shared/wpn_sg552.cpp" + "dlls/wpn_shared/wpn_smokegrenade.cpp" + "dlls/wpn_shared/wpn_tmp.cpp" + "dlls/wpn_shared/wpn_ump45.cpp" + "dlls/wpn_shared/wpn_usp.cpp" + "dlls/wpn_shared/wpn_xm1014.cpp" + "dlls/bot/cs_bot.cpp" + "dlls/bot/cs_bot_chatter.cpp" + "dlls/bot/cs_bot_event.cpp" + "dlls/bot/cs_bot_init.cpp" + "dlls/bot/cs_bot_learn.cpp" + "dlls/bot/cs_bot_listen.cpp" + "dlls/bot/cs_bot_manager.cpp" + "dlls/bot/cs_bot_nav.cpp" + "dlls/bot/cs_bot_pathfind.cpp" + "dlls/bot/cs_bot_radio.cpp" + "dlls/bot/cs_bot_statemachine.cpp" + "dlls/bot/cs_bot_update.cpp" + "dlls/bot/cs_bot_vision.cpp" + "dlls/bot/cs_bot_weapon.cpp" + "dlls/bot/cs_gamestate.cpp" + "dlls/bot/states/cs_bot_attack.cpp" + "dlls/bot/states/cs_bot_buy.cpp" + "dlls/bot/states/cs_bot_defuse_bomb.cpp" + "dlls/bot/states/cs_bot_escape_from_bomb.cpp" + "dlls/bot/states/cs_bot_fetch_bomb.cpp" + "dlls/bot/states/cs_bot_follow.cpp" + "dlls/bot/states/cs_bot_hide.cpp" + "dlls/bot/states/cs_bot_hunt.cpp" + "dlls/bot/states/cs_bot_idle.cpp" + "dlls/bot/states/cs_bot_investigate_noise.cpp" + "dlls/bot/states/cs_bot_move_to.cpp" + "dlls/bot/states/cs_bot_plant_bomb.cpp" + "dlls/bot/states/cs_bot_use_entity.cpp" + "dlls/hostage/hostage.cpp" + "dlls/hostage/hostage_improv.cpp" + "dlls/hostage/hostage_localnav.cpp" + "dlls/hostage/states/hostage_animate.cpp" + "dlls/hostage/states/hostage_escape.cpp" + "dlls/hostage/states/hostage_follow.cpp" + "dlls/hostage/states/hostage_idle.cpp" + "dlls/hostage/states/hostage_retreat.cpp" +) + +set(UNITTESTS_SRCS + "unittests/animation_tests.cpp" + "unittests/struct_offsets_tests.cpp" + "unittests/TestRunner.cpp" ) -include_directories( +if (CMAKE_BUILD_TYPE MATCHES Unittests) + if (NOT TARGET cppunitlite) + add_subdirectory(../dep/cppunitlite cppunitlite) + endif() + + set(LINK_FLAGS "${LINK_FLAGS} -no-pie -Wl,--no-export-dynamic") + add_executable(regamedll ${appversion.sh}) + target_link_libraries(regamedll PRIVATE cppunitlite) +else() + add_library(regamedll SHARED ${appversion.sh}) +endif() + +if (NOT TARGET appversion) + add_custom_target(appversion DEPENDS COMMAND "${PROJECT_SOURCE_DIR}/version/appversion.sh" "${PROJECT_SOURCE_DIR}/..") +endif() + +add_dependencies(regamedll appversion) + +target_include_directories(regamedll PRIVATE ${PROJECT_SRC_DIR} + ${PROJECT_CPPUNITLITE_DIR} ${PROJECT_PUBLIC_DIR} ) -link_directories(${PROJECT_SOURCE_DIR}/lib/linux32) - -add_definitions( - -DREGAMEDLL_FIXES - -DBUILD_LATEST - -DREGAMEDLL_ADD - -DREGAMEDLL_API - -DUNICODE_FIXES - -DCLIENT_WEAPONS - -DUSE_QSTRING - -DGNUC - -DPOSIX - -D_LINUX - -DLINUX - -D_stricmp=strcasecmp - -D_strnicmp=strncasecmp - -D_strdup=strdup - -D_unlink=unlink - -D_vsnprintf=vsnprintf - -D_write=write - -D_close=close - -D_access=access - -D_vsnwprintf=vswprintf +target_compile_definitions(regamedll PRIVATE + REGAMEDLL_FIXES + REGAMEDLL_API + REGAMEDLL_ADD + UNICODE_FIXES + BUILD_LATEST + CLIENT_WEAPONS + USE_QSTRING + _LINUX + LINUX + NDEBUG + _GLIBCXX_USE_CXX11_ABI=0 + _stricmp=strcasecmp + _strnicmp=strncasecmp + _strdup=strdup + _unlink=unlink + _vsnprintf=vsnprintf + _write=write + _close=close + _access=access + _vsnwprintf=vswprintf ) -add_library(regamedll SHARED ${appversion.sh} ${GAMEDLL_SRCS} ${ENGINE_SRCS} ${SHARED_SRCS}) -set_property(TARGET regamedll PROPERTY LIBRARY_OUTPUT_NAME cs) -add_custom_target(appversion DEPENDS COMMAND "${PROJECT_SOURCE_DIR}/version/appversion.sh" "${PROJECT_SOURCE_DIR}") -set_target_properties(regamedll PROPERTIES PREFIX "" COMPILE_FLAGS "-m32" LINK_FLAGS "-m32" POSITION_INDEPENDENT_CODE ON) -target_link_libraries(regamedll dl aelf32) -add_dependencies(regamedll appversion) +target_sources(regamedll PRIVATE + ${GAMEDLL_SRCS} + ${ENGINE_SRCS} + ${SHARED_SRCS} + + $<$: + ${UNITTESTS_SRCS}> +) + +target_link_libraries(regamedll PRIVATE + dl + aelf32 +) + +if (USE_STATIC_LIBSTDC) + target_compile_definitions(regamedll PRIVATE BUILD_STATIC_LIBSTDC) + set(LINK_FLAGS "${LINK_FLAGS} -static-libgcc -static-libstdc++") +endif() + +set(LINK_FLAGS "${LINK_FLAGS} \ + -Wl,-rpath,'$ORIGIN/.' \ + -L${PROJECT_SOURCE_DIR}/lib/linux32") + +set_target_properties(regamedll PROPERTIES + OUTPUT_NAME cs + PREFIX "" + COMPILE_FLAGS ${COMPILE_FLAGS} + LINK_FLAGS ${LINK_FLAGS} + POSITION_INDEPENDENT_CODE OFF +) diff --git a/regamedll/common/stdc++compat.cpp b/regamedll/common/stdc++compat.cpp index 27dc579ed..1937b9b3a 100644 --- a/regamedll/common/stdc++compat.cpp +++ b/regamedll/common/stdc++compat.cpp @@ -1,15 +1,23 @@ #include +#include -#if !defined(_WIN32) -void NORETURN Sys_Error(const char *error, ...); +#if !defined(_WIN32) && !defined(BUILD_STATIC_LIBSTDC) // if build with static libstdc++ then ignore // This file adds the necessary compatibility tricks to avoid symbols with // version GLIBCXX_3.4.16 and bigger, keeping binary compatibility with libstdc++ 4.6.1. namespace std { + +#if __cpp_exceptions + logic_error::logic_error(const char *__arg) : exception(), _M_msg(__arg) {} + out_of_range::out_of_range(const char *__arg) : logic_error(__arg) {} + out_of_range::~out_of_range() _GLIBCXX_USE_NOEXCEPT {} +#endif // #if __cpp_exceptions + // We shouldn't be throwing exceptions at all, but it sadly turns out we call STL (inline) functions that do. void __throw_out_of_range_fmt(const char *fmt, ...) { + #if __cpp_exceptions va_list ap; char buf[1024]; // That should be big enough. @@ -18,34 +26,42 @@ namespace std buf[sizeof(buf) - 1] = '\0'; va_end(ap); - Sys_Error(buf); + throw std::out_of_range(buf); + #else + abort(); + #endif } }; // namespace std -// Technically, this symbol is not in GLIBCXX_3.4.20, but in CXXABI_1.3.8, -// but that's equivalent, version-wise. Those calls are added by the compiler +// Was added in GCC 4.9 +// Technically, this symbol is not in GLIBCXX_3.4.20, but in CXXABI_1.3.8, but that's equivalent, version-wise. +// Those calls are added by the compiler // itself on `new Class[n]` calls. extern "C" void __cxa_throw_bad_array_new_length() { - Sys_Error("Bad array new length."); +#if __cpp_exceptions + throw std::bad_array_new_length(); +#else + abort(); +#endif } -#if __cplusplus >= 201402L +#if defined(__INTEL_COMPILER) && __cplusplus >= 201402L // This operator delete sized deallocations was added in c++14 // and required at least not less than CXXABI_1.3.9 // we should to keep CXXABI_1.3.8 for binary compatibility with oldest libstdc++. -// G++ and clang allow to compile C++14 code with -fno-sized-deallocation to disable the new feature, +// GCC and Clang allow to compile C++14 code with -fno-sized-deallocation to disable the new feature, but ICC isn't allow // so that our C++14 library code would never call that version of operator delete, -// for other compilers we must override those operators for static linking to the library. +// for ICC compiler we must override those operators for static linking to the library. void operator delete[](void *ptr, std::size_t size) noexcept { - ::operator delete(ptr); + ::operator delete(ptr); } void operator delete(void *ptr, std::size_t size) noexcept { - ::operator delete(ptr); + ::operator delete(ptr); } #endif diff --git a/regamedll/compile.sh b/regamedll/compile.sh deleted file mode 100755 index c75a2eedd..000000000 --- a/regamedll/compile.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -rm -rf build -mkdir build -cd build -cmake ../ $* -make diff --git a/regamedll/dlls/bot/cs_bot_learn.cpp b/regamedll/dlls/bot/cs_bot_learn.cpp index 63e6db28c..bb6df51d2 100644 --- a/regamedll/dlls/bot/cs_bot_learn.cpp +++ b/regamedll/dlls/bot/cs_bot_learn.cpp @@ -489,14 +489,14 @@ void CCSBot::UpdateSaveProcess() HintMessageToAllPlayers("Saving..."); SaveNavigationMap(filename); - Q_sprintf(msg, "Navigation file '%s' saved.", filename); + Q_snprintf(msg, sizeof(msg), "Navigation file '%s' saved.", filename); HintMessageToAllPlayers(msg); hideProgressMeter(); StartNormalProcess(); #ifndef REGAMEDLL_FIXES - Q_sprintf(cmd, "map %s\n", STRING(gpGlobals->mapname)); + Q_snprintf(cmd, sizeof(cmd), "map %s\n", STRING(gpGlobals->mapname)); #else Q_snprintf(cmd, sizeof(cmd), "changelevel %s\n", STRING(gpGlobals->mapname)); #endif diff --git a/regamedll/engine/unicode_strtools.cpp b/regamedll/engine/unicode_strtools.cpp index d19c92f0d..e7e113ba6 100644 --- a/regamedll/engine/unicode_strtools.cpp +++ b/regamedll/engine/unicode_strtools.cpp @@ -748,7 +748,7 @@ int Q_UnicodeConvertT(const SrcType *pIn, int nInChars, DstType *pOut, int nOutB { while (bStopAtNull ? (*pIn) : (nInChars-- > 0)) { - uchar32 uVal; + uchar32 uVal = '?'; bool bErr = false; // Initialize in order to avoid /analyze warnings. pIn += DecodeSrc(pIn, uVal, bErr); @@ -782,7 +782,7 @@ int Q_UnicodeConvertT(const SrcType *pIn, int nInChars, DstType *pOut, int nOutB int nMaxOut = nOutElems - 1; // print symbols count while (bStopAtNull ? (*pIn) : (nInChars-- > 0)) { - uchar32 uVal; + uchar32 uVal = '?'; bool bErr = false; // Initialize in order to avoid /analyze warnings. pIn += DecodeSrc(pIn, uVal, bErr); diff --git a/regamedll/lib/linux32/libm.so b/regamedll/lib/linux32/libm.so new file mode 100644 index 0000000000000000000000000000000000000000..b0430eb9f08e60805008d80a77b8fcee80500197 GIT binary patch literal 149392 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

o@ZYRHs46zUfAi^BW#aAm*e4FWJ!ciS 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�@To#%cB5oaLecsg58iV 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 10#${ver2[i]})) + then + return 1 + fi + + if ((10#${ver1[i]} < 10#${ver2[i]})) + then + break + fi + done + + return 0 +} + +# Initialize +main $* + +# Exit normally +exit 0