Added MacOS support

This commit is contained in:
Sylar 2026-01-02 22:31:17 +01:00
parent b73a360893
commit b17ddf6f7e
9 changed files with 149 additions and 15 deletions

View file

@ -2,7 +2,7 @@
#-----------------------------------------------------------------------------------------
set(PROJ_NAME omnia-framework)
set(MAJOR_VER 0)
set(MINOR_VER 1)
set(MINOR_VER 2)
#-----------------------------------------------------------------------------------------
#Setup
@ -97,16 +97,44 @@ endif()
if (WIN32)
target_link_libraries(${OMNIA_GFX_LIB} PUBLIC mingw32)
target_link_libraries(${OMNIA_STD_LIB} PUBLIC mingw32)
target_link_libraries(${OMNIA_GFX_LIB} PUBLIC SDL2main SDL2 SDL2_gfx SDL2_ttf SDL2_image)
endif (WIN32)
target_link_libraries(${OMNIA_GFX_LIB} PUBLIC ${OMNIA_STD_LIB})
target_link_libraries(${TEST_TARGET} PUBLIC ${OMNIA_STD_LIB})
target_link_libraries(${TEST_TARGET} PUBLIC ${OMNIA_GFX_LIB})
if (UNIX)
if (APPLE)
cmake_policy(SET CMP0167 OLD)
find_package(Boost REQUIRED COMPONENTS regex)
target_link_libraries(${OMNIA_STD_LIB} PUBLIC Boost::regex)
find_package(PkgConfig REQUIRED)
pkg_check_modules(SDL2 REQUIRED sdl2)
pkg_check_modules(SDL2_IMAGE REQUIRED SDL2_image)
pkg_check_modules(SDL2_TTF REQUIRED SDL2_ttf)
pkg_check_modules(SDL2_GFX REQUIRED SDL2_gfx)
target_include_directories(${OMNIA_GFX_LIB} PUBLIC
${SDL2_INCLUDE_DIRS}
${SDL2_IMAGE_INCLUDE_DIRS}
${SDL2_TTF_INCLUDE_DIRS}
${SDL2_GFX_INCLUDE_DIRS}
)
target_link_directories(${OMNIA_GFX_LIB} PUBLIC
${SDL2_LIBRARY_DIRS}
${SDL2_IMAGE_LIBRARY_DIRS}
${SDL2_TTF_LIBRARY_DIRS}
${SDL2_GFX_LIBRARY_DIRS}
)
target_link_libraries(${OMNIA_GFX_LIB} PUBLIC
${SDL2_LIBRARIES}
${SDL2_IMAGE_LIBRARIES}
${SDL2_TTF_LIBRARIES}
${SDL2_GFX_LIBRARIES}
)
elseif (UNIX)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath,'$ORIGIN',-rpath,/usr/lib,-rpath,/usr/local/lib")
target_link_libraries(${OMNIA_STD_LIB} PUBLIC tinfo boost_regex)
target_link_libraries(${OMNIA_GFX_LIB} PUBLIC xcb xcb-randr)
endif (UNIX)
target_link_libraries(${OMNIA_GFX_LIB} PUBLIC SDL2main SDL2 SDL2_gfx SDL2_ttf SDL2_image)
endif ()
#-----------------------------------------------------------------------------------------

View file

@ -115,3 +115,46 @@ cd OmniaFramework
```
> **<u>NOTE</u>**: The same build options for the `./build` script apply here, as explained in the **Windows** section.
### <u>Build instructions - MacOS</u>
##### Step 1: Install HomeBrew
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
##### Step 2: Add HomeBrew to PATH
After installing HomeBrew, it should automatically tell you how to add it to path, in general it should loo something. like this:
- **For Apple Silicon**
```bash
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
```
- **For Intel Mac**
```bash
echo 'eval "$(/usr/local/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/usr/local/bin/brew shellenv)"
```
##### Step 3: Install dependencies
```bash
brew install llvm gdb cmake make boost sdl2 sdl2_mixer sdl2_image sdl2_ttf sdl2_gfx pkg-config
```
##### Step 4: Build OmniaFramework
```bash
git clone https://github.com/OmniaX-dev/OmniaFramework.git
cd OmniaFramework
./build release
./build install
```
> **<u>NOTE</u>**: The same build options for the `./build` script apply here, as explained in the **Windows** section.

18
build
View file

@ -5,7 +5,15 @@ set -e
MAKE_COMMAND=make
MAKEFILE_TYPE="Unix Makefiles"
if [ "$(expr substr $(uname -s) 1 10)" == "MINGW64_NT" ]; then
if [[ "$(uname)" == "Darwin" ]]; then
NJOBS=-j"$(sysctl -n hw.ncpu)"
else
NJOBS=-j$(nproc)
fi
# -j"$(sysctl -n hw.ncpu)"
if [[ "$(uname -s)" == MINGW64_NT* ]]; then
MAKE_COMMAND=mingw32-make.exe
MAKEFILE_TYPE="MinGW Makefiles"
fi
@ -14,10 +22,10 @@ if [[ "$1" == "debug" || "$1" == "release" ]]; then
BUILD_TYPE="$(tr '[:lower:]' '[:upper:]' <<< ${1:0:1})${1:1}"
rm -rf bin
cmake -B bin -S ./ -G "$MAKEFILE_TYPE" -DCMAKE_BUILD_TYPE=$BUILD_TYPE
$MAKE_COMMAND -C bin -j$(nproc) --no-print-directory
$MAKE_COMMAND -C bin $NJOBS --no-print-directory
cp -r extra/* bin/
typeset -i build_number=$(cat other/build.nr)
((build_number++))
build_number=$(cat other/build.nr)
build_number=$((build_number + 1))
truncate -s 0 other/build.nr
echo $build_number >> other/build.nr
cd other
@ -30,7 +38,7 @@ elif [[ "$1" == "install" ]]; then
else
cp -r extra/* bin/
printf "\n\033[0;32mBuilding Changes...\n\n\033[0m"
$MAKE_COMMAND -C bin -j$(nproc) --no-print-directory
$MAKE_COMMAND -C bin $NJOBS --no-print-directory
if [[ "$1" == "run" ]]; then
printf "\n\033[0;32mRunning Test Application...\n\n\033[0m"
cd bin

View file

@ -1 +1 @@
1909
1924

View file

@ -1,3 +1,6 @@
[0.2.1923]
Added MacOS support
[0.1.1823]
Added more Builtin signals

View file

@ -6,12 +6,19 @@ set -e
RELEASE_DIR=
if [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
if [[ "$(uname)" == "Darwin" ]]; then
RELEASE_DIR=../bin/OmniaFramework_macos
mkdir -p "$RELEASE_DIR/lib"
# macOS shared libraries (.dylib)
cp ../bin/libostd.dylib "$RELEASE_DIR/lib"
cp ../bin/libogfx.dylib "$RELEASE_DIR/lib"
elif [[ "$(uname -s)" == Linux* ]]; then
RELEASE_DIR=../bin/OmniaFramework_linux64
mkdir -p $RELEASE_DIR/lib
cp ../bin/libostd.so $RELEASE_DIR/lib
cp ../bin/libogfx.so $RELEASE_DIR/lib
elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW64_NT" ]; then
elif [[ "$(uname -s)" == MINGW64_NT* ]]; then
RELEASE_DIR=../bin/OmniaFramework_w64
mkdir -p $RELEASE_DIR/lib
cp ../bin/libostd.dll $RELEASE_DIR/lib

View file

@ -6,7 +6,23 @@ set -e
RELEASE_DIR=
if [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
if [[ "$(uname)" == "Darwin" ]]; then
RELEASE_DIR=../bin/OmniaFramework_macos
# Remove old versions
sudo rm -rf /usr/local/include/ostd 2> /dev/null
sudo rm -rf /usr/local/include/ogfx 2> /dev/null
sudo rm -f /usr/local/lib/libostd.dylib 2> /dev/null
sudo rm -f /usr/local/lib/libogfx.dylib 2> /dev/null
# Install headers
sudo cp -r "$RELEASE_DIR/include/ostd" /usr/local/include/
sudo cp -r "$RELEASE_DIR/include/ogfx" /usr/local/include/
# Install libraries
sudo cp "$RELEASE_DIR/lib/libostd.dylib" /usr/local/lib/
sudo cp "$RELEASE_DIR/lib/libogfx.dylib" /usr/local/lib/
elif [[ "$(uname -s)" == Linux* ]]; then
RELEASE_DIR=../bin/OmniaFramework_linux64
sudo rm -rf /usr/include/ostd 2> /dev/null
sudo rm -rf /usr/include/ogfx 2> /dev/null
@ -16,7 +32,7 @@ if [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
sudo cp -r $RELEASE_DIR/include/ogfx /usr/include/
sudo cp -r $RELEASE_DIR/lib/libostd.so /usr/lib/
sudo cp -r $RELEASE_DIR/lib/libogfx.so /usr/lib/
elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW64_NT" ]; then
elif [[ "$(uname -s)" == MINGW64_NT* ]]; then
RELEASE_DIR=../bin/OmniaFramework_w64
rm -rf $MSYS_ROOT/ucrt64/include/ostd 2> /dev/null
rm -rf $MSYS_ROOT/ucrt64/include/ogfx 2> /dev/null

View file

@ -79,8 +79,37 @@ void Utils::setConsoleCursorPosition(int32_t x, int32_t y)
printf("\033[%d;%dH",x+1,y+1);
}
#elif defined(__APPLE__)
#include <unistd.h>
#include <sys/ioctl.h>
#include <cstdio>
void Utils::clearConsole(void)
{
// ANSI escape sequence: clear screen + move cursor to top-left
std::printf("\033[2J\033[H");
std::fflush(stdout);
}
void Utils::getConsoleSize(int32_t& outColumns, int32_t& outRows)
{
struct winsize w;
ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
outRows = w.ws_row;
outColumns = w.ws_col;
}
void Utils::setConsoleCursorPosition(int32_t x, int32_t y)
{
// ANSI escape sequence: move cursor to (y+1, x+1)
std::printf("\033[%d;%dH", y + 1, x + 1);
std::fflush(stdout);
}
#endif
int32_t Utils::getConsoleWidth(void)
{
int32_t rows = 0, cols = 0;

View file

@ -1,7 +1,7 @@
#include "Logic.hpp"
#include "Utils.hpp"
#include "String.hpp"
#include <bits/stdc++.h>
// #include <bits/stdc++.h>
namespace ostd
{