diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7c36220b..c3e2f2dc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -58,6 +58,11 @@ jobs: uses: rlalik/setup-cpp-compiler@master with: compiler: ${{ matrix.compiler }} + - name: Setup emsdk + uses: mymindstorm/setup-emsdk@v14 + with: + version: 3.1.51 + actions-cache-folder: 'emsdk-cache' - name: fetch artifact first to reduce HTTP requests env: CC: ${{ steps.install_cc.outputs.cc }} @@ -65,6 +70,23 @@ jobs: make artifact make ENABLE_SYSTEM=1 artifact make ENABLE_ARCH_TEST=1 artifact + # Hack Cloudflare 403 Forbidden on GitHub Runner for Doom artifact download + wget --header="User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0" \ + --header="Referer: https://www.doomworld.com/" \ + --header="Accept-Language: en-US,en;q=0.9" \ + -O build/shareware_doom_iwad.zip \ + "https://www.doomworld.com/3ddownloads/ports/shareware_doom_iwad.zip" + unzip -d build/ build/shareware_doom_iwad.zip + if: ${{ always() }} + - name: default build using emcc + run: | + make CC=emcc -j$(nproc) + if: ${{ always() }} + - name: default build for system emulation using emcc + run: | + make distclean + make CC=emcc ENABLE_SYSTEM=1 -j$(nproc) + make distclean ENABLE_SYSTEM=1 if: ${{ always() }} - name: default build with -g env: diff --git a/mk/system.mk b/mk/system.mk index 559a50a5..14d73591 100644 --- a/mk/system.mk +++ b/mk/system.mk @@ -12,9 +12,17 @@ $(BUILD_DTB): $(DEV_SRC)/minimal.dts $(VECHO) " DTC\t$@\n" $(Q)$(CC) -nostdinc -E -P -x assembler-with-cpp -undef $(CFLAGS_dt) $^ | $(DTC) - > $@ +# Assume the system has either GCC or Clang +NATIVE_CC := $(shell which gcc || which clang) + BIN_TO_C := $(OUT)/bin2c $(BIN_TO_C): tools/bin2c.c +# emcc generates wasm but not executable, so fallback to use GCC or Clang +ifeq ("$(CC_IS_EMCC)", "1") + $(Q)$(NATIVE_CC) -Wall -o $@ $^ +else $(Q)$(CC) -Wall -o $@ $^ +endif BUILD_DTB2C := src/minimal_dtb.h $(BUILD_DTB2C): $(BIN_TO_C) $(BUILD_DTB) diff --git a/mk/toolchain.mk b/mk/toolchain.mk index b81fcc3e..eef08de3 100644 --- a/mk/toolchain.mk +++ b/mk/toolchain.mk @@ -52,6 +52,10 @@ else ifneq ($(shell $(CC) --version | grep "Free Software Foundation"),) CC_IS_GCC := 1 endif +ifeq ("$(CC_IS_CLANG)$(CC_IS_GCC)$(CC_IS_EMCC)", "") +$(error "Only supported GCC/Clang/Emcc") +endif + CFLAGS_NO_CET := processor := $(shell uname -m) ifeq ($(processor),$(filter $(processor),i386 x86_64))