2022-08-23 11:14:06 +02:00
project (
'the-powder-toy' ,
2024-10-12 18:07:21 +02:00
'cpp' ,
2022-08-23 11:14:06 +02:00
version : 'the.cake.is.a.lie' ,
default_options : [
'cpp_std=c++17' ,
'cpp_rtti=false' ,
] ,
2023-08-31 16:46:33 +02:00
meson_version : '>=0.64.0' ,
2022-08-23 11:14:06 +02:00
)
2019-12-17 15:03:41 +01:00
2022-12-17 13:53:37 +01:00
if get_option ( 'prepare' )
# we're being run by prepare.py in a ghactions workflow only to determine the values of options; exit early
subdir_done ( )
endif
2024-04-29 17:50:45 +02:00
python = import ( 'python' )
python3_prog = python . find_installation ( 'python3' )
2023-10-02 17:26:57 +02:00
fs = import ( 'fs' )
2021-01-04 16:35:02 +01:00
to_array = generator (
2024-04-29 17:50:45 +02:00
python3_prog ,
2021-01-04 16:35:02 +01:00
output : [ '@PLAINNAME@.cpp' , '@PLAINNAME@.h' ] ,
2024-08-07 10:20:43 +02:00
depfile : '@PLAINNAME@.dep' ,
arguments : [ join_paths ( meson . current_source_dir ( ) , 'resources/to-array.py' ) , '@OUTPUT0@' , '@OUTPUT1@' , '@DEPFILE@' , '@INPUT@' , '@EXTRA_ARGS@' ]
2021-01-04 16:35:02 +01:00
)
2022-10-23 11:41:26 +02:00
render_icons_with_inkscape = get_option ( 'render_icons_with_inkscape' )
inkscape = find_program ( 'inkscape' , required : render_icons_with_inkscape )
2024-10-12 18:07:21 +02:00
cpp_compiler = meson . get_compiler ( 'cpp' )
2022-08-23 11:14:06 +02:00
is_x86 = host_machine . cpu_family ( ) in [ 'x86' , 'x86_64' ]
is_64bit = host_machine . cpu_family ( ) in [ 'aarch64' , 'x86_64' ]
host_arch = host_machine . cpu_family ( )
host_platform = host_machine . system ( )
# educated guesses follow, PRs welcome
2024-10-12 18:07:21 +02:00
if cpp_compiler . get_id ( ) in [ 'msvc' , 'clang-cl' ]
2023-01-19 18:31:47 +01:00
if host_platform != 'windows'
error ( 'this seems fishy' )
endif
2022-08-23 11:14:06 +02:00
host_libc = 'msvc'
2024-10-12 18:07:21 +02:00
elif cpp_compiler . get_id ( ) in [ 'gcc' ] and host_platform == 'windows'
2022-08-23 11:14:06 +02:00
host_libc = 'mingw'
elif host_platform in [ 'darwin' ]
host_libc = 'macos'
2023-01-24 18:37:06 +01:00
elif host_platform in [ 'emscripten' ]
host_platform = 'emscripten'
host_libc = 'emscripten'
2022-08-23 11:14:06 +02:00
elif host_platform in [ 'android' ]
host_platform = 'android'
host_libc = 'bionic'
2021-03-12 21:02:02 +01:00
else
2023-01-19 18:31:47 +01:00
if host_platform != 'linux'
# TODO: maybe use 'default' in place of 'linux', or use something other than host_platform where details such as desktop integration are concerned
warning ( 'host platform is not linux but we will pretend that it is' )
host_platform = 'linux'
endif
2022-08-23 11:14:06 +02:00
host_libc = 'gnu'
2021-03-12 21:02:02 +01:00
endif
2022-08-23 11:14:06 +02:00
static_variant = get_option ( 'static' )
if static_variant != 'prebuilt' and host_platform == 'android'
warning ( 'only prebuilt libs are supported for android' )
static_variant = 'prebuilt'
2019-12-17 15:03:41 +01:00
endif
2023-12-16 14:00:11 +01:00
if static_variant == 'system' and host_platform == 'windows' and host_libc == 'msvc'
warning ( 'no way to find system libs for msvc on windows' )
2022-08-23 11:14:06 +02:00
static_variant = 'prebuilt'
2021-01-21 18:26:30 +01:00
endif
2022-04-09 15:01:23 +02:00
2022-08-23 11:14:06 +02:00
is_static = static_variant != 'none'
is_debug = get_option ( 'optimization' ) in [ '0' , 'g' ]
2023-01-25 09:30:43 +01:00
app_exe = get_option ( 'app_exe' )
2022-04-09 15:01:23 +02:00
2022-08-23 11:14:06 +02:00
tpt_libs_static = 'none'
if static_variant == 'prebuilt'
tpt_libs_static = 'static'
2022-04-09 15:01:23 +02:00
endif
2023-12-16 14:00:11 +01:00
if static_variant == 'none' and host_platform == 'windows' and host_libc == 'msvc'
2022-08-23 11:14:06 +02:00
tpt_libs_static = 'dynamic'
endif
tpt_libs_debug = is_debug ? 'debug' : 'release'
tpt_libs_variant = '@0@-@1@-@2@-@3@' . format ( host_arch , host_platform , host_libc , tpt_libs_static )
2022-04-09 15:01:23 +02:00
tpt_libs_vtag = get_option ( 'tpt_libs_vtag' )
if tpt_libs_vtag == ''
2024-06-29 13:03:12 +02:00
tpt_libs_vtag = 'v20241107133630'
2022-04-09 15:01:23 +02:00
endif
2022-08-23 11:14:06 +02:00
if tpt_libs_static != 'none'
if tpt_libs_variant not in [
'x86_64-linux-gnu-static' ,
'x86_64-windows-mingw-static' ,
'x86_64-windows-msvc-static' ,
'x86_64-windows-msvc-dynamic' ,
'x86-windows-msvc-static' ,
'x86-windows-msvc-dynamic' ,
2024-06-29 13:03:12 +02:00
'aarch64-windows-msvc-static' ,
'aarch64-windows-msvc-dynamic' ,
2022-08-23 11:14:06 +02:00
'x86_64-darwin-macos-static' ,
'aarch64-darwin-macos-static' ,
'x86-android-bionic-static' ,
'x86_64-android-bionic-static' ,
'arm-android-bionic-static' ,
'aarch64-android-bionic-static' ,
2023-01-24 18:37:06 +01:00
'wasm32-emscripten-emscripten-static' ,
2022-08-23 11:14:06 +02:00
]
error ( 'no prebuilt @0@ libraries are currently provided' . format ( tpt_libs_variant ) )
2021-03-12 21:02:02 +01:00
endif
2022-08-23 11:14:06 +02:00
tpt_libs = subproject ( 'tpt-libs-prebuilt-@0@-@1@-@2@' . format ( tpt_libs_variant , tpt_libs_debug , tpt_libs_vtag ) )
2022-10-11 13:08:42 +02:00
else
if get_option ( 'workaround_elusive_bzip2' )
bzip2_lib_name = get_option ( 'workaround_elusive_bzip2_lib_name' )
bzip2_include_name = get_option ( 'workaround_elusive_bzip2_include_name' )
bzip2_lib_dir = get_option ( 'workaround_elusive_bzip2_lib_dir' )
bzip2_include_dir = include_directories ( get_option ( 'workaround_elusive_bzip2_include_dir' ) )
bzip2_static = get_option ( 'workaround_elusive_bzip2_static' )
meson . override_dependency ( 'bzip2' , declare_dependency (
2024-10-12 18:07:21 +02:00
dependencies : cpp_compiler . find_library (
2022-10-11 13:08:42 +02:00
bzip2_lib_name ,
has_headers : bzip2_include_name ,
dirs : bzip2_lib_dir ,
header_include_directories : bzip2_include_dir ,
static : bzip2_static ,
) ,
include_directories : bzip2_include_dir ,
) )
endif
2019-12-17 15:03:41 +01:00
endif
2022-08-23 11:14:06 +02:00
x86_sse_level_str = get_option ( 'x86_sse' )
if x86_sse_level_str == 'auto'
2024-05-14 02:24:01 +00:00
if host_machine . cpu_family ( ) == 'x86_64' and host_platform != 'darwin'
x86_sse_level = 20
else
2022-08-23 11:14:06 +02:00
x86_sse_level = 0
endif
2024-05-14 02:24:01 +00:00
elif x86_sse_level_str == 'avx512'
x86_sse_level = 500
elif x86_sse_level_str == 'avx2'
x86_sse_level = 200
elif x86_sse_level_str == 'avx'
x86_sse_level = 100
elif x86_sse_level_str == 'sse4.2'
x86_sse_level = 42
elif x86_sse_level_str == 'sse4.1'
x86_sse_level = 41
2022-08-23 11:14:06 +02:00
elif x86_sse_level_str == 'sse3'
x86_sse_level = 30
elif x86_sse_level_str == 'sse2'
x86_sse_level = 20
elif x86_sse_level_str == 'sse'
x86_sse_level = 10
elif x86_sse_level_str == 'none'
x86_sse_level = 0
2019-12-17 15:03:41 +01:00
endif
2022-08-23 11:14:06 +02:00
lua_variant = get_option ( 'lua' )
if lua_variant == 'auto'
2023-01-24 18:37:06 +01:00
if host_platform == 'emscripten'
lua_variant = 'lua5.2'
else
lua_variant = 'luajit'
endif
endif
if lua_variant == 'luajit' and host_platform == 'emscripten'
error ( 'luajit does not work with emscripten' )
2022-04-11 21:11:03 +02:00
endif
2022-08-23 11:14:06 +02:00
if lua_variant == 'none'
lua_dep = [ ]
elif lua_variant == 'lua5.1' or lua_variant == 'lua5.2'
lua_dep = dependency ( lua_variant + '-c++' , static : is_static , required : false )
if not lua_dep . found ( )
2022-10-11 13:08:42 +02:00
if not get_option ( 'workaround_noncpp_lua' )
error ( 'your system @0@ is not compatible with C++, configure with -Dworkaround_noncpp_lua=true to disable this error' . format ( lua_variant ) )
endif
2022-08-23 11:14:06 +02:00
lua_dep = dependency ( lua_variant , static : is_static )
endif
elif lua_variant == 'luajit'
lua_dep = dependency ( 'luajit' , static : is_static )
2019-12-17 15:03:41 +01:00
endif
2022-08-23 11:14:06 +02:00
enable_http = get_option ( 'http' )
if host_platform == 'android'
android_ndk_toolchain_prefix = meson . get_external_property ( 'android_ndk_toolchain_prefix' )
android_platform = meson . get_external_property ( 'android_platform' )
tpt_libs_android_toolchain_prefix = tpt_libs . get_variable ( 'android_toolchain_prefix' )
tpt_libs_android_system_version = tpt_libs . get_variable ( 'android_system_version' )
tpt_libs_android_platform = tpt_libs . get_variable ( 'android_platform' )
if '@0@@1@-' . format ( tpt_libs_android_toolchain_prefix , tpt_libs_android_system_version ) != android_ndk_toolchain_prefix
error ( 'tpt-libs android toolchain mismatch' )
endif
if tpt_libs_android_platform != android_platform
error ( 'tpt-libs android platform mismatch' )
endif
2019-12-17 15:03:41 +01:00
endif
2023-01-24 18:37:06 +01:00
curl_dep = [ ]
if enable_http and host_platform != 'emscripten'
curl_dep = dependency ( 'libcurl' , static : is_static )
endif
project_link_args = [ ]
project_cpp_args = [ ]
2022-08-23 11:14:06 +02:00
2023-01-27 17:46:59 +01:00
fftw_dep = dependency ( 'fftw3f' , static : is_static )
2019-12-17 15:03:41 +01:00
threads_dep = dependency ( 'threads' )
2023-01-24 18:37:06 +01:00
if host_platform == 'emscripten'
zlib_dep = [ ]
png_dep = [ ]
sdl2_dep = [ ]
bzip2_dep = [ ]
project_link_args + = [
'--no-heap-copy' ,
'-s' , 'WASM=1' ,
'-s' , 'ALLOW_MEMORY_GROWTH=1' ,
'-s' , 'FORCE_FILESYSTEM=1' ,
2023-06-18 17:52:03 +02:00
'-s' , 'EXIT_RUNTIME=0' ,
'-s' , 'EXPORTED_RUNTIME_METHODS=ccall,cwrap' ,
'-s' , 'FS_DEBUG' ,
2023-08-21 20:32:16 +02:00
'-s' , 'MODULARIZE' ,
'-s' , 'EXPORT_NAME=create_' + app_exe ,
2023-12-09 16:51:42 +01:00
'-Wl,-u,_emscripten_run_callback_on_thread' ,
2023-06-18 17:52:03 +02:00
'-lidbfs.js' ,
2023-01-24 18:37:06 +01:00
]
emcc_args = [
'-s' , 'USE_SDL=2' ,
'-s' , 'USE_BZIP2=1' ,
'-s' , 'USE_LIBPNG' ,
'-s' , 'USE_ZLIB=1' ,
'-s' , 'DISABLE_EXCEPTION_CATCHING=0' ,
]
if is_debug
project_link_args + = [ '--source-map-base=./' ]
emcc_args + = [ '-gsource-map' ]
endif
project_link_args + = emcc_args
project_cpp_args + = emcc_args
else
zlib_dep = dependency ( 'zlib' , static : is_static )
png_dep = dependency ( 'libpng16' , static : is_static )
sdl2_dep = dependency ( 'sdl2' , static : is_static )
bzip2_dep = dependency ( 'bzip2' , static : is_static )
endif
2022-10-11 13:08:42 +02:00
json_dep = dependency ( 'jsoncpp' , static : is_static )
2019-12-17 15:03:41 +01:00
2024-05-14 02:24:01 +00:00
if not is_debug
args_ccomp_opt = [ ]
2024-10-12 18:07:21 +02:00
if cpp_compiler . get_argument_syntax ( ) == 'msvc'
2024-05-14 02:24:01 +00:00
args_ccomp_opt + = [
2021-02-15 18:07:32 +01:00
'/Oy-' ,
'/fp:fast' ,
]
project_link_args + = [
'/OPT:REF' ,
'/OPT:ICF' ,
]
2024-05-14 02:24:01 +00:00
else
args_ccomp_opt + = [
'-ftree-vectorize' ,
'-funsafe-math-optimizations' ,
'-ffast-math' ,
'-fomit-frame-pointer' ,
]
endif
project_cpp_args + = args_ccomp_opt
endif
if not is_debug
args_ccomp_lto = [ ]
2024-10-12 18:07:21 +02:00
if cpp_compiler . get_id ( ) in [ 'clang' , 'clang-cl' ]
2024-05-14 02:24:01 +00:00
# use ThinLTO for Clang/LLVM
args_ccomp_lto + = [ '-flto=thin' ]
2024-10-12 18:07:21 +02:00
elif cpp_compiler . get_argument_syntax ( ) == 'msvc'
2024-05-14 02:24:01 +00:00
args_ccomp_lto + = [ '/GL' ]
project_link_args + = [ '/LTCG' ]
2021-02-15 18:07:32 +01:00
endif
2024-05-14 02:24:01 +00:00
project_cpp_args + = args_ccomp_lto
endif
2024-10-12 18:07:21 +02:00
if cpp_compiler . get_argument_syntax ( ) == 'msvc'
2024-05-14 02:24:01 +00:00
args_msvc = [
'/GS' ,
'/D_SCL_SECURE_NO_WARNINGS' ,
]
2019-12-17 15:03:41 +01:00
project_cpp_args + = args_msvc
2024-05-14 02:24:01 +00:00
endif
# clang-cl supports both syntaxes. use the GCC one.
2024-10-12 18:07:21 +02:00
if cpp_compiler . get_argument_syntax ( ) == 'msvc' and cpp_compiler . get_id ( ) not in [ 'clang-cl' ]
2024-05-14 02:24:01 +00:00
args_ccomp_sse = [ ]
if x86_sse_level == 30
warning ( 'SSE3 configured to be enabled but unavailable in msvc' )
endif
if x86_sse_level > = 500
args_ccomp_sse + = [ '/arch:AVX512' ]
elif x86_sse_level > = 200
args_ccomp_sse + = [ '/arch:AVX2' ]
elif x86_sse_level > = 100
args_ccomp_sse + = [ '/arch:AVX' ]
elif x86_sse_level > = 20 and host_machine . cpu_family ( ) == 'x86'
args_ccomp_sse + = [ '/arch:SSE2' ]
elif x86_sse_level > = 10 and host_machine . cpu_family ( ) == 'x86'
args_ccomp_sse + = [ '/arch:SSE' ]
endif
project_cpp_args + = args_ccomp_sse
2019-12-17 15:03:41 +01:00
else
2024-05-14 02:24:01 +00:00
args_ccomp_sse = [ ]
2022-08-23 11:14:06 +02:00
if host_platform == 'darwin' and x86_sse_level > 0
message ( 'SSE level explicitly configured but unavailable on macosx' )
x86_sse_level = 0
2019-12-17 15:03:41 +01:00
endif
2024-05-14 02:24:01 +00:00
if x86_sse_level > = 500
args_ccomp_sse + = [ '-mavx512f' , '-mavx512cd' , '-mavx512vl' , '-mavx512dq' , '-mavx512bw' ]
elif x86_sse_level > = 200
args_ccomp_sse + = [ '-mavx2' ]
elif x86_sse_level > = 100
args_ccomp_sse + = [ '-mavx' ]
elif x86_sse_level > = 42
args_ccomp_sse + = [ '-msse4.2' ]
elif x86_sse_level > = 41
args_ccomp_sse + = [ '-msse4.1' ]
elif x86_sse_level > = 30
args_ccomp_sse + = [ '-msse3' ]
2022-08-23 11:14:06 +02:00
elif x86_sse_level > = 20
2024-05-14 02:24:01 +00:00
args_ccomp_sse + = [ '-msse2' ]
2022-08-23 11:14:06 +02:00
elif x86_sse_level > = 10
2024-05-14 02:24:01 +00:00
args_ccomp_sse + = [ '-msse' ]
2021-10-22 16:38:42 +02:00
endif
2024-05-14 02:24:01 +00:00
project_cpp_args + = args_ccomp_sse
2019-12-17 15:03:41 +01:00
endif
2024-08-06 07:26:08 +02:00
copied_dlls = [ ]
2022-08-23 11:14:06 +02:00
if host_platform == 'windows'
2024-05-14 02:24:01 +00:00
args_ccomp_win = [ ]
defs_ccomp_win = [ ]
defs_ccomp_win + = [
'_WIN32_WINNT=0x0501' ,
'NOMINMAX' ,
'UNICODE' ,
'_UNICODE' ,
]
2019-12-17 15:03:41 +01:00
windows_mod = import ( 'windows' )
2022-08-23 11:14:06 +02:00
if is_static
2024-05-14 02:24:01 +00:00
defs_ccomp_win + = [ 'CURL_STATICLIB' ]
2022-08-23 11:14:06 +02:00
if host_arch == 'x86_64'
2024-05-14 02:24:01 +00:00
defs_ccomp_win + = [ 'ZLIB_WINAPI' ]
2021-03-12 21:02:02 +01:00
endif
2023-12-16 14:00:11 +01:00
endif
if tpt_libs_static == 'dynamic'
2022-08-23 11:14:06 +02:00
foreach input_output_condition : tpt_libs . get_variable ( 'config_dlls' )
dll_input = input_output_condition [ 0 ]
dll_output = input_output_condition [ 1 ]
dll_condition = input_output_condition [ 2 ]
do_copy = false
if dll_condition == 'all'
do_copy = true
elif dll_condition == 'lua=' + lua_variant
do_copy = true
endif
if do_copy
2024-08-06 07:26:08 +02:00
copied_dlls + = [ fs . copyfile ( dll_input , dll_output ) ]
2022-08-23 11:14:06 +02:00
endif
2019-12-17 15:03:41 +01:00
endforeach
endif
2024-05-14 02:24:01 +00:00
foreach def : defs_ccomp_win
2024-10-12 18:07:21 +02:00
if cpp_compiler . get_argument_syntax ( ) == 'msvc'
2024-05-14 02:24:01 +00:00
args_ccomp_win + = [ '/D' + def ]
else
args_ccomp_win + = [ '-D' + def ]
endif
endforeach
2023-01-04 20:24:56 +01:00
project_cpp_args + = args_ccomp_win
2024-11-04 18:21:36 +01:00
elif host_platform == 'darwin'
# work around assertion failure with LTO symbols
# https://developer.apple.com/documentation/xcode-release-notes/xcode-15-release-notes#Linking
# otherwise we get ld: Assertion failed: (0 && "lto symbol should not be in layout"), function symbolForAtom, file Layout.cpp, line 1447.
# TODO: remove when appropriate
if is_static and cpp_compiler . has_link_argument ( '-ld_classic' )
warning ( 'applying broken apple clang linker workaround with -ld_classic' )
project_link_args + = [ '-ld_classic' ]
endif
2024-05-14 02:24:01 +00:00
elif host_platform == 'android'
args_ccomp_android = [ ]
if not is_64bit
args_ccomp_android + = [ '-U_FILE_OFFSET_BITS' ]
endif
# android doesn't ship libc++_shared.so, so we might as well link it statically;
# the alternative would be to grab libc++_shared.so from the NDK and ship it with
# the app alongside libpowder.so, and possibly add it to SDL's list of libraries to load
project_link_args + = [ '-static-libstdc++' ]
project_cpp_args + = args_ccomp_android
endif
2024-10-12 18:07:21 +02:00
if cpp_compiler . get_argument_syntax ( ) == 'msvc' and cpp_compiler . get_id ( ) not in [ 'clang-cl' ]
2024-05-14 02:24:01 +00:00
project_cpp_args + = [
'/wd4834' ,
'/wd4100' ,
]
else
project_cpp_args + = [
'-Wno-invalid-offsetof' ,
'-Wno-unused-result' ,
'-Wno-missing-field-initializers' ,
'-Wno-unused-parameter' ,
]
2019-12-17 15:03:41 +01:00
endif
2022-12-25 11:03:29 +01:00
project_inc = include_directories ( [ 'src' , 'resources' ] )
2019-12-17 15:03:41 +01:00
2022-08-23 11:14:06 +02:00
if host_platform == 'windows'
ident_platform = is_64bit ? 'WIN64' : 'WIN32'
elif host_platform == 'linux'
ident_platform = is_64bit ? 'LIN64' : 'LIN32'
elif host_platform == 'darwin'
ident_platform = host_arch == 'aarch64' ? 'MACOSARM' : 'MACOSX'
2022-02-22 06:56:02 +01:00
else
2022-08-23 11:14:06 +02:00
ident_platform = 'UNKNOWN'
2022-02-22 06:56:02 +01:00
endif
2024-01-01 09:34:44 +01:00
project_deps = [ ]
2022-09-08 06:52:23 +02:00
data_files = [ ]
2023-05-11 17:47:25 +02:00
powder_deps = [ ]
2019-12-17 15:03:41 +01:00
2024-01-02 18:35:33 +01:00
project_export_dynamic = false
2019-12-17 15:03:41 +01:00
subdir ( 'src' )
subdir ( 'resources' )
2022-09-08 06:52:23 +02:00
powder_files + = data_files
render_files + = data_files
font_files + = data_files
2023-01-24 18:37:06 +01:00
if host_platform == 'emscripten'
project_link_args + = [
2023-08-21 20:32:16 +02:00
'-o' , app_exe + '.js' , # so we get a .wasm, and a .js
2023-01-24 18:37:06 +01:00
]
endif
2024-02-21 10:07:13 +01:00
if get_option ( 'export_lua_symbols' )
if is_static and lua_variant != 'none' and not project_export_dynamic
if host_platform == 'windows'
error ( 'Lua symbols are currently impossible to export correctly on Windows' )
2024-10-12 18:07:21 +02:00
elif cpp_compiler . has_link_argument ( '-Wl,--export-dynamic-symbol' )
2024-02-21 10:07:13 +01:00
project_link_args + = [
'-Wl,--export-dynamic-symbol=lua_*' ,
'-Wl,--export-dynamic-symbol=luaL_*' ,
'-Wl,--export-dynamic-symbol=luaopen_*' ,
]
else
warning ( 'your linker does not support -Wl,--export-dynamic-symbol so Meson will be instructed to export all symbols in order to enable loading Lua shared modules, which may blow up the size of the resulting binary' )
project_export_dynamic = true
endif
endif
endif
2023-01-24 18:37:06 +01:00
2019-12-17 15:03:41 +01:00
if get_option ( 'build_powder' )
2024-01-01 09:34:44 +01:00
powder_deps + = project_deps + [
2019-12-17 15:03:41 +01:00
threads_dep ,
zlib_dep ,
2022-08-07 15:27:04 +02:00
png_dep ,
2019-12-17 15:03:41 +01:00
sdl2_dep ,
2022-08-23 11:14:06 +02:00
lua_dep ,
curl_dep ,
fftw_dep ,
2022-10-11 13:08:42 +02:00
bzip2_dep ,
json_dep ,
2019-12-17 15:03:41 +01:00
]
2022-08-23 11:14:06 +02:00
if host_platform == 'android'
2022-04-11 21:11:03 +02:00
powder_sha = shared_library (
2022-12-17 13:53:37 +01:00
app_exe ,
2022-04-11 21:11:03 +02:00
sources : powder_files ,
2023-01-14 23:04:15 +01:00
include_directories : project_inc ,
2022-04-11 21:11:03 +02:00
cpp_args : project_cpp_args ,
link_args : project_link_args ,
dependencies : powder_deps ,
2024-08-06 07:26:08 +02:00
link_depends : copied_dlls ,
2022-04-11 21:11:03 +02:00
)
2022-08-23 11:14:06 +02:00
subdir ( 'android' )
2022-04-11 21:11:03 +02:00
else
executable (
2022-12-17 13:53:37 +01:00
app_exe ,
2022-04-11 21:11:03 +02:00
sources : powder_files ,
2023-01-14 23:04:15 +01:00
include_directories : project_inc ,
2022-04-11 21:11:03 +02:00
cpp_args : project_cpp_args ,
2022-08-23 11:14:06 +02:00
win_subsystem : is_debug ? 'console' : 'windows' ,
2022-04-11 21:11:03 +02:00
link_args : project_link_args ,
dependencies : powder_deps ,
2024-01-02 18:35:33 +01:00
export_dynamic : project_export_dynamic ,
2023-06-11 18:20:26 +02:00
install : true ,
2024-08-06 07:26:08 +02:00
link_depends : copied_dlls ,
2022-04-11 21:11:03 +02:00
)
endif
2019-12-17 15:03:41 +01:00
endif
if get_option ( 'build_render' )
2023-01-24 18:37:06 +01:00
if host_platform == 'emscripten'
error ( 'render does not target emscripten' )
endif
2024-01-01 09:34:44 +01:00
render_deps = project_deps + [
2019-12-17 15:03:41 +01:00
threads_dep ,
zlib_dep ,
2022-10-11 13:08:42 +02:00
bzip2_dep ,
json_dep ,
2022-08-07 15:27:04 +02:00
png_dep ,
2019-12-17 15:03:41 +01:00
]
2022-08-07 15:27:04 +02:00
render_link_args = project_link_args
if host_platform == 'linux' and is_static
render_link_args + = [ '-static' ]
endif
2019-12-17 15:03:41 +01:00
executable (
'render' ,
sources : render_files ,
2023-01-14 23:04:15 +01:00
include_directories : project_inc ,
2021-01-18 12:20:36 +01:00
cpp_args : project_cpp_args ,
2022-08-07 15:27:04 +02:00
link_args : render_link_args ,
2019-12-17 15:03:41 +01:00
dependencies : render_deps ,
2024-01-02 18:35:33 +01:00
export_dynamic : project_export_dynamic ,
2024-08-06 07:26:08 +02:00
link_depends : copied_dlls ,
2019-12-17 15:03:41 +01:00
)
endif
if get_option ( 'build_font' )
2023-01-24 18:37:06 +01:00
if host_platform == 'emscripten'
error ( 'font does not target emscripten' )
endif
2024-01-01 09:34:44 +01:00
font_deps = project_deps + [
2019-12-17 15:03:41 +01:00
threads_dep ,
zlib_dep ,
2022-08-07 15:27:04 +02:00
png_dep ,
2019-12-17 15:03:41 +01:00
sdl2_dep ,
2022-10-11 13:08:42 +02:00
bzip2_dep ,
2022-10-21 06:22:07 +02:00
json_dep ,
2019-12-17 15:03:41 +01:00
]
executable (
'font' ,
sources : font_files ,
2023-01-14 23:04:15 +01:00
include_directories : project_inc ,
2021-01-18 12:20:36 +01:00
cpp_args : project_cpp_args ,
2019-12-17 15:03:41 +01:00
link_args : project_link_args ,
dependencies : font_deps ,
2024-01-02 18:35:33 +01:00
export_dynamic : project_export_dynamic ,
2024-08-06 07:26:08 +02:00
link_depends : copied_dlls ,
2019-12-17 15:03:41 +01:00
)
endif