diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 490559de..630445be 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -94,3 +94,34 @@ jobs: mkdir build cd build cmake ../ ${OPENLOCO_CMAKE_OPTS} && ninja -k0 + mac: + runs-on: ubuntu-latest + container: openloco/osxcross:latest + steps: + - uses: actions/checkout@v1 + - run: | + ln -s /usr/osxcross/SDK/MacOSX10.13.sdk/System /System + - shell: bash + run: | + curl -L https://github.com/OpenLoco/Dependencies/releases/download/v1.3.0/openloco.dependencies.macos.1.3.0.zip -o dependencies.zip + unzip dependencies.zip -d vcpkg/ + - shell: bash + env: + OSXCROSS_HOST: i386-apple-darwin17 + TOOLCHAIN1: ${{ github.workspace }}/osxcross/tools/toolchain.cmake + TOOLCHAIN2: ${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake + MACOSX_DEPLOYMENT_TARGET: 10.13 + run: | + /usr/osxcross/bin/i386-apple-darwin17-osxcross-conf + eval "$(/usr/osxcross/bin/i386-apple-darwin17-osxcross-conf)" + mkdir build && cd build + export LD_LIBRARY_PATH="/usr/osxcross/lib:$LD_LIBRARY_PATH" + cmake .. "-DCMAKE_TOOLCHAIN_FILE=../cmake/osxcross_toolchain.cmake" -DVCPKG_TARGET_TRIPLET=x86-osx + make -j2 + zip -r openloco.zip openloco.app + - name: Archive production artifacts + uses: actions/upload-artifact@v2 + with: + name: "OpenLoco-macOS" + path: build/openloco.zip + diff --git a/CMakeLists.txt b/CMakeLists.txt index 1d32251e..b95cf8f7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -169,7 +169,7 @@ file(GLOB_RECURSE OLOCO_HEADERS "src/*.h" "src/*.hpp") if (APPLE) file(GLOB_RECURSE OLOCO_MM_SOURCES "src/*.mm") - set_source_files_properties(${OLOCO_MM_SOURCES} PROPERTIES COMPILE_FLAGS "-x objective-c++ -fmodules") + set_source_files_properties(${OLOCO_MM_SOURCES} PROPERTIES COMPILE_FLAGS "-x objective-c++") endif () set(PIE_FLAG "-fno-pie") @@ -217,13 +217,8 @@ find_package(SDL2_mixer REQUIRED) find_package(PNG REQUIRED) -# The hint provided here is targetting Arch Linux, a distro of choice for many contributors -if ("${CMAKE_SYSTEM_NAME}" MATCHES "(Free|Net|Open|DragonFly)BSD") - find_package(yaml-cpp REQUIRED) - include_directories(${YAML_CPP_INCLUDE_DIR}) -else() - find_package(yaml-cpp REQUIRED HINTS /usr/lib32/cmake/yaml-cpp) -endif() +find_package(yaml-cpp REQUIRED HINTS /usr/lib32/cmake/yaml-cpp) +include_directories(${YAML_CPP_INCLUDE_DIR}) # Disable optimizations for interop.cpp for all compilers, to allow optimized # builds without need for -fno-omit-frame-pointer @@ -280,26 +275,30 @@ if (APPLE) set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${OPENLOCO_VERSION_TAG} ${OPENLOCO_BRANCH}") endif() - file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/distribution/macos/AppIcon.iconset DESTINATION ${CMAKE_BINARY_DIR}) - set(ICON_TARGET "${CMAKE_BINARY_DIR}/AppIcon.iconset") - set(ICON_OUTPUT "${CMAKE_BINARY_DIR}/AppIcon.icns") - set(SOURCE_ICON_DIR "${CMAKE_CURRENT_SOURCE_DIR}/resources/logo") + set(BUNDLE_RESOURCES "") - add_custom_command(OUTPUT ${ICON_OUTPUT} - COMMAND cp icon_x16.png ${ICON_TARGET}/icon_16x16.png - COMMAND cp icon_x32.png ${ICON_TARGET}/icon_16x16@2x.png - COMMAND cp icon_x32.png ${ICON_TARGET}/icon_32x32.png - COMMAND cp icon_x64.png ${ICON_TARGET}/icon_32x32@2x.png - COMMAND cp icon_x128.png ${ICON_TARGET}/icon_128x128.png - COMMAND cp icon_x256.png ${ICON_TARGET}/icon_128x128@2x.png - COMMAND cp icon_x256.png ${ICON_TARGET}/icon_256x256.png - COMMAND cp icon_x512.png ${ICON_TARGET}/icon_256x256@2x.png - COMMAND cp icon_x512.png ${ICON_TARGET}/icon_512x512.png - COMMAND cp icon_x1024.png ${ICON_TARGET}/icon_512x512@2x.png - COMMAND iconutil -c icns ${ICON_TARGET} - WORKING_DIRECTORY ${SOURCE_ICON_DIR}) + find_program(ICONUTIL iconutil) + if (ICONUTIL) + file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/distribution/macos/AppIcon.iconset DESTINATION ${CMAKE_BINARY_DIR}) + set(ICON_TARGET "${CMAKE_BINARY_DIR}/AppIcon.iconset") + set(ICON_OUTPUT "${CMAKE_BINARY_DIR}/AppIcon.icns") + set(SOURCE_ICON_DIR "${CMAKE_CURRENT_SOURCE_DIR}/resources/logo") + add_custom_command(OUTPUT ${ICON_OUTPUT} + COMMAND cp icon_x16.png ${ICON_TARGET}/icon_16x16.png + COMMAND cp icon_x32.png ${ICON_TARGET}/icon_16x16@2x.png + COMMAND cp icon_x32.png ${ICON_TARGET}/icon_32x32.png + COMMAND cp icon_x64.png ${ICON_TARGET}/icon_32x32@2x.png + COMMAND cp icon_x128.png ${ICON_TARGET}/icon_128x128.png + COMMAND cp icon_x256.png ${ICON_TARGET}/icon_128x128@2x.png + COMMAND cp icon_x256.png ${ICON_TARGET}/icon_256x256.png + COMMAND cp icon_x512.png ${ICON_TARGET}/icon_256x256@2x.png + COMMAND cp icon_x512.png ${ICON_TARGET}/icon_512x512.png + COMMAND cp icon_x1024.png ${ICON_TARGET}/icon_512x512@2x.png + COMMAND ${ICONUTIL} --convert icns --output ${ICON_OUTPUT} ${ICON_TARGET} + WORKING_DIRECTORY ${SOURCE_ICON_DIR}) + list(APPEND BUNDLE_RESOURCES ${ICON_OUTPUT}) + endif () - set(BUNDLE_RESOURCES ${ICON_OUTPUT}) list(APPEND BUNDLE_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG.md) list(APPEND BUNDLE_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/CONTRIBUTORS.MD) set_target_properties(${PROJECT} PROPERTIES RESOURCE "${BUNDLE_RESOURCES}") diff --git a/cmake/osxcross_toolchain.cmake b/cmake/osxcross_toolchain.cmake new file mode 100644 index 00000000..92f67f0d --- /dev/null +++ b/cmake/osxcross_toolchain.cmake @@ -0,0 +1,37 @@ +message("HELLO FROM TOOLCHAIN") +message("TOOLCHAIN2: $ENV{TOOLCHAIN2}") + +macro(osxcross_getconf VAR) + if(NOT ${VAR}) + set(${VAR} "$ENV{${VAR}}") + if(${VAR}) + set(${VAR} "${${VAR}}" CACHE STRING "${VAR}") + message(STATUS "Found ${VAR}: ${${VAR}}") + else() + message(FATAL_ERROR "Cannot determine \"${VAR}\"") + endif() + endif() +endmacro() + +osxcross_getconf(OSXCROSS_HOST) +osxcross_getconf(OSXCROSS_TARGET_DIR) +osxcross_getconf(OSXCROSS_TARGET) +osxcross_getconf(OSXCROSS_SDK) + +set(CMAKE_SYSTEM_NAME "Darwin") +string(REGEX REPLACE "-.*" "" CMAKE_SYSTEM_PROCESSOR "${OSXCROSS_HOST}") + +# specify the cross compiler +set(CMAKE_C_COMPILER "${OSXCROSS_TARGET_DIR}/bin/${OSXCROSS_HOST}-clang") +set(CMAKE_CXX_COMPILER "${OSXCROSS_TARGET_DIR}/bin/${OSXCROSS_HOST}-clang++") + +set(CMAKE_AR "${OSXCROSS_TARGET_DIR}/bin/${OSXCROSS_HOST}-ar" CACHE FILEPATH "ar") +set(CMAKE_RANLIB "${OSXCROSS_TARGET_DIR}/bin/${OSXCROSS_HOST}-ranlib" CACHE FILEPATH "ranlib") +set(CMAKE_INSTALL_NAME_TOOL "${OSXCROSS_TARGET_DIR}/bin/${OSXCROSS_HOST}-install_name_tool" CACHE FILEPATH "install_name_tool") + +set(ENV{PKG_CONFIG_LIBDIR} "${OSXCROSS_TARGET_DIR}/macports/pkgs/opt/local/lib/pkgconfig") +set(ENV{PKG_CONFIG_SYSROOT_DIR} "${OSXCROSS_TARGET_DIR}/macports/pkgs") + +set(TOOLCHAIN2 "$ENV{TOOLCHAIN2}") +include("${TOOLCHAIN2}") +message("CMAKE_FIND_ROOT_PATH: ${CMAKE_FIND_ROOT_PATH}") diff --git a/src/OpenLoco/S5/S5.cpp b/src/OpenLoco/S5/S5.cpp index 7b665c5c..af467967 100644 --- a/src/OpenLoco/S5/S5.cpp +++ b/src/OpenLoco/S5/S5.cpp @@ -687,7 +687,7 @@ namespace OpenLoco::S5 registerHook( 0x00441FA7, [](registers& regs) FORCE_ALIGN_ARG_POINTER -> uint8_t { - auto path = fs::u8path(std::string_view(_savePath)); + auto path = fs::u8path(std::string(_savePath)); return load(path, regs.eax) ? X86_FLAG_CARRY : 0; }); }