Skip to content

Commit

Permalink
cmake helper calls moved to their own file with multiple cmake method…
Browse files Browse the repository at this point in the history
…s added for build attempts
  • Loading branch information
mitchcapper committed Jul 26, 2023
1 parent 246ca45 commit 4e64d31
Show file tree
Hide file tree
Showing 2 changed files with 198 additions and 8 deletions.
12 changes: 4 additions & 8 deletions helpers.sh
Original file line number Diff line number Diff line change
Expand Up @@ -119,12 +119,6 @@ PreInitialize(){



function cmake_config_run(){
#echo -n "Running: cmake " 1>&2
#printf "%q " "$@" 1>&2
#echo $@
#echo ""
echo "Running cmake ${*@Q}" 1>&2

#these almost certainly wont work normally the static and release are prefixed by something
STATIC_VAL=0
Expand All @@ -133,7 +127,6 @@ function cmake_config_run(){
STATIC_VAL=1
SHARE_VAL=0
fi
cmake -G "Visual Studio 17 2022" --install-prefix "$BLD_CONFIG_INSTALL_FOLDER" -S . -B winbuild -DCMAKE_C_FLAGS_DEBUG:STRING="${CFLAGS}" -DCMAKE_C_FLAGS_RELEASE:STRING="${CFLAGS}" -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING="${CFLAGS}" -DCMAKE_C_FLAGS_MINSIZEREL:STRING="${CFLAGS}" -DBUILD_STATIC:BOOL="${STATIC_VAL}" -DBUILD_SHARED:BOOL="${SHARE_VAL}" -DCMAKE_CONFIGURATION_TYPES:STRING="${BLD_CONFIG_CMAKE_BUILD_TARGET_AUTO}" -DCMAKE_BUILD_TYPE:STRING="${BLD_CONFIG_CMAKE_BUILD_TYPE_AUTO}" "$@" > >(tee "${BLD_CONFIG_LOG_CONFIGURE_FILE}");
}
function configure_run(){
setup_build_env;
Expand Down Expand Up @@ -286,7 +279,9 @@ function startcommon(){
#else
#cd $BLD_CONFIG_BASE_FOLDER
#fi

if [[ -n "$BLD_CONFIG_CMAKE_STYLE" ]]; then
cmake_init;
fi
}
function exit_ok(){
trace_final
Expand All @@ -308,5 +303,6 @@ function finalcommon(){
. "$SCRIPT_FOLDER/helpers_ini.sh"
. "$SCRIPT_FOLDER/helpers_gnu.sh"
. "$SCRIPT_FOLDER/helpers_vcpkg.sh"
. "$SCRIPT_FOLDER/helpers_cmake.sh"
. "$SCRIPT_FOLDER/helpers_bashtrace.sh"
PreInitialize;
194 changes: 194 additions & 0 deletions helpers_cmake.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@

cmake_ensure_installed(){
if [[ "$BLD_CONFIG_CMAKE_STYLE" == "unix-msys" ]]; then
echo CHECKING FOR $BLD_CONFIG_CMAKE_MSYS_BIN
if [[ -f "${BLD_CONFIG_CMAKE_MSYS_BIN}" ]]; then
return
fi
mkdir -p "${BLD_CONFIG_CMAKE_MSYS_DIR}"
cd "${BLD_CONFIG_CMAKE_MSYS_DIR}"
wget "https://mirror.msys2.org/msys/x86_64/${BLD_CONFIG_CMAKE_MSYS_VER}" -O cmake.tar.zst
tar -axf cmake.tar.zst # --transform="s,.*/,," cant flatten as it backtracks itself to figure out the path/shared/etc
cd "$BLD_CONFIG_SRC_FOLDER"
fi
}

function cmake_init(){
if [[ "$BLD_CONFIG_CMAKE_STYLE" == "best" ]]; then
BLD_CONFIG_CMAKE_STYLE="$BLD_CONFIG_CMAKE_BEST_STYLE"
fi;
if [[ "$BLD_CONFIG_CMAKE_STYLE" == "nmake" || "$BLD_CONFIG_CMAKE_STYLE" == "cmake" || "$BLD_CONFIG_CMAKE_STYLE" == "unix" || "$BLD_CONFIG_CMAKE_STYLE" == "ninja" || "$BLD_CONFIG_CMAKE_STYLE" == "nmake-launchers" ]]; then
BLD_CONFIG_BUILD_WINDOWS_COMPILE_WRAPPERS=1
BLD_CONFIG_GNU_LIBS_BUILD_AUX_ONLY_USED=0
elif [[ "$BLD_CONFIG_CMAKE_STYLE" == "vs" || "$BLD_CONFIG_CMAKE_STYLE" == "vs" ]]; then
BLD_CONFIG_BUILD_WINDOWS_COMPILE_WRAPPERS=0
BLD_CONFIG_GNU_LIBS_BUILD_AUX_ONLY_USED=0
elif [[ "$BLD_CONFIG_CMAKE_STYLE" == "msys" || "$BLD_CONFIG_CMAKE_STYLE" == "unix-msys" || "$BLD_CONFIG_CMAKE_STYLE" == "ninja-msys" ]]; then
BLD_CONFIG_BUILD_WINDOWS_COMPILE_WRAPPERS=0
BLD_CONFIG_GNU_LIBS_BUILD_AUX_ONLY_USED=1
fi
if [[ "$BLD_CONFIG_CMAKE_STYLE" == "unix-msys" || "$BLD_CONFIG_CMAKE_STYLE" == "ninja-msys" ]]; then
cmake_ensure_installed;
fi
}
#declare -g SETUP_CMAKE_SETTINGS_RUN=0
function cmake_settings_setup(){
# ok to actually run multiple times and need it for some of the file fixes we run
# if [[ $SETUP_CMAKE_SETTINGS_RUN -eq 1 ]]; then
#return
#fi
# SETUP_CMAKE_SETTINGS_RUN=1
CMAKE_TARGET="Visual Studio 17 2022"
CMAKE_CONFIG_BINARY="cmake"
CMAKE_MAKE_BINARY="cmake"
CMAKE_MAKE_ADDL="--build ${BLD_CONFIG_CMAKE_BUILD_DIR} --verbose"
CMAKE_INSTALL_ADDL=" --install ${BLD_CONFIG_CMAKE_BUILD_DIR}"
CMAKE_PREFIX_DIR="$BLD_CONFIG_INSTALL_FOLDER"
CMAKE_ADDL_FLAGS=""
CMAKE_CONFIG_CLI_CFLAGS="${CFLAGS}"


case "$BLD_CONFIG_CMAKE_STYLE" in
ninja)
CMAKE_MAKE_BINARY="ninja"
CMAKE_TARGET="Ninja"
;;
ninja-msys)
CMAKE_MAKE_BINARY="ninja-msys"
CMAKE_TARGET="Ninja"
prefix=`cygpath -u "$prefix"`
CMAKE_CONFIG_BINARY="$BLD_CONFIG_CMAKE_MSYS_BIN"
CC=`cygpath -u "$CC"`
LD=`cygpath -u "$LD"`
CXX="${CC}"
AR=`cygpath -u "$AR"`
ASM="${CC}"
export CXX LD CC AR ASM
;;

vs)
CMAKE_MAKE_ADDL+=" --config $BLD_CONFIG_CMAKE_BUILD_TARGET_AUTO"
;;
unix)
CMAKE_TARGET="Unix Makefiles"
CMAKE_MAKE_ADDL=""
CMAKE_MAKE_BINARY="make"
CMAKE_INSTALL_ADDL="install"
CMAKE_ADDL_FLAGS="-DCMAKE_MAKE_PROGRAM=/usr/bin/make -DCMAKE_IGNORE_PATH=/usr/bin -DCMAKE_LINKER=${LD} -DCMAKE_C_LINK_EXECUTABLE=\"${LD}\" -DCMAKE_CXX_LINK_EXECUTABLE=\"${LD}\" " #ignore is to fix link.exe chosen wrong issue
;;
msys)
CMAKE_TARGET="MSYS Makefiles"
CMAKE_MAKE_ADDL=""
CMAKE_MAKE_BINARY="make"
CMAKE_INSTALL_ADDL="install"
BASH_EXEC=`which bash`
BASH_EXEC=`cygpath -m $BASH_EXEC`
#find -name "link.txt" | xargs sed -i -E "s#^\"(.+?)\"#\1#g" || true #first we strip any quotes off the initial param, then we will escape the other quotse before wrapping it in a bash call


find -name "link.txt" | xargs --no-run-if-empty sed -i -E -e '/bash.exe/!s#^\"([^\"]+?)\"#\1#g;/bash.exe/!s/"/\\"/g;/bash.exe/!s#(.+)#ZBASHEXEC -c \"\1\"#' -e "s#ZBASHEXEC#$BASH_EXEC#"
# || true #first we strip any quotes off the initial param we escape all remaining quotes, then put the everything to a bash -c
#LD="c:/repo/WIN64LinuxBuild/wraps/link.bat"
#AR="c:/repo/WIN64LinuxBuild/wraps/lib.bat"
CMAKE_CONFIG_CLI_CFLAGS="" #will use env ones
CXX="${CC}"
ASM="${CC}"
# AR=`cygpath -u "$AR"`
export CXX LD CC AR ASM
CMAKE_ADDL_FLAGS="-DCMAKE_LINKER=${LD}"
;;
unix-msys)
CMAKE_TARGET="Unix Makefiles"
CMAKE_MAKE_ADDL=""
CMAKE_MAKE_BINARY="make"
CMAKE_INSTALL_ADDL="install"
#CMAKE_MAKE_BINARY="$BLD_CONFIG_CMAKE_MSYS_BIN"
find -name "link.txt" | xargs sed -i -E "s#^\"(.+?)\"#\1#g" || true #it hs the linker command in quotes causing an issue we strip them and all is well
if [[ ! -z "$CMAKE_PREFIX_DIR" ]]; then
CMAKE_PREFIX_DIR=`cygpath -u "$CMAKE_PREFIX_DIR"`
fi
CMAKE_CONFIG_BINARY="$BLD_CONFIG_CMAKE_MSYS_BIN"
CC=`cygpath -u "$CC"`
LD=`cygpath -u "$LD"`
CXX="${CC}"
AR=`cygpath -u "$AR"`
ASM="${CC}"
export CXX LD CC AR ASM
;;
nmake)
CMAKE_MAKE_BINARY="nmake"
CMAKE_TARGET="NMake Makefiles"
;;
nmake-launchers)
CMAKE_MAKE_BINARY="nmake"
unset CC CXX
export GNU_BUILD_WRAPPER_DEBUG=1
LAUNCHER="${WIN_SCRIPT_FOLDER}/windows_command_wrapper.bat"
CMAKE_ADDL_FLAGS="-DCMAKE_CXX_LINKER_LAUNCHER=${LAUNCHER} -DCMAKE_C_LINKER_LAUNCHER=${LAUNCHER} -DCMAKE_C_COMPILER_LAUNCHER=${LAUNCHER} -DCMAKE_CXX_COMPILER_LAUNCHER=${LAUNCHER}"
CMAKE_TARGET="NMake Makefiles"
;;
esac
}
function cmake_config_run(){
#echo -n "Running: cmake " 1>&2
#printf "%q " "$@" 1>&2
#echo $@
#echo ""

#these almost certainly wont work normally the static and release are prefixed by something
STATIC_VAL=0
SHARE_VAL=1
if [[ $BLD_CONFIG_PREFER_STATIC_LINKING -eq 1 ]]; then
STATIC_VAL=1
SHARE_VAL=0
fi
# -DCMAKE_C_COMPILER="${CC}" -DCMAKE_CXX_COMPILER="${CXX}" -DCMAKE_AR="${AR}" -DCMAKE_LINKER="${LD}"
# well it will call these but its calling from win so bash scripts wont work would need them as PS
# We used to do -G "Visual Studio 17 2022" but that doesn't really work with custom compiler/linker/etc specs as it calls msbuild
#unix makefiles work

# -DCMAKE_C_COMPILER:FILEPATH="${CC}" -DCMAKE_CXX_COMPILER:FILEPATH="${CXX}" -DCMAKE_AR="${AR}" -DCMAKE_LINKER="${LD}" -DCMAKE_ASM_COMPILER:FILEPATH="${CC}"
#MSYS Makefiles

cmake_settings_setup;
#env
#exit 1
EXPORT_CMDS=" -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=\"1\"" #only works for makefiles and ninja generators for nmake it does get you real names but no linker command, may not work with unix ones
_cmake $CMAKE_CONFIG_BINARY --debug-output -G "$CMAKE_TARGET" --install-prefix "$CMAKE_PREFIX_DIR" -S $BLD_CONFIG_CMAKE_SRC_DIR -B $BLD_CONFIG_CMAKE_BUILD_DIR $CMAKE_ADDL_FLAGS $EXPORT_CMDS -DCMAKE_C_FLAGS_DEBUG:STRING="${CMAKE_CONFIG_CLI_CFLAGS}" -DINSTALL_MSVC_PDB:BOOL="${BLD_CONFIG_BUILD_DEBUG}" -DBUILD_TEST:BOOL="0" -DCMAKE_C_FLAGS_RELEASE:STRING="${CMAKE_CONFIG_CLI_CFLAGS}" -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING="${CMAKE_CONFIG_CLI_CFLAGS}" -DCMAKE_AR="${AR}" -DCMAKE_C_FLAGS_MINSIZEREL:STRING="${CMAKE_CONFIG_CLI_CFLAGS}" -DBUILD_STATIC:BOOL="${STATIC_VAL}" -DBUILD_SHARED:BOOL="${SHARE_VAL}" -DBUILD_SHARED_LIBS:BOOL="${SHARE_VAL}" -DCMAKE_CONFIGURATION_TYPES:STRING="${BLD_CONFIG_CMAKE_BUILD_TARGET_AUTO}" -DCMAKE_BUILD_TYPE:STRING="${BLD_CONFIG_CMAKE_BUILD_TYPE_AUTO}" "$@" > >(tee "${BLD_CONFIG_LOG_CONFIGURE_FILE}");
}
function cmake_make(){


cmake_settings_setup;
cd $BLD_CONFIG_CMAKE_BUILD_DIR
if [[ -n "${LOG_MAKE_RUN}" ]]; then
run_logged_make $CMAKE_MAKE_BINARY $CMAKE_MAKE_ADDL "$@"
else
_cmake $CMAKE_MAKE_BINARY $CMAKE_MAKE_ADDL "$@"
fi
cd $BLD_CONFIG_SRC_FOLDER
}
function _cmake(){
echo "Running ${*@Q}" 1>&2
ex "$@"
}
function cmake_install(){
cmake_settings_setup;
PDB=1
if [[ "$1" == "-nopdb" ]]; then
PDB=0
shift 1;
fi
cd $BLD_CONFIG_CMAKE_BUILD_DIR
ex $CMAKE_MAKE_BINARY $CMAKE_INSTALL_ADDL "$@"
if [[ $BLD_CONFIG_BUILD_DEBUG -eq 1 ]]; then
mkdir -p "${BLD_CONFIG_INSTALL_FOLDER}/bin"
# cd "${BLD_CONFIG_CMAKE_BUILD_DIR}"
if [[ $PDB -eq 1 ]]; then
copy_pdbs;
fi
cd ..
fi
#need to rename binarys with .exe extenson
cd $BLD_CONFIG_SRC_FOLDER
}

0 comments on commit 4e64d31

Please sign in to comment.