Linux compile working

This commit is contained in:
Jordon Brooks 2024-05-27 19:09:17 +01:00
parent 47761441c0
commit f25ca44f03
Signed by: jordon
GPG key ID: DBD9758CD53E786A
5 changed files with 169 additions and 4 deletions

4
.gitignore vendored
View file

@ -22,3 +22,7 @@ build/**
linuxbuild/ linuxbuild/
build/ build/
.idea/ .idea/
winbuild/
!Compile.sh
!Compile.bat

68
Compile.bat Normal file
View file

@ -0,0 +1,68 @@
@echo off
setlocal enabledelayedexpansion
REM Clear the screen
cls
REM Define the color codes
set GREEN=
set NC=
REM Prompt the user to choose a compiler
echo %GREEN%Select the compiler to use:%NC%
echo 1^ ) MSBuild (default)
echo 2^ ) MinGW
echo 3^ ) Ninja
set /p choice=Enter the number of your choice:
REM Set the generator and compiler based on the user's choice
if "%choice%"=="2" (
set "GENERATOR=MinGW Makefiles"
set "COMPILER_OPTION=-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++"
) else if "%choice%"=="3" (
set "GENERATOR=Ninja"
set "COMPILER_OPTION="
) else (
set "GENERATOR=Visual Studio 17 2022"
set "COMPILER_OPTION=-A x64"
set "choice=1"
)
echo Using generator: %GENERATOR%
REM Prompt the user to choose a build type
echo %GREEN%Select the build type:%NC%
echo 1^ ) Release (default)
echo 2^ ) Debug
set /p build_choice=Enter the number of your choice:
REM Set the build type based on the user's choice
if "%build_choice%"=="2" (
set "BUILD_TYPE=Debug"
) else (
set "BUILD_TYPE=Release"
)
echo Build type: %BUILD_TYPE%
REM Create the build directory if it doesn't exist
if not exist "winbuild" (
mkdir winbuild
)
cd winbuild
REM Get the number of processors
for /f "tokens=2 delims==" %%a in ('wmic cpu get NumberOfLogicalProcessors /value') do set "NUM_PROCESSORS=%%a"
REM Run CMake with the selected generator and build type
cmake -G "%GENERATOR%" %COMPILER_OPTION% -DCMAKE_BUILD_TYPE=%BUILD_TYPE% ..
REM Build the project
if "%choice%"=="1" (
cmake --build . --config %BUILD_TYPE% -- /m:%NUM_PROCESSORS%
) else (
cmake --build . --config %BUILD_TYPE% -- -j %NUM_PROCESSORS%
)
cd ..

73
Compile.sh Normal file
View file

@ -0,0 +1,73 @@
#!/bin/sh
set -e
clear
# Define the color codes
GREEN='\033[0;32m'
NC='\033[0m' # No Color
# Prompt the user to choose a compiler
echo "${GREEN}Select the compiler to use:${NC}"
echo "1) g++ (default)"
echo "2) clang++"
echo "3) clang++ 15"
echo "4) clang++ 16"
read -p "Enter the number of your choice: " choice
# Set the compiler based on the user's choice
case $choice in
2)
C_COMPILER=clang
CXX_COMPILER=clang++
;;
3)
C_COMPILER=clang-15
CXX_COMPILER=clang++-15
;;
4)
C_COMPILER=clang-16
CXX_COMPILER=clang++-16
;;
*)
C_COMPILER=gcc
CXX_COMPILER=g++
;;
esac
echo "Using C compiler: $C_COMPILER"
echo "Using C++ compiler: $CXX_COMPILER"
# Prompt the user to choose a build type
echo "${GREEN}Select the build type:${NC}"
echo "1) Release (default)"
echo "2) Debug"
read -p "Enter the number of your choice: " build_choice
# Set the build type based on the user's choice
case $build_choice in
2)
BUILD_TYPE=Debug
;;
*)
BUILD_TYPE=Release
;;
esac
echo "Build type: $BUILD_TYPE"
# Create the build directory if it doesn't exist
if [ ! -d "linuxbuild" ]; then
mkdir linuxbuild
fi
cd linuxbuild
# Run CMake with the selected compiler and build type
cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_C_COMPILER=$C_COMPILER -DCMAKE_CXX_COMPILER=$CXX_COMPILER ..
# Build the project
cmake --build . --config $BUILD_TYPE --clean-first -j 15 --verbose
cd ..

View file

@ -120,6 +120,18 @@ set(MAC_INCLUDES
"src/Platform/Unix/UnixUtilities.h" "src/Platform/Unix/UnixUtilities.h"
) )
# Platform-specific definitions
if(WIN32)
add_definitions(-DBUILD_WINDOWS)
elseif(UNIX)
if(APPLE)
add_definitions(-DBUILD_MACOS)
else()
add_definitions(-DBUILD_LINUX)
endif()
add_definitions(-DBUILD_UNIX)
endif()
# Platform-specific definitions # Platform-specific definitions
if(WIN32) if(WIN32)
message(STATUS "Compiling for Windows...") message(STATUS "Compiling for Windows...")
@ -140,7 +152,7 @@ elseif(UNIX)
endif() endif()
# Create the shared library # Create the shared library
add_library(HarmonyLinkLibShared SHARED ${LIB_SOURCES} ${SHARED_SOURCES}) add_library(HarmonyLinkLibShared SHARED ${LIB_SOURCES} ${SHARED_SOURCES} ${LIB_INCLUDES})
target_include_directories(HarmonyLinkLibShared target_include_directories(HarmonyLinkLibShared
PRIVATE PRIVATE
"${PROJECT_SOURCE_DIR}/src" "${PROJECT_SOURCE_DIR}/src"
@ -151,7 +163,7 @@ target_include_directories(HarmonyLinkLibShared
target_compile_definitions(HarmonyLinkLibShared PRIVATE HARMONYLINKLIB_SHARED) target_compile_definitions(HarmonyLinkLibShared PRIVATE HARMONYLINKLIB_SHARED)
# Create the static library # Create the static library
add_library(HarmonyLinkLibStatic STATIC ${LIB_SOURCES}) add_library(HarmonyLinkLibStatic STATIC ${LIB_SOURCES} ${LIB_INCLUDES})
target_include_directories(HarmonyLinkLibStatic target_include_directories(HarmonyLinkLibStatic
PRIVATE PRIVATE
"${PROJECT_SOURCE_DIR}/src" "${PROJECT_SOURCE_DIR}/src"

View file

@ -15,7 +15,7 @@
#pragma once #pragma once
// Use a preprocessor definition to switch between export and import declarations // Use a preprocessor definition to switch between export and import declarations
#ifdef _WIN32 #ifdef BUILD_WINDOWS
#ifdef HARMONYLINKLIB_STATIC #ifdef HARMONYLINKLIB_STATIC
#define HARMONYLINKLIB_API #define HARMONYLINKLIB_API
#else #else
@ -25,6 +25,14 @@
#define HARMONYLINKLIB_API __declspec(dllimport) #define HARMONYLINKLIB_API __declspec(dllimport)
#endif #endif
#endif #endif
#else
#ifdef HARMONYLINKLIB_SHARED
#ifdef __clang__
#define HARMONYLINKLIB_API __attribute__((visibility("default")))
#else #else
#define HARMONYLINKLIB_API #define HARMONYLINKLIB_API
#endif #endif
#else
#define HARMONYLINKLIB_API
#endif
#endif