308 lines
8.7 KiB
Bash
308 lines
8.7 KiB
Bash
#!/bin/bash
|
|
# build-config.sh - Essential build configuration extracted from 4ed_build.cpp
|
|
# This file contains all the platform-specific compiler flags, linker flags, and build settings
|
|
|
|
# =============================================================================
|
|
# Directory Configuration
|
|
# =============================================================================
|
|
|
|
# Get the directory containing this script
|
|
CONFIG_SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$CONFIG_SCRIPT_DIR/../.." && pwd)"
|
|
|
|
# Build directories (absolute paths)
|
|
BUILD_DIR="$PROJECT_ROOT/build"
|
|
BUILD_TEMP_DIR="$PROJECT_ROOT/build_new/temp"
|
|
PACK_DIR="$PROJECT_ROOT/distributions"
|
|
SITE_DIR="$PROJECT_ROOT/site"
|
|
|
|
# Source directories (absolute paths)
|
|
CODE_DIR="$PROJECT_ROOT/code"
|
|
GENERATED_DIR="$PROJECT_ROOT/code/generated"
|
|
CUSTOM_DIR="$PROJECT_ROOT/code/custom"
|
|
CUSTOM_GENERATED_DIR="$PROJECT_ROOT/code/custom/generated"
|
|
FOREIGN_DIR="$PROJECT_ROOT/non-source/foreign"
|
|
SCRIPTS_DIR="$PROJECT_ROOT/build_new/scripts"
|
|
HELPERS_DIR="$PROJECT_ROOT/build_new/helpers"
|
|
|
|
# Include directories
|
|
INCLUDES=(
|
|
"$CUSTOM_DIR"
|
|
"$FOREIGN_DIR/freetype2"
|
|
)
|
|
|
|
# =============================================================================
|
|
# Platform Detection
|
|
# =============================================================================
|
|
|
|
# Platform codes
|
|
PLATFORM_WINDOWS=0
|
|
PLATFORM_LINUX=1
|
|
PLATFORM_MAC=2
|
|
|
|
# Architecture codes
|
|
ARCH_X64=0
|
|
ARCH_X86=1
|
|
|
|
# =============================================================================
|
|
# Build Flags
|
|
# =============================================================================
|
|
|
|
# Build flag bits (matching 4ed_build.cpp)
|
|
FLAG_OPTS=$((0x1)) # Compiler warnings/options
|
|
FLAG_LIBS=$((0x2)) # Link libraries
|
|
FLAG_ICON=$((0x4)) # Windows icon resource
|
|
FLAG_SHARED_CODE=$((0x8)) # Build as shared library
|
|
FLAG_DEBUG_INFO=$((0x10)) # Debug symbols
|
|
FLAG_OPTIMIZATION=$((0x20)) # Optimization level
|
|
FLAG_SUPER=$((0x40)) # Super tier features
|
|
FLAG_INTERNAL=$((0x80)) # Internal build flags
|
|
FLAG_SHIP=$((0x100)) # Shipping build
|
|
|
|
# =============================================================================
|
|
# Compiler Options - Windows (CL equivalent using clang)
|
|
# =============================================================================
|
|
|
|
# Windows compiler options (translated from CL to clang)
|
|
CLANG_OPTS_WINDOWS=(
|
|
"-Wall" # Enable most warnings
|
|
"-Wno-unused-parameter" # Disable unused parameter warnings
|
|
"-Wno-unused-variable" # Disable unused variable warnings
|
|
"-Wno-missing-field-initializers" # Disable missing field initializer warnings
|
|
"-Wno-deprecated-declarations" # Disable deprecated declarations warnings
|
|
"-Wno-missing-braces" # Disable missing braces warnings
|
|
"-Wno-tautological-compare" # Disable tautological compare warnings
|
|
"-Wno-write-strings" # Disable write strings warnings
|
|
"-Werror" # Treat warnings as errors
|
|
"-fno-rtti" # Disable RTTI (equivalent to /GR-)
|
|
"-fno-exceptions" # Disable exceptions (equivalent to /EHa-)
|
|
"-std=c++11" # C++11 standard
|
|
"-target x86_64-pc-windows-msvc" # Target Windows with MSVC ABI
|
|
)
|
|
|
|
# Windows libraries
|
|
LIBS_WINDOWS=(
|
|
"-luser32"
|
|
"-lwinmm"
|
|
"-lgdi32"
|
|
"-lopengl32"
|
|
"-lcomdlg32"
|
|
"-luserenv"
|
|
)
|
|
|
|
# Windows FreeType libraries
|
|
FREETYPE_LIB_WINDOWS_X64="$FOREIGN_DIR/x64/freetype.lib"
|
|
FREETYPE_LIB_WINDOWS_X86="$FOREIGN_DIR/x86/freetype.lib"
|
|
|
|
# Windows icon resource
|
|
WINDOWS_ICON="$PROJECT_ROOT/non-source/res/icon.res"
|
|
|
|
# =============================================================================
|
|
# Compiler Options - Linux (GCC equivalent using clang)
|
|
# =============================================================================
|
|
|
|
CLANG_OPTS_LINUX=(
|
|
"-Wno-write-strings"
|
|
"-D_GNU_SOURCE"
|
|
"-fPIC"
|
|
"-fno-threadsafe-statics"
|
|
"-pthread"
|
|
"-Wno-unused-result"
|
|
"-std=c++11"
|
|
"-target x86_64-linux-gnu" # Target Linux
|
|
)
|
|
|
|
# Linux libraries
|
|
LIBS_LINUX=(
|
|
"-lX11"
|
|
"-lpthread"
|
|
"-lm"
|
|
"-lrt"
|
|
"-lGL"
|
|
"-ldl"
|
|
"-lXfixes"
|
|
"-lfreetype"
|
|
"-lfontconfig"
|
|
)
|
|
|
|
# Linux platform includes
|
|
PLATFORM_INCLUDES_LINUX=(
|
|
"platform_all"
|
|
"platform_unix"
|
|
)
|
|
|
|
# =============================================================================
|
|
# Compiler Options - macOS (Clang native)
|
|
# =============================================================================
|
|
|
|
CLANG_OPTS_MACOS=(
|
|
"-Wno-write-strings"
|
|
"-Wno-deprecated-declarations"
|
|
"-Wno-comment"
|
|
"-Wno-switch"
|
|
"-Wno-null-dereference"
|
|
"-Wno-tautological-compare"
|
|
"-Wno-unused-result"
|
|
"-Wno-missing-declarations"
|
|
"-Wno-nullability-completeness"
|
|
"-std=c++11"
|
|
# Target will be set based on architecture
|
|
)
|
|
|
|
# macOS frameworks (equivalent to libraries)
|
|
FRAMEWORKS_MACOS=(
|
|
"-lc++"
|
|
"-lobjc"
|
|
-framework Cocoa
|
|
-framework QuartzCore
|
|
-framework CoreServices
|
|
-framework OpenGL
|
|
-framework IOKit
|
|
-framework Metal
|
|
-framework MetalKit
|
|
)
|
|
|
|
# macOS FreeType libraries
|
|
FREETYPE_LIB_MACOS_X64="$FOREIGN_DIR/x64/libfreetype-mac.a"
|
|
FREETYPE_LIB_MACOS_X86="$FOREIGN_DIR/x86/libfreetype-mac.a"
|
|
|
|
# macOS platform includes
|
|
PLATFORM_INCLUDES_MACOS=(
|
|
"platform_all"
|
|
"platform_unix"
|
|
)
|
|
|
|
# =============================================================================
|
|
# Architecture-specific flags
|
|
# =============================================================================
|
|
|
|
# 64-bit architecture
|
|
ARCH_FLAGS_X64=(
|
|
"-m64"
|
|
"-DFTECH_64_BIT"
|
|
)
|
|
|
|
# 32-bit architecture
|
|
ARCH_FLAGS_X86=(
|
|
"-m32"
|
|
"-DFTECH_32_BIT"
|
|
)
|
|
|
|
# =============================================================================
|
|
# Build Mode Flags
|
|
# =============================================================================
|
|
|
|
# Debug flags
|
|
DEBUG_FLAGS=(
|
|
"-g" # Debug symbols
|
|
"-O0" # No optimization
|
|
"-DDO_CRAZY_EXPENSIVE_ASSERTS" # Enable expensive assertions
|
|
)
|
|
|
|
# Release flags
|
|
RELEASE_FLAGS=(
|
|
"-O2" # Optimization level 2 (clang equivalent to -O3 for performance)
|
|
)
|
|
|
|
# =============================================================================
|
|
# File Lists (from 4ed_build.cpp)
|
|
# =============================================================================
|
|
|
|
# Platform layer files
|
|
PLATFORM_FILES_WINDOWS=("platform_win32/win32_4ed.cpp")
|
|
PLATFORM_FILES_LINUX=("platform_linux/linux_4ed.cpp")
|
|
PLATFORM_FILES_MACOS=("platform_mac/mac_4ed.mm")
|
|
|
|
# Custom layer default target
|
|
DEFAULT_CUSTOM_TARGET="$CUSTOM_DIR/4coder_default_bindings.cpp"
|
|
|
|
# =============================================================================
|
|
# Build Defines
|
|
# =============================================================================
|
|
|
|
# Function to get defines from flags (equivalent to get_defines_from_flags in 4ed_build.cpp)
|
|
get_defines_from_flags() {
|
|
local flags=$1
|
|
local defines=()
|
|
|
|
if (( flags & FLAG_SHIP )); then
|
|
defines+=("-DSHIP_MODE")
|
|
fi
|
|
|
|
if (( flags & FLAG_INTERNAL )); then
|
|
defines+=("-DFRED_INTERNAL")
|
|
fi
|
|
|
|
if (( flags & FLAG_SUPER )); then
|
|
defines+=("-DFRED_SUPER")
|
|
fi
|
|
|
|
echo "${defines[@]}"
|
|
}
|
|
|
|
# =============================================================================
|
|
# Build Outputs
|
|
# =============================================================================
|
|
|
|
# Main executable names
|
|
EXECUTABLE_WINDOWS="4ed.exe"
|
|
EXECUTABLE_LINUX="4ed"
|
|
EXECUTABLE_MACOS="4ed"
|
|
|
|
# Shared library names
|
|
SHARED_LIB_WINDOWS="4ed_app.dll"
|
|
SHARED_LIB_LINUX="4ed_app.so"
|
|
SHARED_LIB_MACOS="4ed_app.so"
|
|
|
|
# Custom layer library names
|
|
CUSTOM_LIB_WINDOWS="custom_4coder.dll"
|
|
CUSTOM_LIB_LINUX="custom_4coder.so"
|
|
CUSTOM_LIB_MACOS="custom_4coder.so"
|
|
|
|
# =============================================================================
|
|
# Utility Functions
|
|
# =============================================================================
|
|
|
|
# Get platform-specific settings
|
|
get_platform_settings() {
|
|
local platform=$1
|
|
case $platform in
|
|
"windows"|"win32")
|
|
echo "PLATFORM_WINDOWS"
|
|
;;
|
|
"linux")
|
|
echo "PLATFORM_LINUX"
|
|
;;
|
|
"macos"|"mac")
|
|
echo "PLATFORM_MAC"
|
|
;;
|
|
*)
|
|
echo "UNKNOWN_PLATFORM"
|
|
return 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Get architecture-specific settings
|
|
get_arch_settings() {
|
|
local arch=$1
|
|
case $arch in
|
|
"x64"|"x86_64")
|
|
echo "ARCH_X64"
|
|
;;
|
|
"x86"|"i386")
|
|
echo "ARCH_X86"
|
|
;;
|
|
*)
|
|
echo "UNKNOWN_ARCH"
|
|
return 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Check if flag is set
|
|
has_flag() {
|
|
local flags=$1
|
|
local flag=$2
|
|
(( flags & flag ))
|
|
} |