diff --git a/.azure-pipelines/windows.sh b/.azure-pipelines/windows.sh index 02a9c168ed..901a9c68d9 100644 --- a/.azure-pipelines/windows.sh +++ b/.azure-pipelines/windows.sh @@ -79,7 +79,7 @@ fi DMD_BIN_PATH="$DMD_DIR/generated/windows/release/${MODEL}/dmd" cd "${DMD_DIR}/src" -"${DM_MAKE}" -f "${MAKE_FILE}" reldmd DMD="$DMD_BIN_PATH" +"${DM_MAKE}" -f "${MAKE_FILE}" reldmd-asserts DMD="$DMD_BIN_PATH" ################################################################################ # WORKAROUND: Build zlib separately with DigitalMars make diff --git a/ci.sh b/ci.sh index 14c4f3ee21..209404f158 100755 --- a/ci.sh +++ b/ci.sh @@ -45,7 +45,7 @@ clone() { # build dmd, druntime, phobos build() { source ~/dlang/*/activate # activate host compiler - make -j$N -C src -f posix.mak MODEL=$MODEL HOST_DMD=$DMD ENABLE_RELEASE=1 ENABLE_WARNINGS=1 all + make -j$N -C src -f posix.mak MODEL=$MODEL HOST_DMD=$DMD ENABLE_RELEASE=1 ENABLE_ASSERTS=1 ENABLE_WARNINGS=1 all make -j$N -C ../druntime -f posix.mak MODEL=$MODEL make -j$N -C ../phobos -f posix.mak MODEL=$MODEL deactivate # deactivate host compiler @@ -61,7 +61,7 @@ rebuild() { cp $build_path/dmd _${build_path}/host_dmd cp $build_path/dmd.conf _${build_path} make -j$N -C src -f posix.mak MODEL=$MODEL HOST_DMD=../_${build_path}/host_dmd clean - make -j$N -C src -f posix.mak MODEL=$MODEL HOST_DMD=../_${build_path}/host_dmd ENABLE_RELEASE=1 ENABLE_WARNINGS=1 all + make -j$N -C src -f posix.mak MODEL=$MODEL HOST_DMD=../_${build_path}/host_dmd ENABLE_RELEASE=1 ENABLE_ASSERTS=1 ENABLE_WARNINGS=1 all # compare binaries to test reproducible build if [ $compare -eq 1 ]; then diff --git a/posix.mak b/posix.mak index 1491587988..c058e4e598 100644 --- a/posix.mak +++ b/posix.mak @@ -12,7 +12,7 @@ auto-tester-build: echo "Darwin_64_32_disabled" else auto-tester-build: - $(QUIET)$(MAKE) -C src -f posix.mak auto-tester-build ENABLE_RELEASE=1 + $(QUIET)$(MAKE) -C src -f posix.mak auto-tester-build ENABLE_RELEASE=1 ENABLE_ASSERTS=1 endif ifneq (,$(findstring Darwin_64_32, $(PWD))) diff --git a/src/build.d b/src/build.d index 184b293135..8d9d839223 100755 --- a/src/build.d +++ b/src/build.d @@ -99,8 +99,9 @@ BUILD: release (default) | debug (enabled a build with debug instructions) Opt-in build features: -ENABLE_RELEASE: Optimized release built +ENABLE_RELEASE: Optimized release build ENABLE_DEBUG: Add debug instructions and symbols (set if ENABLE_RELEASE isn't set) +ENABLE_ASSERTS: Don't use -release if ENABLE_RELEASE is set ENABLE_LTO: Enable link-time optimizations ENABLE_UNITTEST: Build dmd with unittests (sets ENABLE_COVERAGE=1) ENABLE_PROFILE: Build dmd with a profiling recorder (D) @@ -1034,7 +1035,9 @@ void processEnvironment() } if (env.getNumberedBool("ENABLE_RELEASE")) { - dflags ~= ["-O", "-release", "-inline"]; + dflags ~= ["-O", "-inline"]; + if (!env.getNumberedBool("ENABLE_ASSERTS")) + dflags ~= ["-release"]; } else { diff --git a/src/posix.mak b/src/posix.mak index 96495b8354..db0bf7625e 100644 --- a/src/posix.mak +++ b/src/posix.mak @@ -15,8 +15,9 @@ # # Opt-in build features: # -# ENABLE_RELEASE: Optimized release built +# ENABLE_RELEASE: Optimized release build # ENABLE_DEBUG: Add debug instructions and symbols (set if ENABLE_RELEASE isn't set) +# ENABLE_ASSERTS: Don't use -release if ENABLE_RELEASE is set # ENABLE_LTO: Enable link-time optimizations # ENABLE_UNITTEST: Build dmd with unittests (sets ENABLE_COVERAGE=1) # ENABLE_PROFILE: Build dmd with a profiling recorder (D) diff --git a/src/win32.mak b/src/win32.mak index ae2926dd58..137732505a 100644 --- a/src/win32.mak +++ b/src/win32.mak @@ -71,7 +71,7 @@ DMDMAKE=$(MAKE) -fwin32.mak MAKE="$(MAKE)" HOST_DC="$(HOST_DC)" MODEL=$(MODEL) C ############################### Rule Variables ############################### -RUN_BUILD=$(GEN)\build.exe --called-from-make "OS=$(OS)" "BUILD=$(BUILD)" "MODEL=$(MODEL)" "HOST_DMD=$(HOST_DMD)" "HOST_DC=$(HOST_DC)" "MAKE=$(MAKE)" VERBOSE=$(VERBOSE) "ENABLE_RELEASE=$(ENABLE_RELEASE)" "ENABLE_DEBUG=$(ENABLE_DEBUG)" "ENABLE_UNITTEST=$(ENABLE_UNITTEST)" "ENABLE_PROFILE=$(ENABLE_PROFILE)" "ENABLE_COVERAGE=$(ENABLE_COVERAGE)" "DFLAGS=$(DFLAGS)" +RUN_BUILD=$(GEN)\build.exe --called-from-make "OS=$(OS)" "BUILD=$(BUILD)" "MODEL=$(MODEL)" "HOST_DMD=$(HOST_DMD)" "HOST_DC=$(HOST_DC)" "MAKE=$(MAKE)" VERBOSE=$(VERBOSE) "ENABLE_RELEASE=$(ENABLE_RELEASE)" "ENABLE_DEBUG=$(ENABLE_DEBUG)" "ENABLE_ASSERTS=$(ENABLE_ASSERTS)" "ENABLE_UNITTEST=$(ENABLE_UNITTEST)" "ENABLE_PROFILE=$(ENABLE_PROFILE)" "ENABLE_COVERAGE=$(ENABLE_COVERAGE)" "DFLAGS=$(DFLAGS)" ############################## Release Targets ############################### @@ -79,7 +79,7 @@ defaulttarget: $G debdmd # FIXME: Windows test suite uses src/dmd.exe instead of $(GENERATED)/dmd.exe auto-tester-build: $(GEN)\build.exe - $(RUN_BUILD) "ENABLE_RELEASE=1" $@ + $(RUN_BUILD) "ENABLE_RELEASE=1" "ENABLE_ASSERTS=1" $@ copy $(TARGETEXE) . dmd: $G reldmd @@ -109,6 +109,11 @@ reldmd: check-host-dc reldmd-make reldmd-make: $(GEN)\build.exe $(RUN_BUILD) "ENABLE_RELEASE=1" $(TARGETEXE) +reldmd-asserts: check-host-dc reldmd-asserts-make + +reldmd-asserts-make: $(GEN)\build.exe + $(RUN_BUILD) "ENABLE_RELEASE=1" "ENABLE_ASSERTS=1" $(TARGETEXE) + # Don't use ENABLE_RELEASE=1 to avoid -inline profile: $(DMDMAKE) "ENABLE_PROFILE=1" "DFLAGS=-O -release" $(TARGETEXE) diff --git a/src/win64.mak b/src/win64.mak index 80d2f666bc..4c1a1524fa 100644 --- a/src/win64.mak +++ b/src/win64.mak @@ -45,6 +45,8 @@ debdmd : $(DEPENDENCIES) $(MAKE_WIN32) $@ reldmd : $(DEPENDENCIES) $(MAKE_WIN32) $@ +reldmd-asserts : $(DEPENDENCIES) + $(MAKE_WIN32) $@ detab : $(DEPENDENCIES) $(MAKE_WIN32) $@ tolf : $(DEPENDENCIES)