From fbe86b5322dd0005944bdb69f62f502b5cecae44 Mon Sep 17 00:00:00 2001 From: Evan Nemerson Date: Fri, 13 Sep 2024 00:10:14 -0400 Subject: [PATCH] ci: add CI build for Digital Mars C/C++ Compiler --- .github/workflows/ci.yml | 158 ++++++++++++++++++++++++--------------- test/Makefile | 10 +-- test/Makefile.dmc | 78 +++++++++---------- 3 files changed, 140 insertions(+), 106 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1b24ef5..0d8e712 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,75 +23,109 @@ jobs: - name: Check for changes run: git diff --exit-code - nvhpc: - runs-on: ubuntu-latest + dmc: + runs-on: windows-latest strategy: matrix: version: - # For available versions, see https://developer.download.nvidia.com/hpc-sdk/ubuntu/amd64/Packages - - "20.11" - # - "21.1" ## BROKEN. File size mismatch. - # - "21.2" - # - "21.3" - # - "21.5" - # - "21.7" - # - "21.9" - # - "21.11" - # - "22.1" - # - "22.2" - # - "22.3" - # - "22.5" - # - "22.7" - # - "22.9" - # - "22.11" - # - "23.1" - # - "23.3" - # - "23.5" - # - "23.7" - # - "23.9" - # - "23.11" - # - "24.1" - # - "24.3" - - "24.7" + # - "8.26" + # - "8.35" + # - "8.36" + # - "8.37" + - "8.38" + - "8.39" + # - "8.40" + # - "8.45" + # - "8.50" + # - "8.57" steps: - uses: actions/checkout@v4 - - name: Free some disk space - run: sudo rm -rf /usr/local/lib/android /usr/local/.ghcup/ghc - - name: Install NVidia HPC SDK + - name: Install Digital Mars C/C++ Compiler run: | - curl https://developer.download.nvidia.com/hpc-sdk/ubuntu/DEB-GPG-KEY-NVIDIA-HPC-SDK | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg - echo 'deb [signed-by=/usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg] https://developer.download.nvidia.com/hpc-sdk/ubuntu/amd64 /' | sudo tee /etc/apt/sources.list.d/nvhpc.list - sudo apt-get update -y - sudo apt-get install -y nvhpc-$(echo "${{ matrix.version }}" | tr '.' '-') - - name: Compile - env: - CC: /opt/nvidia/hpc_sdk/Linux_x86_64/"${{ matrix.version }}"/compilers/bin/nvc - CXX: /opt/nvidia/hpc_sdk/Linux_x86_64/"${{ matrix.version }}"/compilers/bin/nvc++ + $version = "${{ matrix.version }}".Replace(".", "") + $url = "http://ftp.digitalmars.com/Digital_Mars_C++/Patch/dm${version}c.zip" + Invoke-WebRequest -Uri "${url}" -OutFile "dmc.zip" + Expand-Archive -LiteralPath "dmc.zip" -DestinationPath dmc-tmp + Move-Item -Path dmc-tmp\* -Destination dmc working-directory: test - run: make - - pelles-c: - runs-on: windows-latest - strategy: - matrix: - version: - # https://community.chocolatey.org/packages/pelles-c#versionhistory - - "12.0.2" - - "11.0.2" - - "10.0.6" - - "9.00.0.0" - # - "8.00.0.0" ## Installation times out. - steps: - - uses: actions/checkout@v2 - - name: Install Pelles-C - uses: crazy-max/ghaction-chocolatey@v3 - with: - args: install pelles-c --version "${{ matrix.version }}" --no-progress + - name: Debug + run: dir test\dmc\bin - name: Compile env: - CC: 'C:\Program Files\PellesC\bin\pocc.exe' - LD: 'C:\Program Files\PellesC\bin\polink.exe' - CFLAGS: '/IC:\Progra~1\PellesC\Include' - LDFLAGS: '/LIBPATH:C:\Progra~1\PellesC\lib /LIBPATH:C:\Progra~1\PellesC\Lib\Win64' + CC: dmc\bin\dmc.exe + CXX: dmc\bin\dmc.exe + run: make -f Makefile.dmc working-directory: test - run: make -f Makefile.pelles + + # nvhpc: + # runs-on: ubuntu-latest + # strategy: + # matrix: + # version: + # # For available versions, see https://developer.download.nvidia.com/hpc-sdk/ubuntu/amd64/Packages + # - "20.11" + # # - "21.1" ## BROKEN. File size mismatch. + # # - "21.2" + # # - "21.3" + # # - "21.5" + # # - "21.7" + # # - "21.9" + # # - "21.11" + # # - "22.1" + # # - "22.2" + # # - "22.3" + # # - "22.5" + # # - "22.7" + # # - "22.9" + # # - "22.11" + # # - "23.1" + # # - "23.3" + # # - "23.5" + # # - "23.7" + # # - "23.9" + # # - "23.11" + # # - "24.1" + # # - "24.3" + # - "24.7" + # steps: + # - uses: actions/checkout@v4 + # - name: Free some disk space + # run: sudo rm -rf /usr/local/lib/android /usr/local/.ghcup/ghc + # - name: Install NVidia HPC SDK + # run: | + # curl https://developer.download.nvidia.com/hpc-sdk/ubuntu/DEB-GPG-KEY-NVIDIA-HPC-SDK | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg + # echo 'deb [signed-by=/usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg] https://developer.download.nvidia.com/hpc-sdk/ubuntu/amd64 /' | sudo tee /etc/apt/sources.list.d/nvhpc.list + # sudo apt-get update -y + # sudo apt-get install -y nvhpc-$(echo "${{ matrix.version }}" | tr '.' '-') + # - name: Compile + # env: + # CC: /opt/nvidia/hpc_sdk/Linux_x86_64/"${{ matrix.version }}"/compilers/bin/nvc + # CXX: /opt/nvidia/hpc_sdk/Linux_x86_64/"${{ matrix.version }}"/compilers/bin/nvc++ + # working-directory: test + # run: make + + # pelles-c: + # runs-on: windows-latest + # strategy: + # matrix: + # version: + # # https://community.chocolatey.org/packages/pelles-c#versionhistory + # - "12.0.2" + # - "11.0.2" + # - "10.0.6" + # - "9.00.0.0" + # # - "8.00.0.0" ## Installation times out. + # steps: + # - uses: actions/checkout@v2 + # - name: Install Pelles-C + # uses: crazy-max/ghaction-chocolatey@v3 + # with: + # args: install pelles-c --version "${{ matrix.version }}" --no-progress + # - name: Compile + # env: + # CC: 'C:\Program Files\PellesC\bin\pocc.exe' + # LD: 'C:\Program Files\PellesC\bin\polink.exe' + # CFLAGS: '/IC:\Progra~1\PellesC\Include' + # LDFLAGS: '/LIBPATH:C:\Progra~1\PellesC\lib /LIBPATH:C:\Progra~1\PellesC\Lib\Win64' + # working-directory: test + # run: make -f Makefile.pelles diff --git a/test/Makefile b/test/Makefile index 205be6b..a35a5b7 100644 --- a/test/Makefile +++ b/test/Makefile @@ -189,12 +189,12 @@ Makefile.iar: Makefile Makefile.dmc: Makefile @$(ECHO) -e "# Generated by Makefile. Do not edit.\r" > $@ - @$(ECHO) -e "CC = \"dmc.exe\"\r" >> $@ - @$(ECHO) -e "CXX = \x24(CC)\r" >> $@ + @$(ECHO) -e "CC ?= \"dmc.exe\"\r" >> $@ + @$(ECHO) -e "CXX ?= \x24(CC)\r" >> $@ @$(ECHO) -e "\r" >> $@ - @$(ECHO) -e "CFLAGS = -w -w17 -w18 -wx\r" >> $@ - @$(ECHO) -e "CXXFLAGS = -wc \x24(CFLAGS)\r" >> $@ + @$(ECHO) -e "CFLAGS ?= -w -w17 -w18 -wx\r" >> $@ + @$(ECHO) -e "CXXFLAGS ?= -wc \x24(CFLAGS)\r" >> $@ @$(ECHO) -e "\r" >> $@ @$(ECHO) -e "TESTS = \x5c\r" >> $@ @@ -208,7 +208,7 @@ Makefile.dmc: Makefile @$(ECHO) -e "all: \x24(TESTS)\r\n\r" >> $@ @$(ECHO) -e "clean:\r\n\tdel /Q \x24(CLEANFILES)\r\n\r" >> $@ - @$(foreach file,$(TESTS),$(ECHO) -e "$(file:=.exe): $(file:=.c)\r\n\t\x24(CC) \x24(CFLAGS) -o \x24(@) \x24(?)\r\n$(file:=.cpp): $(file:=.c)\r\n\tcopy /Y \x24(?) \x24(@) >NUL\r\n$(file:=-cpp.exe): $(file:=.cpp)\r\n\t\x24(CXX) \x24(CXXFLAGS) -o \x24(@) \x24(?)\r\n\r" >> $@;) + @$(foreach file,$(TESTS),$(ECHO) -e "$(file:=.exe): $(file:=.c)\r\n\t\x24(CC) \x24(CFLAGS) -o \x24(@) \x24(?)\r\n$(file:=.cpp): $(file:=.c)\r\n\tcp -f \x24(?) \x24(@)\r\n$(file:=-cpp.exe): $(file:=.cpp)\r\n\t\x24(CXX) \x24(CXXFLAGS) -o \x24(@) \x24(?)\r\n\r" >> $@;) Makefile.msvc: Makefile @$(ECHO) -e "# Generated by Makefile. Do not edit.\r" > $@ diff --git a/test/Makefile.dmc b/test/Makefile.dmc index 2f52f12..601a25b 100644 --- a/test/Makefile.dmc +++ b/test/Makefile.dmc @@ -1,9 +1,9 @@ # Generated by Makefile. Do not edit. -CC = "dmc.exe" -CXX = $(CC) +CC ?= "dmc.exe" +CXX ?= $(CC) -CFLAGS = -w -w17 -w18 -wx -CXXFLAGS = -wc $(CFLAGS) +CFLAGS ?= -w -w17 -w18 -wx +CXXFLAGS ?= -wc $(CFLAGS) TESTS = \ array-param.exe array-param-cpp.exe \ @@ -89,245 +89,245 @@ clean: array-param.exe: array-param.c $(CC) $(CFLAGS) -o $(@) $(?) array-param.cpp: array-param.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) array-param-cpp.exe: array-param.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) assume.exe: assume.c $(CC) $(CFLAGS) -o $(@) $(?) assume.cpp: assume.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) assume-cpp.exe: assume.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) cast.exe: cast.c $(CC) $(CFLAGS) -o $(@) $(?) cast.cpp: cast.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) cast-cpp.exe: cast.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) concat.exe: concat.c $(CC) $(CFLAGS) -o $(@) $(?) concat.cpp: concat.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) concat-cpp.exe: concat.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) const.exe: const.c $(CC) $(CFLAGS) -o $(@) $(?) const.cpp: const.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) const-cpp.exe: const.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) constant.exe: constant.c $(CC) $(CFLAGS) -o $(@) $(?) constant.cpp: constant.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) constant-cpp.exe: constant.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) deprecated.exe: deprecated.c $(CC) $(CFLAGS) -o $(@) $(?) deprecated.cpp: deprecated.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) deprecated-cpp.exe: deprecated.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) empty-bases.exe: empty-bases.c $(CC) $(CFLAGS) -o $(@) $(?) empty-bases.cpp: empty-bases.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) empty-bases-cpp.exe: empty-bases.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) fallthrough.exe: fallthrough.c $(CC) $(CFLAGS) -o $(@) $(?) fallthrough.cpp: fallthrough.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) fallthrough-cpp.exe: fallthrough.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) flags.exe: flags.c $(CC) $(CFLAGS) -o $(@) $(?) flags.cpp: flags.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) flags-cpp.exe: flags.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) inline.exe: inline.c $(CC) $(CFLAGS) -o $(@) $(?) inline.cpp: inline.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) inline-cpp.exe: inline.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) likely.exe: likely.c $(CC) $(CFLAGS) -o $(@) $(?) likely.cpp: likely.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) likely-cpp.exe: likely.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) malloc.exe: malloc.c $(CC) $(CFLAGS) -o $(@) $(?) malloc.cpp: malloc.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) malloc-cpp.exe: malloc.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) message.exe: message.c $(CC) $(CFLAGS) -o $(@) $(?) message.cpp: message.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) message-cpp.exe: message.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) noinline.exe: noinline.c $(CC) $(CFLAGS) -o $(@) $(?) noinline.cpp: noinline.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) noinline-cpp.exe: noinline.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) no-escape.exe: no-escape.c $(CC) $(CFLAGS) -o $(@) $(?) no-escape.cpp: no-escape.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) no-escape-cpp.exe: no-escape.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) no-return.exe: no-return.c $(CC) $(CFLAGS) -o $(@) $(?) no-return.cpp: no-return.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) no-return-cpp.exe: no-return.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) non-null.exe: non-null.c $(CC) $(CFLAGS) -o $(@) $(?) non-null.cpp: non-null.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) non-null-cpp.exe: non-null.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) predict.exe: predict.c $(CC) $(CFLAGS) -o $(@) $(?) predict.cpp: predict.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) predict-cpp.exe: predict.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) printf-format.exe: printf-format.c $(CC) $(CFLAGS) -o $(@) $(?) printf-format.cpp: printf-format.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) printf-format-cpp.exe: printf-format.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) pure.exe: pure.c $(CC) $(CFLAGS) -o $(@) $(?) pure.cpp: pure.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) pure-cpp.exe: pure.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) require.exe: require.c $(CC) $(CFLAGS) -o $(@) $(?) require.cpp: require.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) require-cpp.exe: require.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) restrict.exe: restrict.c $(CC) $(CFLAGS) -o $(@) $(?) restrict.cpp: restrict.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) restrict-cpp.exe: restrict.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) returns-non-null.exe: returns-non-null.c $(CC) $(CFLAGS) -o $(@) $(?) returns-non-null.cpp: returns-non-null.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) returns-non-null-cpp.exe: returns-non-null.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) sentinel.exe: sentinel.c $(CC) $(CFLAGS) -o $(@) $(?) sentinel.cpp: sentinel.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) sentinel-cpp.exe: sentinel.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) static-assert.exe: static-assert.c $(CC) $(CFLAGS) -o $(@) $(?) static-assert.cpp: static-assert.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) static-assert-cpp.exe: static-assert.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) stringify.exe: stringify.c $(CC) $(CFLAGS) -o $(@) $(?) stringify.cpp: stringify.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) stringify-cpp.exe: stringify.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) unknown-cpp-attributes.exe: unknown-cpp-attributes.c $(CC) $(CFLAGS) -o $(@) $(?) unknown-cpp-attributes.cpp: unknown-cpp-attributes.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) unknown-cpp-attributes-cpp.exe: unknown-cpp-attributes.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) unknown-pragmas.exe: unknown-pragmas.c $(CC) $(CFLAGS) -o $(@) $(?) unknown-pragmas.cpp: unknown-pragmas.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) unknown-pragmas-cpp.exe: unknown-pragmas.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) unavailable.exe: unavailable.c $(CC) $(CFLAGS) -o $(@) $(?) unavailable.cpp: unavailable.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) unavailable-cpp.exe: unavailable.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) unreachable.exe: unreachable.c $(CC) $(CFLAGS) -o $(@) $(?) unreachable.cpp: unreachable.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) unreachable-cpp.exe: unreachable.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) unused-function.exe: unused-function.c $(CC) $(CFLAGS) -o $(@) $(?) unused-function.cpp: unused-function.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) unused-function-cpp.exe: unused-function.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) visibility.exe: visibility.c $(CC) $(CFLAGS) -o $(@) $(?) visibility.cpp: visibility.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) visibility-cpp.exe: visibility.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) warn.exe: warn.c $(CC) $(CFLAGS) -o $(@) $(?) warn.cpp: warn.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) warn-cpp.exe: warn.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?) warn-unused-result.exe: warn-unused-result.c $(CC) $(CFLAGS) -o $(@) $(?) warn-unused-result.cpp: warn-unused-result.c - copy /Y $(?) $(@) >NUL + cp -f $(?) $(@) warn-unused-result-cpp.exe: warn-unused-result.cpp $(CXX) $(CXXFLAGS) -o $(@) $(?)