mirror of
https://github.com/ultravideo/uvg266.git
synced 2024-12-18 03:04:06 +00:00
18c3d9c72d
We will also maintain the Makefile for basic building. This is for more complicated stuff, like building the project on command line with Visual Studio.
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)
|
|
|