build.sh and cmake plugin code cleanup (#2953)

* Refactor build.sh. Restructure finding plugins. Remove legacy code. Add --clean-plugins option. Document --no-trans option.

Don't do setcap if dev9ghzdrk isn't being built. List dependencies if they are missing. Remove code related to zerospu2, and misc plugins we aren't building. Minor message changes.
This commit is contained in:
arcum42 2019-07-04 19:49:11 -07:00 committed by GitHub
parent 7054450348
commit fc35de02f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 250 additions and 201 deletions

289
build.sh
View File

@ -16,24 +16,10 @@
#set -e # This terminates the script in case of any error
flags="-DCMAKE_BUILD_PO=FALSE"
cleanBuild=0
useClang=0
useIcc=0
# 0 => no, 1 => yes, 2 => force yes
useCross=2
CoverityBuild=0
cppcheck=0
clangTidy=0
root=$PWD/$(dirname "$0")
log="$root/install_log.txt"
build="$root/build"
coverity_dir="cov-int"
coverity_result=pcsx2-coverity.xz
if [ "$(uname -s)" = 'Darwin' ]; then
# Function declarations
set_ncpu_toolfile()
{
if [ "$(uname -s)" = 'Darwin' ]; then
ncpu="$(sysctl -n hw.ncpu)"
# Get the major Darwin/OSX version.
@ -44,23 +30,170 @@ if [ "$(uname -s)" = 'Darwin' ]; then
echo "Using Mavericks build with C++11 support."
toolfile=cmake/darwin13-compiler-i386-clang.cmake
fi
elif [ "$(uname -s)" = 'FreeBSD' ]; then
elif [ "$(uname -s)" = 'FreeBSD' ]; then
ncpu="$(sysctl -n hw.ncpu)"
else
else
ncpu=$(grep -w -c processor /proc/cpuinfo)
toolfile=cmake/linux-compiler-i386-multilib.cmake
fi
fi
}
if command -v ninja >/dev/null ; then
switch_wxconfig()
{
# Helper to easily switch wx-config on my system
if [ "$useCross" -eq 0 ] && [ "$(uname -m)" = "x86_64" ] && [ -e "/usr/lib/i386-linux-gnu/wx/config/gtk2-unicode-3.0" ]; then
sudo update-alternatives --set wx-config /usr/lib/x86_64-linux-gnu/wx/config/gtk2-unicode-3.0
fi
if [ "$useCross" -eq 2 ] && [ "$(uname -m)" = "x86_64" ] && [ -e "/usr/lib/x86_64-linux-gnu/wx/config/gtk2-unicode-3.0" ]; then
sudo update-alternatives --set wx-config /usr/lib/i386-linux-gnu/wx/config/gtk2-unicode-3.0
fi
}
find_freetype()
{
if [ "$useCross" -eq 0 ] && [ "$(uname -m)" = "x86_64" ] && [ -e "/usr/include/x86_64-linux-gnu/freetype2/ft2build.h" ]; then
export GTKMM_BASEPATH=/usr/include/x86_64-linux-gnu/freetype2
fi
if [ "$useCross" -eq 2 ] && [ "$(uname -m)" = "x86_64" ] && [ -e "/usr/include/i386-linux-gnu/freetype2/ft2build.h" ]; then
export GTKMM_BASEPATH=/usr/include/i386-linux-gnu/freetype2
fi
}
set_make()
{
if command -v ninja >/dev/null ; then
flags="$flags -GNinja"
make=ninja
else
else
make="make -j$ncpu"
fi
fi
}
set_compiler()
{
if [ "$useClang" -eq 1 ]; then
if [ "$useCross" -eq 0 ]; then
CC=clang CXX=clang++ cmake $flags "$root" 2>&1 | tee -a "$log"
else
CC="clang -m32" CXX="clang++ -m32" cmake $flags "$root" 2>&1 | tee -a "$log"
fi
else
if [ "$useIcc" -eq 1 ]; then
if [ "$useCross" -eq 0 ]; then
CC="icc" CXX="icpc" cmake $flags "$root" 2>&1 | tee -a "$log"
else
CC="icc -m32" CXX="icpc -m32" cmake $flags "$root" 2>&1 | tee -a "$log"
fi
else
# Default compiler AKA GCC
cmake $flags "$root" 2>&1 | tee -a "$log"
fi
fi
}
run_cppcheck()
{
summary=cpp_check_summary.log
rm -f $summary
touch $summary
define=""
for undef in _WINDOWS _M_AMD64 _MSC_VER WIN32 __INTEL_COMPILER __x86_64__ \
__SSE4_1__ __SSSE3__ __SSE__ __AVX2__ __USE_ISOC11 ASAN_WORKAROUND ENABLE_OPENCL ENABLE_OGL_DEBUG \
XBYAK_USE_MMAP_ALLOCATOR MAP_ANONYMOUS MAP_ANON XBYAK_DISABLE_AVX512
do
define="$define -U$undef"
done
check="--enable=warning,style,missingInclude"
for d in pcsx2 common plugins/GSdx plugins/spu2\-x plugins/onepad plugins/cdvdGigaherz
do
flat_d=$(echo $d | sed -e 's@/@_@')
log=cpp_check__${flat_d}.log
rm -f "$log"
cppcheck $check -j $ncpu --platform=unix32 $define "$root/$d" 2>&1 | tee "$log"
# Create a small summary (warning it might miss some issues)
fgrep -e "(warning)" -e "(error)" -e "(style)" -e "(performance)" -e "(portability)" "$log" >> $summary
done
exit 0
}
run_clangtidy()
{
compile_json=compile_commands.json
cpp_list=cpp_file.txt
summary=clang_tidy_summary.txt
grep '"file"' $compile_json | sed -e 's/"//g' -e 's/^\s*file\s*:\s*//' | grep -v "aVUzerorec.S" | sort -u > $cpp_list
# EXAMPLE
#
# Modernize loop syntax, fix if old style found.
# $ clang-tidy -p build_dev/compile_commands.json plugins/GSdx/GSTextureCache.cpp -checks='modernize-loop-convert' -fix
# Check all, tons of output:
# $ clang-tidy -p $compile_json $cpp -checks='*' -header-filter='.*'
# List of modernize checks:
# modernize-loop-convert
# modernize-make-unique
# modernize-pass-by-value
# modernize-redundant-void-arg
# modernize-replace-auto-ptr
# modernize-shrink-to-fit
# modernize-use-auto
# modernize-use-default
# modernize-use-nullptr
# modernize-use-override
# Don't check headers, don't check google/llvm coding conventions
if command -v parallel >/dev/null ; then
# Run clang-tidy in parallel with as many jobs as there are CPUs.
parallel -v --keep-order "clang-tidy -p $compile_json -checks='*,-llvm-*,-google-*' {}"
else
# xargs(1) can also run jobs in parallel with -P, but will mix the
# output from the distinct processes together willy-nilly.
xargs clang-tidy -p $compile_json -checks='*,-llvm-*,-google-*'
fi < $cpp_list > $summary
exit 0
}
run_coverity()
{
cov-build --dir "$coverity_dir" $make 2>&1 | tee -a "$log"
# Warning: $coverity_dir must be the root directory
(cd "$build"; tar caf $coverity_result "$coverity_dir")
exit 0
}
# Main script
flags="-DCMAKE_BUILD_PO=FALSE"
cleanBuild=0
useClang=0
useIcc=0
# 0 => no, 1 => yes, 2 => force yes
useCross=2
CoverityBuild=0
cppcheck=0
clangTidy=0
root=$PWD/$(dirname "$0")
log="$root/install_log.txt"
build="$root/build"
coverity_dir="cov-int"
coverity_result=pcsx2-coverity.xz
set_ncpu_toolfile
set_make
for ARG in "$@"; do
case "$ARG" in
--clean ) cleanBuild=1 ;;
--clean-plugins ) cleanBuild=2 ;;
--clang-tidy ) flags="$flags -DCMAKE_EXPORT_COMPILE_COMMANDS=ON"; clangTidy=1 ; useClang=1;;
--clang ) useClang=1 ;;
--intel ) useIcc=1 ;;
@ -97,6 +230,7 @@ for ARG in "$@"; do
echo "--release : Build PCSX2 as a Release build."
echo
echo "--clean : Do a clean build."
echo "--clean-plugins : Do a clean build of plugins, but not of pcsx2."
echo "--extra : Build all plugins"
echo "--no-simd : Only allow sse2"
echo
@ -110,7 +244,8 @@ for ARG in "$@"; do
echo
echo "** Expert Developer option **"
echo "--gtk3 : replace GTK2 by GTK3"
echo "--no-cross-multilib: Build a native PCSX2"
echo "--no-cross-multilib: Build a native PCSX2 (nonfunctional recompiler)"
echo "--no-trans : Don't regenerate mo files when building."
echo "--clang : Build with Clang/llvm"
echo "--intel : Build with ICC (Intel compiler)"
echo "--lto : Use Link Time Optimization"
@ -132,6 +267,9 @@ if [ "$cleanBuild" -eq 1 ]; then
echo "Doing a clean build."
# allow to keep build as a symlink (for example to a ramdisk)
rm -fr "$build"/*
elif [ "$cleanBuild" -eq 2 ]; then
echo "Doing a clean build on the plugins, but not pcsx2."
rm -fr "$build"/plugins/*
fi
if [ "$useCross" -eq 2 ] && [ "$(getconf LONG_BIT 2> /dev/null)" != 32 ]; then
@ -141,20 +279,10 @@ elif [ "$useCross" -ne 1 ]; then
useCross=0
fi
# Helper to easily switch wx-config on my system
if [ "$useCross" -eq 0 ] && [ "$(uname -m)" = "x86_64" ] && [ -e "/usr/lib/i386-linux-gnu/wx/config/gtk2-unicode-3.0" ]; then
sudo update-alternatives --set wx-config /usr/lib/x86_64-linux-gnu/wx/config/gtk2-unicode-3.0
fi
if [ "$useCross" -eq 2 ] && [ "$(uname -m)" = "x86_64" ] && [ -e "/usr/lib/x86_64-linux-gnu/wx/config/gtk2-unicode-3.0" ]; then
sudo update-alternatives --set wx-config /usr/lib/i386-linux-gnu/wx/config/gtk2-unicode-3.0
fi
switch_wxconfig
# Workaround for Debian. Cmake failed to find freetype include path
if [ "$useCross" -eq 0 ] && [ "$(uname -m)" = "x86_64" ] && [ -e "/usr/include/x86_64-linux-gnu/freetype2/ft2build.h" ]; then
export GTKMM_BASEPATH=/usr/include/x86_64-linux-gnu/freetype2
fi
if [ "$useCross" -eq 2 ] && [ "$(uname -m)" = "x86_64" ] && [ -e "/usr/include/i386-linux-gnu/freetype2/ft2build.h" ]; then
export GTKMM_BASEPATH=/usr/include/i386-linux-gnu/freetype2
fi
find_freetype
echo "Building pcsx2 with $flags" | tee "$log"
@ -168,104 +296,27 @@ mkdir -p "$build"
# Cmake will generate file inside $CWD. It would be nicer if an option to cmake can be provided.
cd "$build"
if [ "$useClang" -eq 1 ]; then
if [ "$useCross" -eq 0 ]; then
CC=clang CXX=clang++ cmake $flags "$root" 2>&1 | tee -a "$log"
else
CC="clang -m32" CXX="clang++ -m32" cmake $flags "$root" 2>&1 | tee -a "$log"
fi
else
if [ "$useIcc" -eq 1 ]; then
if [ "$useCross" -eq 0 ]; then
CC="icc" CXX="icpc" cmake $flags "$root" 2>&1 | tee -a "$log"
else
CC="icc -m32" CXX="icpc -m32" cmake $flags "$root" 2>&1 | tee -a "$log"
fi
else
# Default compiler AKA GCC
cmake $flags "$root" 2>&1 | tee -a "$log"
fi
fi
set_compiler
############################################################
# CPP check build
############################################################
if [ "$cppcheck" -eq 1 ] && command -v cppcheck >/dev/null ; then
summary=cpp_check_summary.log
rm -f $summary
touch $summary
define=""
for undef in _WINDOWS _M_AMD64 _MSC_VER WIN32 __INTEL_COMPILER __x86_64__ \
__SSE4_1__ __SSSE3__ __SSE__ __AVX2__ __USE_ISOC11 ASAN_WORKAROUND ENABLE_OPENCL ENABLE_OGL_DEBUG \
XBYAK_USE_MMAP_ALLOCATOR MAP_ANONYMOUS MAP_ANON XBYAK_DISABLE_AVX512
do
define="$define -U$undef"
done
check="--enable=warning,style,missingInclude"
for d in pcsx2 common plugins/GSdx plugins/spu2\-x plugins/onepad plugins/cdvdGigaherz
do
flat_d=$(echo $d | sed -e 's@/@_@')
log=cpp_check__${flat_d}.log
rm -f "$log"
cppcheck $check -j $ncpu --platform=unix32 $define "$root/$d" 2>&1 | tee "$log"
# Create a small summary (warning it might miss some issues)
fgrep -e "(warning)" -e "(error)" -e "(style)" -e "(performance)" -e "(portability)" "$log" >> $summary
done
exit 0
run_cppcheck
fi
############################################################
# Clang tidy build
############################################################
if [ "$clangTidy" -eq 1 ] && command -v clang-tidy >/dev/null ; then
compile_json=compile_commands.json
cpp_list=cpp_file.txt
summary=clang_tidy_summary.txt
grep '"file"' $compile_json | sed -e 's/"//g' -e 's/^\s*file\s*:\s*//' | grep -v "aVUzerorec.S" | sort -u > $cpp_list
# EXAMPLE
#
# Modernize loop syntax, fix if old style found.
# $ clang-tidy -p build_dev/compile_commands.json plugins/GSdx/GSTextureCache.cpp -checks='modernize-loop-convert' -fix
# Check all, tons of output:
# $ clang-tidy -p $compile_json $cpp -checks='*' -header-filter='.*'
# List of modernize checks:
# modernize-loop-convert
# modernize-make-unique
# modernize-pass-by-value
# modernize-redundant-void-arg
# modernize-replace-auto-ptr
# modernize-shrink-to-fit
# modernize-use-auto
# modernize-use-default
# modernize-use-nullptr
# modernize-use-override
# Don't check headers, don't check google/llvm coding conventions
if command -v parallel >/dev/null ; then
# Run clang-tidy in parallel with as many jobs as there are CPUs.
parallel -v --keep-order "clang-tidy -p $compile_json -checks='*,-llvm-*,-google-*' {}"
else
# xargs(1) can also run jobs in parallel with -P, but will mix the
# output from the distinct processes together willy-nilly.
xargs clang-tidy -p $compile_json -checks='*,-llvm-*,-google-*'
fi < $cpp_list > $summary
exit 0
run_clangtidy
fi
############################################################
# Coverity build
############################################################
if [ "$CoverityBuild" -eq 1 ] && command -v cov-build >/dev/null ; then
cov-build --dir "$coverity_dir" $make 2>&1 | tee -a "$log"
# Warning: $coverity_dir must be the root directory
(cd "$build"; tar caf $coverity_result "$coverity_dir")
exit 0
run_coverity
fi
############################################################

View File

@ -9,6 +9,7 @@ set(msg_dep_gsdx "check these libraries -> opengl, png (>=1.2), zlib (>=1
set(msg_dep_onepad "check these libraries -> sdl2, X11, gtk2")
set(msg_dep_spu2x "check these libraries -> soundtouch (>=1.5), alsa, portaudio (>=1.9), sdl (>=1.2) pcsx2 common libs")
set(msg_dep_zerospu2 "check these libraries -> soundtouch (>=1.5), alsa")
set(msg_dep_dev "check these libraries -> gtk2, pcap, libxml2")
if(GLSL_API)
set(msg_dep_zzogl "check these libraries -> glew, jpeg (>=6.2), opengl, X11, pcsx2 common libs")
else(GLSL_API)
@ -53,7 +54,7 @@ elseif(NOT EXISTS "${CMAKE_SOURCE_DIR}/common/src")
set(common_libs FALSE)
else()
set(common_libs FALSE)
print_dep("Skip build of common libraries: miss some dependencies" "${msg_dep_common_libs}")
print_dep("Skip build of common libraries: missing dependencies" "${msg_dep_common_libs}")
endif()
#---------------------------------------
@ -71,12 +72,12 @@ elseif(NOT EXISTS "${CMAKE_SOURCE_DIR}/pcsx2")
set(pcsx2_core FALSE)
else()
set(pcsx2_core FALSE)
print_dep("Skip build of pcsx2 core: miss some dependencies" "${msg_dep_pcsx2}")
print_dep("Skip build of pcsx2 core: missing dependencies" "${msg_dep_pcsx2}")
endif()
# Linux, BSD, use gtk2, but not OSX
if(UNIX AND pcsx2_core AND NOT GTKn_FOUND AND NOT APPLE)
set(pcsx2_core FALSE)
print_dep("Skip build of pcsx2 core: miss some dependencies" "${msg_dep_pcsx2}")
print_dep("Skip build of pcsx2 core: missing dependencies" "${msg_dep_pcsx2}")
endif()
@ -105,7 +106,7 @@ elseif(Linux AND GTKn_FOUND AND LIBUDEV_FOUND)
set(cdvdGigaherz TRUE)
else()
set(cdvdGigaherz FALSE)
print_dep("Skip build of cdvdGigaherz: miss some dependencies" "${msg_dep_cdvdgiga}")
print_dep("Skip build of cdvdGigaherz: missing dependencies" "${msg_dep_cdvdgiga}")
endif()
#---------------------------------------
@ -115,6 +116,7 @@ endif()
if(GTKn_FOUND)
set(dev9null TRUE)
endif()
#---------------------------------------
# dev9ghzdrk
#---------------------------------------
@ -123,6 +125,9 @@ if(GTKn_FOUND AND PCAP_FOUND AND LIBXML2_FOUND)
list(APPEND CMAKE_MODULE_PATH
${CMAKE_MODULE_PATH}/macros)
include(GlibCompileResourcesSupport)
else()
set(dev9ghzdrk FALSE)
print_dep("Skip build of dev9ghzdrk: missing dependencies" "${msg_dep_dev}")
endif()
#---------------------------------------
@ -156,7 +161,7 @@ elseif(NOT EXISTS "${CMAKE_SOURCE_DIR}/plugins/GSdx")
set(GSdx FALSE)
else()
set(GSdx FALSE)
print_dep("Skip build of GSdx: miss some dependencies" "${msg_dep_gsdx}")
print_dep("Skip build of GSdx: missing dependencies" "${msg_dep_gsdx}")
endif()
#---------------------------------------
@ -175,7 +180,7 @@ if(EXTRA_PLUGINS)
set(zerogs FALSE)
else()
set(zerogs FALSE)
print_dep("Skip build of zerogs: miss some dependencies" "${msg_dep_zerogs}")
print_dep("Skip build of zerogs: missing dependencies" "${msg_dep_zerogs}")
endif()
endif()
#---------------------------------------
@ -197,7 +202,7 @@ if(EXTRA_PLUGINS)
set(zzogl FALSE)
else()
set(zzogl FALSE)
print_dep("Skip build of zzogl: miss some dependencies" "${msg_dep_zzogl}")
print_dep("Skip build of zzogl: missing dependencies" "${msg_dep_zzogl}")
endif()
endif()
#---------------------------------------
@ -234,17 +239,17 @@ elseif(NOT EXISTS "${CMAKE_SOURCE_DIR}/plugins/onepad")
set(onepad FALSE)
else()
set(onepad FALSE)
print_dep("Skip build of onepad: miss some dependencies" "${msg_dep_onepad}")
print_dep("Skip build of onepad: missing dependencies" "${msg_dep_onepad}")
endif()
# old version of the plugin that still support SDL1
# old version of the plugin that still supports SDL1
if(wxWidgets_FOUND AND GTKn_FOUND AND SDLn_FOUND AND X11_FOUND)
set(onepad_legacy TRUE)
elseif(NOT EXISTS "${CMAKE_SOURCE_DIR}/plugins/onepad_legacy")
set(onepad_legacy FALSE)
else()
set(onepad_legacy FALSE)
print_dep("Skip build of onepad_legacy: miss some dependencies" "${msg_dep_onepad}")
print_dep("Skip build of onepad_legacy: missing dependencies" "${msg_dep_onepad}")
endif()
#---------------------------------------
@ -272,7 +277,7 @@ elseif(NOT EXISTS "${CMAKE_SOURCE_DIR}/plugins/spu2-x")
set(spu2-x FALSE)
else()
set(spu2-x FALSE)
print_dep("Skip build of spu2-x: miss some dependencies" "${msg_dep_spu2x}")
print_dep("Skip build of spu2-x: missing dependencies" "${msg_dep_spu2x}")
endif()
#---------------------------------------
@ -288,12 +293,12 @@ if(EXTRA_PLUGINS)
set(zerospu2 TRUE)
# Comment the next line, if you want to compile zerospu2
set(zerospu2 FALSE)
message(STATUS "Don't build zerospu2. It is super-seeded by spu2x")
message(STATUS "Don't build zerospu2. It is superceded by spu2x")
elseif(NOT EXISTS "${CMAKE_SOURCE_DIR}/plugins/zerospu2")
set(zerospu2 FALSE)
else()
set(zerospu2 FALSE)
print_dep("Skip build of zerospu2: miss some dependencies" "${msg_dep_zerospu2}")
print_dep("Skip build of zerospu2: missing dependencies" "${msg_dep_zerospu2}")
endif()
endif()
#---------------------------------------

View File

@ -740,8 +740,10 @@ endif()
add_pcsx2_executable(${Output} "${pcsx2FinalSources}" "${pcsx2FinalLibs}" "${pcsx2FinalFlags}")
if(PACKAGE_MODE)
if(dev9ghzdrk)
if(PACKAGE_MODE)
install(CODE "execute_process(COMMAND /bin/bash -c \"echo 'Enabling networking capability on Linux...';set -x; [ -f ${BIN_DIR}/${Output} ] && sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' ${BIN_DIR}/${Output}; set +x\")")
else()
else()
install(CODE "execute_process(COMMAND /bin/bash -c \"echo 'Enabling networking capability on Linux...';set -x; [ -f ${CMAKE_SOURCE_DIR}/bin/${Output} ] && sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' ${CMAKE_SOURCE_DIR}/bin/${Output}; set +x\")")
endif()
endif()

View File

@ -66,15 +66,6 @@ if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/USBnull" AND USBnull)
add_subdirectory(USBnull)
endif()
#if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/zerogs" AND zerogs)
# add_subdirectory(zerogs)
#endif()
if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/zzogl-pg" AND zzogl)
add_subdirectory(zzogl-pg/opengl)
endif()
if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/zerospu2" AND zerospu2)
add_subdirectory(zerospu2)
endif()