mirror of
https://github.com/ultravideo/uvg266.git
synced 2024-12-18 03:04:06 +00:00
108 lines
3.2 KiB
Python
108 lines
3.2 KiB
Python
|
""" SConstruct file fore building Kvazaar with Scons.
|
||
|
|
||
|
This file defines two targets, x86 and x64, and builds construction
|
||
|
environments for both.
|
||
|
|
||
|
TODO:
|
||
|
- add debug builds
|
||
|
- whole program optimization for gcc
|
||
|
|
||
|
"""
|
||
|
|
||
|
import os
|
||
|
import platform
|
||
|
|
||
|
Help("""
|
||
|
Type: 'scons x86' to build a 32-bit release version,
|
||
|
'scons x64' to build a 64-bit release version.
|
||
|
'scons x86 x64 -c' to clear all build directories.
|
||
|
""")
|
||
|
|
||
|
|
||
|
# Create construction environments for 32 and 64 bit builds.
|
||
|
# Visual studio needs the architecture to be set in this stage. It can not be
|
||
|
# modified later.
|
||
|
env_x86 = Environment(
|
||
|
ASCOM='yasm $ASFLAGS -o $TARGET $SOURCES',
|
||
|
ENV={'PATH': os.environ['PATH']}, # to find yasm on Windows
|
||
|
TARGET_ARCH='x86', # for Visual Studio
|
||
|
)
|
||
|
env_x64 = Environment(
|
||
|
ASCOM='yasm $ASFLAGS -o $TARGET $SOURCES',
|
||
|
ENV={'PATH': os.environ['PATH']}, # to find yasm on Windows
|
||
|
TARGET_ARCH='amd64', # for Visual Studio
|
||
|
)
|
||
|
|
||
|
# YASM flags for different architectures. The object file format and name
|
||
|
# mangling must be the same as used by the C compiler for that OS.
|
||
|
# Indexed by platform.system().
|
||
|
yasm_flags = {
|
||
|
'Windows': {
|
||
|
'x86': '-f win32 -DPREFIX ',
|
||
|
'x64': '-f win64'},
|
||
|
'Darwin': {
|
||
|
'x86': '-f macho32 -DPREFIX',
|
||
|
'x64': '-f macho64 -DPREFIX'},
|
||
|
'Linux': { # Flags for Unix-like.
|
||
|
'x86': '-f elf32',
|
||
|
'x64': '-f elf64'},
|
||
|
'all': { # Falgs for all systems.
|
||
|
'x86': ' -DARCH_X86_64=0 -m x86',
|
||
|
'x64': ' -DARCH_X86_64=1 -m amd64'},
|
||
|
}
|
||
|
# Set yasm flags for OS and architecture.
|
||
|
target_yasm_flags = yasm_flags.get(platform.system(), yasm_flags['Linux'])
|
||
|
env_x86.Replace(ASFLAGS=target_yasm_flags['x86'])
|
||
|
env_x64.Replace(ASFLAGS=target_yasm_flags['x64'])
|
||
|
env_x86.Append(ASFLAGS=yasm_flags['all']['x86'])
|
||
|
env_x64.Append(ASFLAGS=yasm_flags['all']['x64'])
|
||
|
|
||
|
|
||
|
# Try and deal with all the remaining compiler specific differences that I
|
||
|
# really with scons would handle.
|
||
|
if 'MSVS' in env_x86:
|
||
|
# /MD = multithreaded DLL runtime
|
||
|
# /Ox = full optimization, sets /Ob2, /Og, /Oi, /Ot, /Oy
|
||
|
# /GL = enable whole program optimization
|
||
|
# /LTCG = link time code generation
|
||
|
# /arch:SSE2 = use SSE2 (x86 only)
|
||
|
env_x86.Append(
|
||
|
CCFLAGS='/MD /Ox /GL /arch:SSE2',
|
||
|
LINKFLAGS='/LTCG')
|
||
|
env_x64.Append(
|
||
|
CCFLAGS='/MD /Ox /GL',
|
||
|
LINKFLAGS='/LTCG')
|
||
|
# Linker needs TMP
|
||
|
env_x86['ENV']['TMP'] = os.environ['TMP']
|
||
|
env_x64['ENV']['TMP'] = os.environ['TMP']
|
||
|
# VS version uses winsock2
|
||
|
# We probably should be linking against the dll or just not using winsock.
|
||
|
env_x86.MergeFlags('-lws2_32')
|
||
|
env_x64.MergeFlags('-lws2_32') # ws2_64 isn't found, but 32 works.
|
||
|
else:
|
||
|
# GCC flags
|
||
|
# -m for arch, -O2 for optimization, -lm for math lib
|
||
|
env_x86.MergeFlags('-m32 -O2 -lm')
|
||
|
env_x64.MergeFlags('-m64 -O2 -lm')
|
||
|
|
||
|
|
||
|
# Declare build targets.
|
||
|
x86 = SConscript('src/SConscript',
|
||
|
exports={'env': env_x86},
|
||
|
variant_dir='scons_build_x86',
|
||
|
duplicate=False)
|
||
|
Alias('x86', x86)
|
||
|
|
||
|
x64 = SConscript('src/SConscript',
|
||
|
exports={'env': env_x64},
|
||
|
variant_dir='scons_build_x64',
|
||
|
duplicate=False)
|
||
|
Alias('x64', x64)
|
||
|
|
||
|
|
||
|
if platform.machine().endswith('64'):
|
||
|
Default(x64)
|
||
|
else:
|
||
|
Default(x86)
|
||
|
|