From f3f89ca5b600c76659fe4b7c0cd389cdfb55b077 Mon Sep 17 00:00:00 2001 From: Martin Kinkelin Date: Wed, 13 Dec 2023 23:08:56 +0100 Subject: [PATCH] CI: Adapt to generic Makefile for Phobos --- .azure-pipelines/windows-msbuild.bat | 15 +++------ .azure-pipelines/windows-visual-studio.sh | 16 --------- .azure-pipelines/windows.sh | 18 +++------- .circleci/run.sh | 4 +-- .github/workflows/runnable_cxx.yml | 40 +++-------------------- ci/run.sh | 4 +-- compiler/src/build.d | 2 +- compiler/src/dmd/mars.d | 2 ++ 8 files changed, 20 insertions(+), 81 deletions(-) diff --git a/.azure-pipelines/windows-msbuild.bat b/.azure-pipelines/windows-msbuild.bat index a9738c3bb0..fc6b5b6133 100644 --- a/.azure-pipelines/windows-msbuild.bat +++ b/.azure-pipelines/windows-msbuild.bat @@ -18,15 +18,11 @@ set DMD=%DMD_DIR%\generated\Windows\%CONFIGURATION%\%PLATFORM%\dmd.exe set VISUALD_INSTALLER=VisualD-%VISUALD_VER%.exe set N=3 -set DM_MAKE=%DMD_DIR%\dm\path\make.exe set LDC_DIR=%DMD_DIR%\ldc2-%LDC_VERSION%-windows-multilib if "%D_COMPILER%" == "ldc" set HOST_DMD=%LDC_DIR%\bin\ldmd2.exe if "%D_COMPILER%" == "dmd" set HOST_DMD=%DMD_DIR%\dmd2\windows\bin\dmd.exe -set MSVC_CC=cl.exe -FOR /F "tokens=* USEBACKQ" %%F IN (`where lib.exe`) DO (SET MSVC_AR=%%~fsF) - REM add grep to PATH set PATH=%DMD_DIR%\tools;%PATH% echo %PATH% @@ -48,10 +44,7 @@ echo [STEP]: Building druntime make -j%N% -C "%DMD_DIR%\druntime" MODEL=%MODEL% "DMD=%DMD%" || exit /B 2 echo [STEP]: Building phobos -cd "%DMD_DIR%\..\phobos" -"%DM_MAKE%" -f win64.mak MODEL=%MODEL% "DMD=%DMD%" "VCDIR=%VCINSTALLDIR%." "CC=%MSVC_CC%" "AR=%MSVC_AR%" "MAKE=%DM_MAKE%" "DRUNTIME=%DMD_DIR%\druntime" "DRUNTIMELIB=%DMD_DIR%\generated\windows\release\%MODEL%\druntime.lib" || exit /B 3 -:: The expected Phobos filename for 32-bit COFF is phobos32mscoff.lib, not phobos32.lib. -if "%MODEL%" == "32" ren phobos32.lib phobos32mscoff.lib || exit /B 3 +make -j%N% -C "%DMD_DIR%\..\phobos" MODEL=%MODEL% "DMD=%DMD%" "DMD_DIR=%DMD_DIR%" || exit /B 3 echo [STEP]: Building run.d testrunner and its tools REM needs to be done before tampering with LIB and DFLAGS env variables (affecting the ldmd2 host compiler too) @@ -94,11 +87,11 @@ if not "%C_RUNTIME%" == "mingw" goto not_mingw echo [STEP]: Building and running druntime tests cd "%DMD_DIR%\druntime" -make -j%N% MODEL=%MODEL% "DMD=%DMD%" "CC=%MSVC_CC%" %DRUNTIME_TESTS_TARGET% || exit /B 5 +make -j%N% MODEL=%MODEL% "DMD=%DMD%" %DRUNTIME_TESTS_TARGET% || exit /B 5 echo [STEP]: Running DMD testsuite cd "%DMD_DIR%\compiler\test" -run.exe --environment --jobs=%N% %DMD_TESTS% "ARGS=-O -inline -g" "BUILD=%CONFIGURATION%" "DMD_MODEL=%PLATFORM%" "CC=%MSVC_CC%" || exit /B 6 +run.exe --environment --jobs=%N% %DMD_TESTS% "ARGS=-O -inline -g" "BUILD=%CONFIGURATION%" "DMD_MODEL=%PLATFORM%" CC=cl.exe || exit /B 6 echo [STEP]: Building and running Phobos unittests rem FIXME: lld-link fails to link phobos unittests ("error: relocation against symbol in discarded section: __TMP2427") @@ -108,4 +101,4 @@ if "%D_COMPILER%_%MODEL%" == "ldc_64" copy %LDC_DIR%\lib64\libcurl.dll . if "%D_COMPILER%_%MODEL%" == "ldc_32" copy %LDC_DIR%\lib32\libcurl.dll . if "%D_COMPILER%_%MODEL%" == "dmd_64" copy %DMD_DIR%\dmd2\windows\bin64\libcurl.dll . if "%D_COMPILER%_%MODEL%" == "dmd_32" copy %DMD_DIR%\dmd2\windows\bin\libcurl.dll . -"%DM_MAKE%" -f win64.mak MODEL=%MODEL% "DMD=%DMD%" "VCDIR=%VCINSTALLDIR%." "CC=%MSVC_CC%" "MAKE=%DM_MAKE%" "DRUNTIME=%DMD_DIR%\druntime" "DRUNTIMELIB=%DMD_DIR%\generated\windows\release\%MODEL%\druntime.lib" unittest || exit /B 7 +make -j%N% MODEL=%MODEL% "DMD=%DMD%" "DMD_DIR=%DMD_DIR%" unittest || exit /B 7 diff --git a/.azure-pipelines/windows-visual-studio.sh b/.azure-pipelines/windows-visual-studio.sh index e73f478c1a..a15a24a437 100644 --- a/.azure-pipelines/windows-visual-studio.sh +++ b/.azure-pipelines/windows-visual-studio.sh @@ -40,19 +40,6 @@ visuald() { fi } -################################################################################ -# Download DigitalMars Make -################################################################################ - -dm_make() { - download "https://downloads.dlang.org/other/dm857c.zip" dmc.zip - unzip dmc.zip > /dev/null - export DMC="$PWD/dm/bin/dmc.exe" - export DM_MAKE="$PWD/dm/bin/make.exe" - mkdir -p dm/path - cp "$DMC" "$DM_MAKE" "dm/path" -} - if [ "$D_COMPILER" == "ldc" ]; then echo "[STEP]: Downloading LDC" ldc @@ -64,9 +51,6 @@ fi echo "[STEP]: Downloading VisualD" visuald -echo "[STEP]: Downloading DigitalMars make" -dm_make - echo "[STEP]: Downloading grep" install_grep diff --git a/.azure-pipelines/windows.sh b/.azure-pipelines/windows.sh index f06a8693cd..6b2cdb3e85 100644 --- a/.azure-pipelines/windows.sh +++ b/.azure-pipelines/windows.sh @@ -26,17 +26,14 @@ echo "GREP_VERSION: $(grep --version)" # Prepare DigitalMars make and C compiler ################################################################################ -GNU_MAKE="$(which make)" # must be done before installing dmd (tampers with PATH) -install_host_dmc -DM_MAKE="$PWD/dm/bin/make.exe" +GNU_MAKE="$(which make)" # must be done before installing dmc (tampers with PATH) if [ "$MODEL" == "32omf" ] ; then + install_host_dmc CC="$PWD/dm/bin/dmc.exe" - AR="$PWD/dm/bin/lib.exe" export CPPCMD="$PWD/dm/bin/sppn.exe" else CC="cl.exe" - AR="$(where lib.exe)" # must be done before installing dmd fi ################################################################################ @@ -98,16 +95,9 @@ DMD_BIN_PATH="$DMD_DIR/generated/windows/release/$TOOL_MODEL/dmd.exe" # Build Druntime and Phobos ################################################################################ -LIBS_MAKE_ARGS=(-f "$MAKE_FILE" MODEL=$MODEL DMD="$DMD_BIN_PATH" VCDIR=. CC="$CC" AR="$AR" MAKE="$DM_MAKE") - "$GNU_MAKE" -j$N -C "$DMD_DIR/druntime" MODEL=$MODEL DMD="$DMD_BIN_PATH" -cd "$DMD_DIR/../phobos" -"$DM_MAKE" "${LIBS_MAKE_ARGS[@]}" DRUNTIME="$DMD_DIR\druntime" DRUNTIMELIB="$DMD_DIR/generated/windows/release/$MODEL/druntime.lib" -if [[ "$MODEL" == "32" ]]; then - # the expected Phobos filename for 32-bit COFF is phobos32mscoff.lib, not phobos32.lib - mv phobos32.lib phobos32mscoff.lib -fi +"$GNU_MAKE" -j$N -C "$DMD_DIR/../phobos" MODEL=$MODEL DMD="$DMD_BIN_PATH" CC="$CC" DMD_DIR="$DMD_DIR" ################################################################################ # Run DMD testsuite @@ -183,7 +173,7 @@ else else cp "$DMD_DIR/tools/dmd2/windows/bin/libcurl.dll" . fi - "$DM_MAKE" "${LIBS_MAKE_ARGS[@]}" DRUNTIME="$DMD_DIR\druntime" DRUNTIMELIB="$DMD_DIR/generated/windows/release/$MODEL/druntime.lib" unittest + "$GNU_MAKE" -j$N MODEL=$MODEL DMD="$DMD_BIN_PATH" CC="$CC" DMD_DIR="$DMD_DIR" unittest fi ################################################################################ diff --git a/.circleci/run.sh b/.circleci/run.sh index 4d9b8517ab..3b557c82b2 100755 --- a/.circleci/run.sh +++ b/.circleci/run.sh @@ -118,7 +118,7 @@ coverage() # build dmd, druntime, and phobos $builder MODEL=$MODEL HOST_DMD=$DMD BUILD=$BUILD all make -j$N -C druntime MODEL=$MODEL BUILD=$BUILD - make -j$N -C ../phobos -f posix.mak MODEL=$MODEL BUILD=$BUILD + make -j$N -C ../phobos MODEL=$MODEL BUILD=$BUILD # save the built dmd as host compiler this time # `generated` gets removed in 'clean', so we create another _generated @@ -190,7 +190,7 @@ test_cxx() echo "Test CXX frontend.h header generation" ./compiler/src/build.d make -j$N -C druntime MODEL=$MODEL BUILD=$BUILD - make -j$N -C ../phobos -f posix.mak MODEL=$MODEL BUILD=$BUILD + make -j$N -C ../phobos MODEL=$MODEL BUILD=$BUILD ./compiler/src/build.d cxx-headers-test deactivate } diff --git a/.github/workflows/runnable_cxx.yml b/.github/workflows/runnable_cxx.yml index bf31a8a374..bc8ed24c70 100644 --- a/.github/workflows/runnable_cxx.yml +++ b/.github/workflows/runnable_cxx.yml @@ -277,31 +277,6 @@ jobs: exit 1 fi - # Restore or install dmc (and DM make) - - name: '[Windows] Restore dmc from cache' - id: cache-dmc - if: runner.os == 'Windows' - uses: actions/cache@v3 - with: - path: ${{ github.workspace }}\tools\ - key: ${{ matrix.os }}-dmc857 - - - name: '[Windows] Install dmc' - if: runner.os == 'Windows' && steps.cache-dmc.outputs.cache-hit != 'true' - shell: powershell - run: | - $url = "http://ftp.digitalmars.com/Digital_Mars_C++/Patch/dm857c.zip" - $sha256hash = "F51CDFEB45EAF4FFBF7ABF0FE9B3D548B202B4528401005C2C3192B00BC32367" - Write-Host ('Downloading {0} ...' -f $url) - [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 - $ProgressPreference = 'SilentlyContinue' - New-Item -ItemType directory -Path ${{ github.workspace }}\tools\ - Invoke-WebRequest -Uri $url -OutFile '${{ github.workspace }}\tools\dmc.zip' - if ((Get-FileHash '${{ github.workspace }}\tools\dmc.zip' -Algorithm "SHA256").Hash -ne $sha256hash) { - exit 1 - } - Expand-Archive '${{ github.workspace }}\tools\dmc.zip' -DestinationPath ${{ github.workspace }}\tools\ - - name: '[Windows] Add VC toolset to PATH' if: runner.os == 'Windows' uses: ilammy/msvc-dev-cmd@v1 @@ -310,10 +285,7 @@ jobs: if: runner.os == 'Windows' shell: bash run: | - echo "VISUAL_STUDIO_LIB_NOT_DM=$(which lib.exe)" >> $GITHUB_ENV echo "HOST_DMD=${{ env.DC }}" >> $GITHUB_ENV - echo "GNU_MAKE=$(which make.exe)" >> $GITHUB_ENV - echo "${{ github.workspace }}/tools/dm/bin/" >> $GITHUB_PATH ######################################## # Building DMD, druntime, Phobos # @@ -326,13 +298,13 @@ jobs: # All hosts are 64 bits but let's be explicit ./dmd/compiler/src/build.d -j2 MODEL=64 make -C dmd/druntime -j2 MODEL=64 - make -C phobos -f posix.mak -j2 MODEL=64 + make -C phobos -j2 MODEL=64 # Both version can live side by side (they end up in a different directory) # However, since clang does not provide a multilib package, only test 32 bits with g++ if [ ${{ matrix.compiler }} == "g++" ]; then ./dmd/compiler/src/build.d install -j2 MODEL=32 make -C dmd/druntime install -j2 MODEL=32 - make -C phobos -f posix.mak install -j2 MODEL=32 + make -C phobos install -j2 MODEL=32 fi - name: '[Windows] Build compiler & standard library' @@ -344,12 +316,10 @@ jobs: # Note: Only CC for druntime and AR for Phobos are required ATM, # but providing all three to avoid surprise for future contributors # Those should really be in the path, though. - "$GNU_MAKE" -j2 -C dmd/druntime + make -j2 -C dmd/druntime if [ $? -ne 0 ]; then return 1; fi - cd phobos/ - make -f win64.mak CC=cl.exe LD=link "AR=$VISUAL_STUDIO_LIB_NOT_DM" "DRUNTIMELIB=../dmd/generated/windows/release/64/druntime.lib" + make -j2 -C phobos if [ $? -ne 0 ]; then return 1; fi - cd ../ ######################################## # Running the test suite # @@ -370,7 +340,7 @@ jobs: if: runner.os == 'Windows' shell: bash run: | - "$GNU_MAKE" -j2 -C dmd/druntime test/stdcpp/.run CC=cl.exe LD=link "AR=$VISUAL_STUDIO_LIB_NOT_DM" + make -j2 -C dmd/druntime test/stdcpp/.run if [ $? -ne 0 ]; then return 1; fi ######################################## diff --git a/ci/run.sh b/ci/run.sh index 490cc8f886..01586c420d 100755 --- a/ci/run.sh +++ b/ci/run.sh @@ -63,7 +63,7 @@ build() { generated/build -j$N MODEL=$MODEL HOST_DMD=$DMD DFLAGS="$CI_DFLAGS" BUILD=debug unittest generated/build -j$N MODEL=$MODEL HOST_DMD=$DMD DFLAGS="$CI_DFLAGS" ENABLE_RELEASE=1 dmd make -j$N -C druntime MODEL=$MODEL - make -j$N -C ../phobos -f posix.mak MODEL=$MODEL + make -j$N -C ../phobos MODEL=$MODEL deactivate # deactivate host compiler } @@ -119,7 +119,7 @@ test_druntime() { # build and run Phobos unit tests test_phobos() { - make -j$N -C ../phobos -f posix.mak MODEL=$MODEL unittest + make -j$N -C ../phobos MODEL=$MODEL unittest } # test dub package diff --git a/compiler/src/build.d b/compiler/src/build.d index 85c9de6148..5fee485ce5 100755 --- a/compiler/src/build.d +++ b/compiler/src/build.d @@ -576,7 +576,7 @@ alias dmdPGO = makeRule!((builder, rule) { // Run phobos unittests //TODO makefiles //generated/linux/release/64/unittest/test_runner builds the unittests without running them. - const scope cmd = ["make", "-C", "../phobos", "-j" ~ jobs.to!string, "-fposix.mak", "generated/linux/release/64/unittest/test_runner", "DMD_DIR="~compilerDir]; + const scope cmd = ["make", "-C", "../phobos", "-j" ~ jobs.to!string, "generated/linux/release/64/unittest/test_runner", "DMD_DIR="~compilerDir]; log("%-(%s %)", cmd); if (spawnProcess(cmd, null, Config.init, compilerDir).wait()) stderr.writeln("Phobos Tests failed! This will not end the PGO build because some data may have been gathered"); diff --git a/compiler/src/dmd/mars.d b/compiler/src/dmd/mars.d index a74fcec3cb..6f87beeb38 100644 --- a/compiler/src/dmd/mars.d +++ b/compiler/src/dmd/mars.d @@ -375,6 +375,8 @@ void setDefaultLibrary(ref Param params, const ref Target target) if (driverParams.debuglibname is null) driverParams.debuglibname = driverParams.defaultlibname; + else if (!driverParams.debuglibname.length) // if `-debuglib=` (i.e. an empty debuglib) + driverParams.debuglibname = null; } void printPredefinedVersions(FILE* stream)