diff --git a/.github/workflows/macos-ci.yml b/.github/workflows/macos-ci.yml index f4c4df8a1..024f45168 100644 --- a/.github/workflows/macos-ci.yml +++ b/.github/workflows/macos-ci.yml @@ -21,49 +21,28 @@ jobs: fail-fast: false matrix: os: - #- macos-11 - - macos-12 + # x86-64 + - macos-13 + # M1 processor + #- macos-14 compiler: - clang - gcc - homebrew-gl: - - true - # - false - homebrew-al: - - true - - false steps: + # specific setup for Python on Mac to ensure Python Version align + - name: Python Setup on Mac + uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0 + with: + python-version: 3.12.8 # The following dependencies are already present within macos-* images: - # - clang (llvm) - # - cmake - # - expat - # - gcc - # - git - # - jpeg - # - libpng - # - libvorbis - # - python - - name: Install dependencies using homebrew - run: brew install boost-python3 gtk+3 gtkglext sdl - - # The following Apple-provided libraries are deprecated: - # * OpenGL as of macOS 10.14 - # * GLUT as of macOS 10.9 - - name: Optionally install homebrewed OpenGL and GLUT - if: ${{ matrix.homebrew-gl }} - run: | - brew install mesa mesa-glu freeglut - ln -s /usr/local/include/GL /usr/local/include/OpenGL - ln -s /usr/local/include/GL /usr/local/include/GLUT - # ln -s /usr/local/lib/libGL.dylib /usr/local/lib/libOpenGL.dylib - # find /usr/local/lib/ -iname '*gl*.dylib' - - # The Apple-provided OpenAL is deprecated as of macOS 10.15 - - name: Optionally install homebrewed OpenAL - if: ${{ matrix.homebrew-al }} - run: brew install openal-soft + # MacOS has a Developers Tools package from Apple that gets installed which + # provides some minimal functionality: + # XCode (which uses CLang/LLVM) + # git + - name: Install the latest version of Bash so we can rely on it + run: brew install bash - name: Check out repository uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 #v4.1.1 @@ -76,6 +55,11 @@ jobs: if: github.event.pull_request run: git checkout HEAD^2 + - name: Bootstrap MacOS + run: script/bootstrap-mac.sh + + # Note: it might be good to use a step to detect where OpenAL-Soft is + # installed and set it to a GHA variable that can be consumed below - name: Build it env: MY_OS_NAME: macos diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt index 910df8b76..5ce7277d7 100644 --- a/engine/CMakeLists.txt +++ b/engine/CMakeLists.txt @@ -130,7 +130,7 @@ CONFIGURE_FILE(src/version.h.in ${Vega_Strike_BINARY_DIR}/setup/src/include/vers MESSAGE("== Vega Strike Version: ${VEGASTRIKE_VERSION_LONG_STR}") -SET(CMAKE_CXX_STANDARD 11) +SET(CMAKE_CXX_STANDARD 14) SET(CMAKE_CXX_STANDARD_REQUIRED TRUE) SET(CMAKE_CXX_EXTENSIONS ON) SET(CMAKE_C_STANDARD 11) @@ -159,6 +159,10 @@ SET(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") SET(CMAKE_INSTALL_UCRT_LIBRARIES TRUE) INCLUDE(InstallRequiredSystemLibraries) +IF (XCODE) + SET(CMAKE_FIND_FRAMEWORK "LAST") +ENDIF (XCODE) + IF (UNIX) INCLUDE_DIRECTORIES( ${Vega_Strike_SOURCE_DIR}/src diff --git a/script/bootstrap-mac.sh b/script/bootstrap-mac.sh new file mode 100755 index 000000000..1ede0107b --- /dev/null +++ b/script/bootstrap-mac.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash +set -e + +DETECT_MAC_OS_VERSION=$(sw_vers -productVersion | cut -f 1,2 -d '.') +echo "Detected Mac OS X Version: ${DETECT_MAC_OS_VERSION}" + +MAC_OS_NAME="UNKOWN" +case "${DETECT_MAC_OS_VERSION}" in + "10.13") + MAC_OS_NAME="High_Sierra" + echo "Unsupported Mac Version" + exit 2 + ;; + "10.14") + MAC_OS_NAME="Mojave" + echo "Unsupported Mac Version" + exit 2 + ;; + "10.15") + MAC_OS_NAME="Catalina" + echo "Unsupported Mac Version" + exit 2 + ;; + "11.*") + MAC_OS_NAME="Big_Sur" + echo "Unsupported Mac Version" + exit 2 + ;; + "12.*") + MAC_OS_NAME="Monterey" + echo "Unsupported Mac Version" + exit 2 + ;; + "13.0"|"13.1"|"13.2"|"13.3"|"13.4"|"13.5"|"13.6"|"13.7") + MAC_OS_NAME="Ventura" + ;; + "14.0"|"14.1"|"14.2"|"14.3"|"14.4"|"14.5"|"14.6"|"14.7") + MAC_OS_NAME="Sonoma" + ;; + "15.0"|"15.1"|"15.2"|"15.3"|"15.4"|"15.5"|"15.6"|"15.7") + MAC_OS_NAME="Sequoia" + ;; + *) + echo "Unknown Mac Release: ${DETECT_MAC_OS_VERSION}" + exit 1 + ;; +esac + +echo "Detected Mac OS X ${DETECT_MAC_OS_VERSION} - ${MAC_OS_NAME}" +# While we may be able to assume some other dependencies there does seem to be +# some changes between versions of MacOS on which are provided by default; so +# aside from the two above we should just go ahead an install everything ourselves. + +# Install the stuff we know needs to get installed all the time +brew install \ + gcc \ + cmake \ + python3 \ + boost-python3 \ + jpeg \ + libpng \ + gtk+3 \ + gtkglext \ + sdl2 + +# The following Apple-provided libraries are deprecated: +# * OpenGL as of macOS 10.14 +# * GLUT as of macOS 10.9 +brew install mesa mesa-glu freeglut +ln -s $(brew --prefix)/include/GL $(brew --prefix)/include/OpenGL +ln -s $(brew --prefix)/include/GL $(brew --prefix)/include/GLUT +# ln -s $(brew --prefix)/lib/libGL.dylib $(brew --prefix)/lib/libOpenGL.dylib +# find $(brew --prefix)/lib/ -iname '*gl*.dylib' + +# MacOS 13+ needs Vorbis support +brew install vorbis-tools + +# The Apple-provided OpenAL is deprecated as of macOS 10.15 +brew install openal-soft freealut diff --git a/script/cibuild b/script/cibuild index c4e2ffc28..07c2a6078 100755 --- a/script/cibuild +++ b/script/cibuild @@ -56,6 +56,41 @@ then docker rm $DOCKER_CONTAINER_NAME elif [ "$MY_OS_NAME" == "macos" ] then + # setup the environment for Homebrew + BUILD_WITH_PYTHON_VERSION="3.12" + + HOMEBREW_PREFIX="$(brew --prefix)" + HOMEBREW_BIN="${HOMEBREW_PREFIX}/bin" + HOMEBREW_PYTHON_BIN="$(brew --prefix python)/libexec/bin" + + # NOTE: we do not support builds on MacOS ARM right now as there are some linker errors. + # Any help in making those work would be appreciated. + + echo "Build With Python Version: ${BUILD_WITH_PYTHON_VERSION}" + echo " Homebrew Prefix: ${HOMEBREW_PREFIX}" + echo " Homebrew Bin: ${HOMEBREW_BIN}" + echo " Homebrew Python Bin: ${HOMEBREW_PYTHON_BIN}" + + # Homebrew tooling needs to come first in the path search + export PATH=${HOMEBREW_BIN}:${HOMEBREW_PYTHON_BIN}:${PATH} + + HOMEBREW_PYTHON_VERSION=$(${HOMEBREW_BIN}/python${BUILD_WITH_PYTHON_VERSION} -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')") + echo " Detected Python Version: ${HOMEBREW_PYTHON_VERSION}" + + # Ensure it uses the correct Python version + # Do not set PYTHONHOME or PYTHONPATH; otherwise some odd errors will come up as + # it's not necessary + export HOMEBREW_PYTHON3_CFLAGS="$(${HOMEBREW_BIN}/python${BUILD_WITH_PYTHON_VERSION}-config --cflags)" + export HOMEBREW_PYTHON3_LDFLAGS="$(${HOMEBREW_BIN}/python${BUILD_WITH_PYTHON_VERSION}-config --ldflags)" + echo " Homebrew Python CFlags: ${HOMEBREW_PYTHON3_CLFLAGS}" + echo " Homebrew Python LDFlags: ${HOMEBREW_PYTHON3_LDFLAGS}" + + # Homebrew needs certain flags set so its installation parts are found + export CFLAGS="-I${HOMEBREW_PREFIX}/include ${HOMEBREW_PYTHON3_CFLAGS} ${CFLAGS}" + export LDFLAGS="-L${HOMEBREW_PREFIX}/lib ${HOMEBREW_PYTHON3_LDFLAGS} ${LDFLAGS}" + echo " CFlags: ${CFLAGS}" + echo " LDFlags: ${LDFLAGS}" + script/build -DCMAKE_BUILD_TYPE=RelWithDebInfo $@ # On macOS, the following is done by the calling CI workflow # ctest -V