Adds the opt/OPT option to scons/cmake.
Travis now also makes use of this to set the optimization level for the -O0 builds, rather than extra_flags_*. This additionally fixes an issue where using -O0 in the release build with LTO resulted in the individual *.o files being compiled with -O0, but LTO then still linked with release's default -O3.
(cherry-picked from commit 63ff641662
)
This commit is contained in:
parent
3d95d04461
commit
1ef1704fd9
5 changed files with 73 additions and 29 deletions
|
@ -268,14 +268,43 @@ RemoveFlag(CMAKE_C_FLAGS_MINSIZEREL CACHE "-DNDEBUG" "Default C flags for MinSiz
|
|||
RemoveFlag(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS SCRIPT "-rdynamic" "")
|
||||
RemoveFlag(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS SCRIPT "-rdynamic" "")
|
||||
|
||||
# #
|
||||
# Determine optimization level
|
||||
# #
|
||||
|
||||
if(NOT OPT)
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
|
||||
set(CMAKE_C_FLAGS_RELEASE "-O3")
|
||||
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-O0")
|
||||
set(CMAKE_C_FLAGS_DEBUG "-O0")
|
||||
|
||||
if(PROFILER STREQUAL "perf")
|
||||
set(CMAKE_CXX_FLAGS_PROFILE "-Og")
|
||||
set(CMAKE_C_FLAGS_PROFILE "-Og")
|
||||
else(PROFILER STREQUAL "perf")
|
||||
set(CMAKE_CXX_FLAGS_PROFILE "-O0")
|
||||
set(CMAKE_C_FLAGS_PROFILE "-O0")
|
||||
endif(PROFILER STREQUAL "perf")
|
||||
else(NOT OPT)
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${OPT}")
|
||||
set(CMAKE_C_FLAGS_RELEASE "${OPT}")
|
||||
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "${OPT}")
|
||||
set(CMAKE_C_FLAGS_DEBUG "${OPT}")
|
||||
|
||||
set(CMAKE_CXX_FLAGS_PROFILE "${OPT}")
|
||||
set(CMAKE_C_FLAGS_PROFILE "${OPT}")
|
||||
endif(NOT OPT)
|
||||
|
||||
# #
|
||||
# Start determining options for Release build
|
||||
# #
|
||||
|
||||
# reset the base Release build option
|
||||
MESSAGE("Replacing default flags used for Release build with -O3 ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_RELEASE}")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3 ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_RELEASE}" CACHE STRING "Release build flags" FORCE)
|
||||
set(CMAKE_C_FLAGS_RELEASE "-O3 ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_RELEASE}" CACHE STRING "Release build flags" FORCE)
|
||||
MESSAGE("Replacing default flags used for Release build with ${OPT} ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_RELEASE}")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_RELEASE}" CACHE STRING "Release build flags" FORCE)
|
||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_RELEASE}" CACHE STRING "Release build flags" FORCE)
|
||||
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "" CACHE STRING "" FORCE)
|
||||
# set the arch to use for Release build if provided
|
||||
if(ARCH)
|
||||
|
@ -372,9 +401,9 @@ set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_SOURCE_
|
|||
|
||||
# replace the default Debug flag of -g with -O0 -DDEBUG -ggdb3
|
||||
# this matches the flags of scons' debug build
|
||||
MESSAGE("Replacing flags used for Debug build -O0 -DDEBUG -ggdb3 ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_DEBUG}")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -DDEBUG -ggdb3 ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_DEBUG}" CACHE STRING "change cmake's Debug flags to match scons' flags" FORCE)
|
||||
set(CMAKE_C_FLAGS_DEBUG "-O0 -DDEBUG -ggdb3 ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_DEBUG}" CACHE STRING "change cmake's Debug flags to match scons' flags" FORCE)
|
||||
MESSAGE("Replacing flags used for Debug build ${OPT} -DDEBUG -ggdb3 ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_DEBUG}")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG -ggdb3 ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_DEBUG}" CACHE STRING "change cmake's Debug flags to match scons' flags" FORCE)
|
||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DDEBUG -ggdb3 ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_DEBUG}" CACHE STRING "change cmake's Debug flags to match scons' flags" FORCE)
|
||||
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${LINK_EXTRA_FLAGS_CONFIG} ${LINK_EXTRA_FLAGS_DEBUG}" CACHE STRING "" FORCE)
|
||||
|
||||
# adds GLIBCXX_DEBUG definitions
|
||||
|
@ -391,29 +420,29 @@ endif(GLIBCXX_DEBUG)
|
|||
|
||||
if(PROFILER STREQUAL "gprof" OR NOT PROFILER)
|
||||
MESSAGE("Profiler is gprof")
|
||||
set(CMAKE_CXX_FLAGS_PROFILE "-pg ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_PROFILE}" CACHE STRING "Flags for profiling with gprof" FORCE)
|
||||
set(CMAKE_C_FLAGS_PROFILE "-pg ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_PROFILE}" CACHE STRING "Flags for profiling with gprof" FORCE)
|
||||
set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} -pg ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_PROFILE}" CACHE STRING "Flags for profiling with gprof" FORCE)
|
||||
set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_PROFILE} -pg ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_PROFILE}" CACHE STRING "Flags for profiling with gprof" FORCE)
|
||||
set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${LINK_EXTRA_FLAGS_CONFIG} ${LINK_EXTRA_FLAGS_PROFILE}" CACHE STRING "" FORCE)
|
||||
endif()
|
||||
|
||||
if(PROFILER STREQUAL "gcov")
|
||||
MESSAGE("Profiler is gcov")
|
||||
set(CMAKE_CXX_FLAGS_PROFILE "-fprofile-arcs -ftest-coverage ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_PROFILE}" CACHE STRING "Flags for profiling with gcov" FORCE)
|
||||
set(CMAKE_C_FLAGS_PROFILE "-fprofile-arcs -ftest-coverage ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_PROFILE}" CACHE STRING "Flags for profiling with gcov" FORCE)
|
||||
set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} -fprofile-arcs -ftest-coverage ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_PROFILE}" CACHE STRING "Flags for profiling with gcov" FORCE)
|
||||
set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_PROFILE} -fprofile-arcs -ftest-coverage ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_PROFILE}" CACHE STRING "Flags for profiling with gcov" FORCE)
|
||||
set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${LINK_EXTRA_FLAGS_CONFIG} ${LINK_EXTRA_FLAGS_PROFILE}" CACHE STRING "" FORCE)
|
||||
endif()
|
||||
|
||||
if(PROFILER STREQUAL "gperftools")
|
||||
MESSAGE("Profiler is gperftools")
|
||||
set(CMAKE_CXX_FLAGS_PROFILE "${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_PROFILE}" CACHE STRING "Flags for profiling with gperftools" FORCE)
|
||||
set(CMAKE_C_FLAGS_PROFILE "${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_PROFILE}" CACHE STRING "Flags for profiling with gperftools" FORCE)
|
||||
set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_PROFILE}" CACHE STRING "Flags for profiling with gperftools" FORCE)
|
||||
set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_PROFILE} ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_PROFILE}" CACHE STRING "Flags for profiling with gperftools" FORCE)
|
||||
set(CMAKE_EXE_LINKER_FLAGS_PROFILE "-Wl,--no-as-needed,-lprofiler ${LINK_EXTRA_FLAGS_CONFIG} ${LINK_EXTRA_FLAGS_PROFILE}" CACHE STRING "" FORCE)
|
||||
endif()
|
||||
|
||||
if(PROFILER STREQUAL "perf")
|
||||
MESSAGE("Profiler is perf")
|
||||
set(CMAKE_CXX_FLAGS_PROFILE "-ggdb -Og ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_PROFILE}" CACHE STRING "Flags for profiling with perf" FORCE)
|
||||
set(CMAKE_C_FLAGS_PROFILE "-ggdb -Og ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_PROFILE}" CACHE STRING "Flags for profiling with perf" FORCE)
|
||||
set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} -ggdb ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_PROFILE}" CACHE STRING "Flags for profiling with perf" FORCE)
|
||||
set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_PROFILE} -ggdb ${EXTRA_FLAGS_CONFIG} ${EXTRA_FLAGS_PROFILE}" CACHE STRING "Flags for profiling with perf" FORCE)
|
||||
set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${LINK_EXTRA_FLAGS_CONFIG} ${LINK_EXTRA_FLAGS_PROFILE}" CACHE STRING "" FORCE)
|
||||
endif()
|
||||
|
||||
|
|
30
SConstruct
30
SConstruct
|
@ -55,6 +55,7 @@ opts.AddVariables(
|
|||
('extra_flags_profile', 'Extra compiler and linker flags to use for profile builds', ""),
|
||||
BoolVariable('enable_lto', 'Whether to enable Link Time Optimization for build=release', False),
|
||||
('arch', 'What -march option to use for build=release, will default to pentiumpro on Windows', ""),
|
||||
('opt', 'override for the build\'s optimization level', ""),
|
||||
BoolVariable('glibcxx_debug', 'Whether to define _GLIBCXX_DEBUG and _GLIBCXX_DEBUG_PEDANTIC for build=debug', False),
|
||||
EnumVariable('profiler', 'profiler to be used for build=profile', "gprof", ["gprof", "gcov", "gperftools", "perf"]),
|
||||
EnumVariable('pgo_data', 'whether to generate profiling data for PGO, or use existing profiling data', "", ["", "generate", "use"]),
|
||||
|
@ -480,12 +481,27 @@ for env in [test_env, client_env, env]:
|
|||
env.AppendUnique(CXXFLAGS = Split("-Wctor-dtor-privacy -Wuseless-cast -Wnoexcept"))
|
||||
if env['sanitize']:
|
||||
env.AppendUnique(CCFLAGS = ["-fsanitize=" + env["sanitize"]], LINKFLAGS = ["-fsanitize=" + env["sanitize"]])
|
||||
|
||||
|
||||
# #
|
||||
# Determine optimization level
|
||||
# #
|
||||
|
||||
if not env["opt"]:
|
||||
if env["build"] == "release":
|
||||
env["opt"] = "-O3 "
|
||||
elif env["build"] == "profile" and env["profiler"] == "perf":
|
||||
env["opt"] = "-Og "
|
||||
else:
|
||||
env["opt"] = "-O0 "
|
||||
else:
|
||||
env["opt"] = env["opt"]+" "
|
||||
|
||||
|
||||
# #
|
||||
# Start determining options for debug build
|
||||
# #
|
||||
|
||||
debug_flags = "-O0 -DDEBUG -ggdb3"
|
||||
debug_flags = env["opt"]+"-DDEBUG -ggdb3"
|
||||
|
||||
if env["glibcxx_debug"] == True:
|
||||
glibcxx_debug_flags = "_GLIBCXX_DEBUG _GLIBCXX_DEBUG_PEDANTIC"
|
||||
|
@ -498,7 +514,7 @@ for env in [test_env, client_env, env]:
|
|||
# #
|
||||
|
||||
# default compiler flags
|
||||
rel_comp_flags = "-O3"
|
||||
rel_comp_flags = env["opt"]
|
||||
rel_link_flags = ""
|
||||
|
||||
# use the arch if provided, or if on Windows and no arch was passed in then default to pentiumpro
|
||||
|
@ -543,19 +559,19 @@ for env in [test_env, client_env, env]:
|
|||
# #
|
||||
|
||||
if env["profiler"] == "gprof":
|
||||
prof_comp_flags = "-pg"
|
||||
prof_comp_flags = env["opt"]+"-pg"
|
||||
prof_link_flags = "-pg"
|
||||
|
||||
if env["profiler"] == "gcov":
|
||||
prof_comp_flags = "-fprofile-arcs -ftest-coverage"
|
||||
prof_comp_flags = env["opt"]+"-fprofile-arcs -ftest-coverage"
|
||||
prof_link_flags = "-fprofile-arcs"
|
||||
|
||||
if env["profiler"] == "gperftools":
|
||||
prof_comp_flags = ""
|
||||
prof_comp_flags = env["opt"]
|
||||
prof_link_flags = "-Wl,--no-as-needed,-lprofiler"
|
||||
|
||||
if env["profiler"] == "perf":
|
||||
prof_comp_flags = "-ggdb -Og"
|
||||
prof_comp_flags = env["opt"]+"-ggdb"
|
||||
prof_link_flags = ""
|
||||
|
||||
# #
|
||||
|
|
|
@ -10,7 +10,7 @@ TOOL="$2"
|
|||
CC="$3"
|
||||
CXX="$4"
|
||||
CXXSTD="$5"
|
||||
EXTRA_FLAGS_RELEASE="$6"
|
||||
OPT="$6"
|
||||
WML_TESTS="$7"
|
||||
WML_TEST_TIME="$8"
|
||||
PLAY_TEST="$9"
|
||||
|
@ -19,7 +19,7 @@ BOOST_TEST="${11}"
|
|||
LTO="${12}"
|
||||
SAN="${13}"
|
||||
|
||||
if [ "$EXTRA_FLAGS_RELEASE" == "-O0" ]; then
|
||||
if [ "$OPT" == "-O0" ]; then
|
||||
STRICT="true"
|
||||
build_timeout=35
|
||||
else
|
||||
|
@ -37,7 +37,7 @@ echo "TOOL: $TOOL"
|
|||
echo "CC: $CC"
|
||||
echo "CXX: $CXX"
|
||||
echo "CXXSTD: $CXXSTD"
|
||||
echo "EXTRA_FLAGS_RELEASE: $EXTRA_FLAGS_RELEASE"
|
||||
echo "OPT: $OPT"
|
||||
echo "WML_TESTS: $WML_TESTS"
|
||||
echo "WML_TEST_TIME: $WML_TEST_TIME"
|
||||
echo "PLAY_TEST: $PLAY_TEST"
|
||||
|
@ -62,7 +62,7 @@ else
|
|||
echo "compiler_check = content" >> $HOME/.ccache/ccache.conf
|
||||
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GAME=true -DENABLE_SERVER=true -DENABLE_CAMPAIGN_SERVER=true -DENABLE_TESTS=true -DENABLE_NLS=false \
|
||||
-DEXTRA_FLAGS_CONFIG="-pipe" -DEXTRA_FLAGS_RELEASE="$EXTRA_FLAGS_RELEASE" -DENABLE_STRICT_COMPILATION="$STRICT" -DENABLE_LTO="$LTO" -DLTO_JOBS=2 \
|
||||
-DEXTRA_FLAGS_CONFIG="-pipe" -DOPT="$OPT" -DENABLE_STRICT_COMPILATION="$STRICT" -DENABLE_LTO="$LTO" -DLTO_JOBS=2 \
|
||||
-DCXX_STD="$CXXSTD" -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache && \
|
||||
make VERBOSE=1 -j2
|
||||
BUILD_RET=$?
|
||||
|
@ -72,7 +72,7 @@ else
|
|||
else
|
||||
scons wesnoth wesnothd campaignd boost_unit_tests build=release \
|
||||
ctool=$CC cxxtool=$CXX cxx_std=$CXXSTD \
|
||||
extra_flags_config="-pipe" extra_flags_release="$EXTRA_FLAGS_RELEASE" strict="$STRICT" \
|
||||
extra_flags_config="-pipe" opt="$OPT" strict="$STRICT" \
|
||||
nls=false enable_lto="$LTO" sanitize="$SAN" jobs=2 --debug=time
|
||||
BUILD_RET=$?
|
||||
fi
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
date
|
||||
|
||||
export EXTRA_FLAGS_RELEASE="$OPT"
|
||||
export WML_TESTS=true
|
||||
export PLAY_TEST=true
|
||||
export MP_TEST=true
|
||||
|
|
|
@ -28,12 +28,12 @@ if [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
|||
"$CXX" --version
|
||||
scons wesnoth wesnothd campaignd boost_unit_tests build=release \
|
||||
ctool="$CC" cxxtool="$CXX" cxx_std="$CXXSTD" \
|
||||
extra_flags_config="-pipe" extra_flags_release="$EXTRA_FLAGS_RELEASE" strict=true \
|
||||
extra_flags_config="-pipe" opt="$OPT" strict=true \
|
||||
nls="$NLS" enable_lto="$LTO" jobs=2 --debug=time
|
||||
fi
|
||||
else
|
||||
docker run -v "$HOME"/build-cache:/home/wesnoth-travis/build \
|
||||
-v "$HOME"/.ccache:/root/.ccache wesnoth-repo:"$LTS"-"$BRANCH" \
|
||||
bash -c './utils/travis/docker_run.sh "$@"' \
|
||||
bash "$NLS" "$TOOL" "$CC" "$CXX" "$CXXSTD" "$EXTRA_FLAGS_RELEASE" "$WML_TESTS" "$WML_TEST_TIME" "$PLAY_TEST" "$MP_TEST" "$BOOST_TEST" "$LTO" "$SAN"
|
||||
bash "$NLS" "$TOOL" "$CC" "$CXX" "$CXXSTD" "$OPT" "$WML_TESTS" "$WML_TEST_TIME" "$PLAY_TEST" "$MP_TEST" "$BOOST_TEST" "$LTO" "$SAN"
|
||||
fi
|
||||
|
|
Loading…
Add table
Reference in a new issue