2024-05-22 06:01:25 +08:00
require ( " premake " , " >=5.0.0-beta2 " )
-- add "-Wl,--whole-archive -Wl,-Bstatic -lmylib -Wl,-Bdynamic -Wl,--no-whole-archive"
-- via: links { 'mylib:static_whole' }
-- https://premake.github.io/docs/Overrides-and-Call-Arrays/#introducing-overrides
premake.override ( premake.tools . gcc , " getlinks " , function ( originalFn , cfg , systemonly , nogroups )
-- source:
-- premake.tools.gcc.getlinks(cfg, systemonly, nogroups)
-- https://github.com/premake/premake-core/blob/d842e671c7bc7e09f2eeaafd199fd01e48b87ee7/src/tools/gcc.lua#L568C15-L568C22
local result = originalFn ( cfg , systemonly , nogroups )
2024-05-30 02:09:58 +08:00
local whole_syslibs = { " -Wl,--whole-archive " }
2024-05-22 06:01:25 +08:00
local static_whole_syslibs = { " -Wl,--whole-archive -Wl,-Bstatic " }
local endswith = function ( s , ptrn )
return ptrn == string.sub ( s , - string.len ( ptrn ) )
end
local idx_to_remove = { }
for idx , name in ipairs ( result ) do
if endswith ( name , " :static_whole " ) then
name = string.sub ( name , 0 , - 14 )
table.insert ( static_whole_syslibs , name ) -- it already includes '-l'
table.insert ( idx_to_remove , idx )
2024-05-30 02:09:58 +08:00
elseif endswith ( name , " :whole_archive " ) then
name = string.sub ( name , 0 , - 15 )
table.insert ( whole_syslibs , name ) -- it already includes '-l'
table.insert ( idx_to_remove , idx )
2024-05-22 06:01:25 +08:00
end
end
-- remove from the end to avoid trouble with table indexes shifting
for iii = # idx_to_remove , 1 , - 1 do
table.remove ( result , idx_to_remove [ iii ] )
end
local move = function ( a1 , a2 )
local t = # a2
for i = 1 , # a1 do a2 [ t + i ] = a1 [ i ] end
end
2024-05-30 02:09:58 +08:00
local new_result = { }
if # whole_syslibs > 1 then
table.insert ( whole_syslibs , " -Wl,--no-whole-archive " )
move ( whole_syslibs , new_result )
end
2024-05-22 06:01:25 +08:00
if # static_whole_syslibs > 1 then
table.insert ( static_whole_syslibs , " -Wl,-Bdynamic -Wl,--no-whole-archive " )
2024-05-30 02:09:58 +08:00
move ( static_whole_syslibs , new_result )
2024-05-22 06:01:25 +08:00
end
2024-05-30 02:09:58 +08:00
-- https://stackoverflow.com/a/71719579
-- because of the dumb way linux handles linking, the order becomes important
-- I've encountered a problem with linking and it was failing with error "undefined reference to `__imp_WSACloseEvent'"
-- despite 'Ws2_32' being added to the list of libraries, turns out some symbols from 'Ws2_32' were being stripped,
-- because no library before it (on the command line) mentioned any of its symbols, the static libs were being appended afterwards on the command line,
-- and they were mentioning some of the now-stripped symbols
move ( result , new_result )
return new_result
2024-05-22 06:01:25 +08:00
end )
-- pre-define stuff
local os_iden = ' ' -- identifier
if os.target ( ) == " windows " then
os_iden = ' win '
elseif os.target ( ) == " linux " then
os_iden = ' linux '
else
error ( ' Unsupported os target: " ' .. os.target ( ) .. ' " ' )
end
2024-05-29 03:23:41 +08:00
local deps_dir = path.getabsolute ( path.join ( ' build ' , ' deps ' , os_iden , _ACTION ) , _MAIN_SCRIPT_DIR )
2024-05-22 06:01:25 +08:00
2024-05-31 20:09:36 +08:00
function genproto ( )
local deps_install_prefix = ' '
if os.is64bit ( ) then
deps_install_prefix = ' install64 '
else
deps_install_prefix = ' install32 '
end
local protoc_exe = path.join ( deps_dir , ' protobuf ' , deps_install_prefix , ' bin ' , ' protoc ' )
2024-05-27 09:03:27 +08:00
2024-05-31 20:09:36 +08:00
local out_dir = ' dll/proto_gen/ ' .. os_iden
2024-05-22 06:01:25 +08:00
2024-05-31 20:09:36 +08:00
if os.host ( ) == " windows " then
protoc_exe = protoc_exe .. ' .exe '
end
2024-05-22 06:01:25 +08:00
2024-05-31 20:09:36 +08:00
if not os.isfile ( protoc_exe ) then
error ( " protoc not found! " .. protoc_exe )
return
end
2024-05-22 06:01:25 +08:00
2024-05-31 20:09:36 +08:00
print ( " Generating from .proto file! " )
local ok_mk , err_mk = os.mkdir ( out_dir )
if not ok_mk then
error ( " Error: " .. err_mk )
return
end
if os.host ( ) == " linux " then
local ok_chmod , err_chmod = os.chmod ( protoc_exe , " 777 " )
if not ok_chmod then
error ( " Error: " .. err_chmod )
2024-05-22 06:01:25 +08:00
return
end
end
2024-05-31 20:09:36 +08:00
return os.execute ( protoc_exe .. ' dll/net.proto -I./dll/ --cpp_out= ' .. out_dir )
end
newoption {
category = ' protobuf files ' ,
trigger = " genproto " ,
description = " Generate .cc/.h files from .proto file " ,
2024-05-22 06:01:25 +08:00
}
newoption {
2024-05-31 20:09:36 +08:00
category = ' build ' ,
2024-05-22 06:01:25 +08:00
trigger = " emubuild " ,
description = " Set the EMU_BUILD_STRING " ,
2024-05-22 08:09:18 +08:00
value = " your_string " ,
default = os.date ( " %Y_%m_%d-%H_%M_%S " ) ,
}
2024-05-31 20:09:36 +08:00
-- windows options
if os.target ( ) == ' windows ' then
2024-05-22 08:09:18 +08:00
newoption {
2024-05-31 20:09:36 +08:00
category = " build " ,
2024-05-22 08:09:18 +08:00
trigger = " dosstub " ,
description = " Change the DOS stub of the Windows builds " ,
}
newoption {
2024-05-31 20:09:36 +08:00
category = " build " ,
2024-05-22 08:09:18 +08:00
trigger = " winsign " ,
description = " Sign Windows builds with a fake certificate " ,
}
newoption {
2024-05-31 20:09:36 +08:00
category = " build " ,
2024-05-22 08:09:18 +08:00
trigger = " winrsrc " ,
description = " Add resources to Windows builds " ,
2024-05-22 06:01:25 +08:00
}
2024-05-31 20:09:36 +08:00
end
-- End windows options
2024-05-22 06:01:25 +08:00
-- common defines
---------
local common_emu_defines = { -- added to all filters, later defines will be appended
" UTF_CPP_CPLUSPLUS=201703L " , " CURL_STATICLIB " , " CONTROLLER_SUPPORT " , " EMU_BUILD_STRING= " .. _OPTIONS [ " emubuild " ] ,
}
-- include dirs
---------
local common_include = {
' dll ' ,
' dll/proto_gen/ ' .. os_iden ,
' libs ' ,
' libs/utfcpp ' ,
' helpers ' ,
' crash_printer ' ,
' sdk ' ,
' controller ' ,
" overlay_experimental " ,
}
local x32_deps_include = {
2024-05-29 03:24:41 +08:00
path.join ( deps_dir , " libssq/include " ) ,
path.join ( deps_dir , " curl/install32/include " ) ,
path.join ( deps_dir , " protobuf/install32/include " ) ,
path.join ( deps_dir , " zlib/install32/include " ) ,
path.join ( deps_dir , " mbedtls/install32/include " ) ,
2024-05-22 06:01:25 +08:00
}
local x32_deps_overlay_include = {
2024-05-29 03:24:41 +08:00
path.join ( deps_dir , " ingame_overlay/install32/include " ) ,
path.join ( deps_dir , " ingame_overlay/deps/System/install32/include " ) ,
path.join ( deps_dir , " ingame_overlay/deps/mini_detour/install32/include " ) ,
2024-05-22 06:01:25 +08:00
}
local x64_deps_include = {
2024-05-29 03:24:41 +08:00
path.join ( deps_dir , " libssq/include " ) ,
path.join ( deps_dir , " curl/install64/include " ) ,
path.join ( deps_dir , " protobuf/install64/include " ) ,
path.join ( deps_dir , " zlib/install64/include " ) ,
path.join ( deps_dir , " mbedtls/install64/include " ) ,
2024-05-22 06:01:25 +08:00
}
local x64_deps_overlay_include = {
2024-05-29 03:24:41 +08:00
path.join ( deps_dir , " ingame_overlay/install64/include " ) ,
path.join ( deps_dir , " ingame_overlay/deps/System/install64/include " ) ,
path.join ( deps_dir , " ingame_overlay/deps/mini_detour/install64/include " ) ,
2024-05-22 06:01:25 +08:00
}
-- source & header files
---------
local common_files = {
-- dll/
" dll/*.cpp " , " dll/*.c " ,
" dll/*.hpp " , " dll/*.h " ,
-- dll/proto_gen/
' dll/proto_gen/ ' .. os_iden .. ' /*.cc ' , ' dll/proto_gen/ ' .. os_iden .. ' /*.h ' ,
-- controller
" controller/gamepad.c " , " controller/controller/gamepad.h " ,
-- crash_printer/
' crash_printer/ ' .. os_iden .. ' .cpp ' , ' crash_printer/crash_printer/ ' .. os_iden .. ' .hpp ' ,
-- helpers/
" helpers/common_helpers.cpp " , " helpers/common_helpers/common_helpers.hpp " ,
}
-- libs to link
---------
2024-05-28 12:12:10 +08:00
local lib_prefix = ' lib '
2024-05-30 02:11:52 +08:00
local mingw_whole_archive = ' '
2024-05-28 12:12:10 +08:00
-- MinGW on Windows adds this prefix by default and linking ex: '-lssq' will look for 'libssq'
-- so we have to ommit this prefix since it's automatically added
2024-05-30 03:08:04 +08:00
if _ACTION and string.match ( _ACTION , ' gmake.* ' ) then
2024-05-28 12:12:10 +08:00
lib_prefix = ' '
2024-05-30 02:11:52 +08:00
mingw_whole_archive = ' :whole_archive '
2024-05-28 12:12:10 +08:00
end
2024-05-22 06:01:25 +08:00
local common_link_win = {
-- os specific
2024-05-30 02:11:52 +08:00
" Ws2_32 " , " Iphlpapi " , " Wldap32 " , " Winmm " , " Bcrypt " , " Dbghelp " ,
2024-05-29 03:25:55 +08:00
-- gamepad
2024-05-30 02:11:52 +08:00
" Xinput " ,
2024-05-29 03:25:55 +08:00
-- imgui / overlay
2024-05-30 02:11:52 +08:00
" Gdi32 " , " Dwmapi " ,
2024-05-22 06:01:25 +08:00
-- deps
2024-05-30 02:11:52 +08:00
" ssq " .. mingw_whole_archive ,
" zlibstatic " .. mingw_whole_archive ,
lib_prefix .. " curl " .. mingw_whole_archive ,
lib_prefix .. " protobuf-lite " .. mingw_whole_archive ,
" mbedcrypto " .. mingw_whole_archive ,
2024-05-22 06:01:25 +08:00
}
local common_link_linux = {
-- os specific
" pthread " , " dl " ,
-- deps
" ssq:static_whole " ,
" z:static_whole " , -- libz library
" curl:static_whole " ,
" protobuf-lite:static_whole " ,
" mbedcrypto:static_whole " ,
}
2024-05-30 02:49:28 +08:00
-- overlay libs
2024-05-22 06:01:25 +08:00
local overlay_link_win = {
2024-05-30 02:49:28 +08:00
" ingame_overlay " .. mingw_whole_archive ,
" system " .. mingw_whole_archive , -- ingame_overlay dependency
" mini_detour " .. mingw_whole_archive , -- ingame_overlay dependency
2024-05-22 06:01:25 +08:00
}
local overlay_link_linux = {
" ingame_overlay:static_whole " ,
" system:static_whole " , -- ingame_overlay dependency
" mini_detour:static_whole " , -- ingame_overlay dependency
}
-- dirs to custom libs
---------
2024-05-29 03:24:41 +08:00
local x32_ssq_libdir = path.join ( deps_dir , " libssq/build32 " )
local x64_ssq_libdir = path.join ( deps_dir , " libssq/build64 " )
2024-05-30 03:08:04 +08:00
if _ACTION and string.match ( _ACTION , ' vs.+ ' ) then
2024-05-22 06:01:25 +08:00
x32_ssq_libdir = x32_ssq_libdir .. " /Release "
x64_ssq_libdir = x64_ssq_libdir .. " /Release "
end
local x32_deps_libdir = {
x32_ssq_libdir ,
2024-05-29 03:24:41 +08:00
path.join ( deps_dir , " curl/install32/lib " ) ,
path.join ( deps_dir , " protobuf/install32/lib " ) ,
path.join ( deps_dir , " zlib/install32/lib " ) ,
path.join ( deps_dir , " mbedtls/install32/lib " ) ,
2024-05-22 06:01:25 +08:00
}
local x32_deps_overlay_libdir = {
2024-05-29 03:24:41 +08:00
path.join ( deps_dir , " ingame_overlay/install32/lib " ) ,
path.join ( deps_dir , " ingame_overlay/deps/System/install32/lib " ) ,
path.join ( deps_dir , " ingame_overlay/deps/mini_detour/install32/lib " ) ,
2024-05-22 06:01:25 +08:00
}
local x64_deps_libdir = {
x64_ssq_libdir ,
2024-05-29 03:24:41 +08:00
path.join ( deps_dir , " curl/install64/lib " ) ,
path.join ( deps_dir , " protobuf/install64/lib " ) ,
path.join ( deps_dir , " zlib/install64/lib " ) ,
path.join ( deps_dir , " mbedtls/install64/lib " ) ,
path.join ( deps_dir , " ingame_overlay/install64/lib " ) ,
2024-05-22 06:01:25 +08:00
}
local x64_deps_overlay_libdir = {
2024-05-29 03:24:41 +08:00
path.join ( deps_dir , " ingame_overlay/install64/lib " ) ,
path.join ( deps_dir , " ingame_overlay/deps/System/install64/lib " ) ,
path.join ( deps_dir , " ingame_overlay/deps/mini_detour/install64/lib " ) ,
2024-05-22 06:01:25 +08:00
}
2024-05-31 20:09:36 +08:00
-- generate proto
if _OPTIONS [ " genproto " ] then
if genproto ( ) then
print ( " Success! " )
else
error ( " protoc error " )
end
end
-- End generate proto
2024-05-22 06:01:25 +08:00
-- tokenization
-- https://premake.github.io/docs/Tokens/
-- this means expand the global var 'abc' --> %{abc}
-- this means expand the global var 'abc' and resolve its full path --> %{!abc}
-- this means expand the global var 'abc' as a filepath agnostic to the shell (bash/cmd) --> %[%{abc}]
-- string concat and functions calls
-- https://premake.github.io/docs/Your-First-Script#functions-and-arguments
-- "asd" .. "zxc" --> "asdzxc"
-- when doing string concat, call premake functions/actions with regular brackets
-- this will work: targetdir("build/" .. os_iden)
-- this will fail: targetdir "build/" .. os_iden
-- both are function calls actually, ex: filter({ 'a', 'b' }) is similar to filter { 'a', 'b' }
-- stuff defined globally will affect all workspaces & projects
-- https://premake.github.io/docs/Scopes-and-Inheritance/
2024-05-24 13:37:08 +08:00
filter { } -- reset the filter and remove all active keywords
2024-05-22 06:01:25 +08:00
configurations { " debug " , " release " , }
platforms { " x64 " , " x32 " , }
2024-05-29 03:27:47 +08:00
language " C++ "
cppdialect " C++17 "
cdialect " C17 "
2024-05-22 06:01:25 +08:00
filter { " system:linux " , " action:gmake* " , }
cdialect ( " gnu17 " ) -- gamepad.c relies on some linux-specific functions like strdup() and MAX_PATH
filter { } -- reset the filter and remove all active keywords
2024-05-29 03:27:47 +08:00
characterset " Unicode "
2024-05-22 06:01:25 +08:00
staticruntime " on " -- /MT or /MTd
runtime " Release " -- ensure we never link with /MTd, otherwise deps linking will fail
flags {
" NoPCH " , -- no precompiled header on Windows
2024-05-29 03:26:39 +08:00
" MultiProcessorCompile " , -- Enable Visual Studio to use multiple compiler processes when building
" RelativeLinks " ,
2024-05-22 06:01:25 +08:00
}
2024-05-29 03:27:47 +08:00
targetprefix " " -- prevent adding the prefix libxxx on linux
2024-05-30 02:14:17 +08:00
visibility " Hidden " -- hide all symbols by default on GCC (unless they are marked visible)
exceptionhandling " On " -- "Enable exception handling. ... although it does not affect execution."
2024-05-27 09:03:56 +08:00
vpaths { -- just for visual niceness, see: https://premake.github.io/docs/vpaths/
[ " headers/* " ] = {
" **.h " , " **.hxx " , " **.hpp " ,
} ,
[ " src/* " ] = {
" **.c " , " **.cxx " , " **.cpp " , " **.cc " ,
} ,
[ " asm/* " ] = {
" **.s " , " **.asm " ,
} ,
}
2024-05-22 06:01:25 +08:00
-- arch
---------
filter { " platforms:x32 " , }
architecture " x86 "
filter { " platforms:x64 " , }
architecture " x86_64 "
-- debug/optimization flags
---------
2024-05-30 03:42:16 +08:00
filter { } -- reset the filter and remove all active keywords
2024-05-30 02:14:17 +08:00
intrinsics " On "
2024-05-22 06:01:25 +08:00
filter { " configurations:*debug " , }
symbols " On "
optimize " Off "
filter { " configurations:*release " , }
symbols " Off "
optimize " On "
--- common compiler/linker options
---------
2024-05-22 08:29:31 +08:00
-- Visual Studio common compiler/linker options
filter { " action:vs* " , }
2024-05-22 06:01:25 +08:00
buildoptions {
2024-05-29 03:26:39 +08:00
" /permissive- " , " /DYNAMICBASE " ,
2024-05-22 06:01:25 +08:00
" /utf-8 " , " /Zc:char8_t- " , " /EHsc " , " /GL- "
}
linkoptions {
-- source of emittoolversioninfo: https://developercommunity.visualstudio.com/t/add-linker-option-to-strip-rich-stamp-from-exe-hea/740443
" /NOLOGO " , " /emittoolversioninfo:no "
}
2024-05-22 08:29:31 +08:00
-- GNU make common compiler/linker options
filter { " action:gmake* " , }
2024-05-22 06:01:25 +08:00
buildoptions {
2024-05-30 02:14:17 +08:00
-- https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html
" -fno-jump-tables " , " -Wno-switch " ,
2024-05-22 06:01:25 +08:00
}
linkoptions {
2024-05-24 12:06:15 +08:00
" -Wl,--exclude-libs,ALL " ,
2024-05-22 06:01:25 +08:00
}
-- this is made separate because GCC complains but not CLANG
2024-05-27 09:03:56 +08:00
filter { " action:gmake* " , " files:*.cpp or *.cxx or *.cc or *.hpp " , }
2024-05-22 06:01:25 +08:00
buildoptions {
" -fno-char8_t " , -- GCC gives a warning when a .c file is compiled with this
}
filter { } -- reset the filter and remove all active keywords
-- defines
---------
-- release mode defines
filter { " configurations:*release " }
defines {
" NDEBUG " , " EMU_RELEASE_BUILD "
}
-- debug mode defines
filter { " configurations:*debug " }
defines {
" DEBUG " ,
}
-- Windows defines
filter { " system:windows " , }
defines {
" _CRT_SECURE_NO_WARNINGS " ,
2024-05-24 10:50:14 +08:00
}
2024-05-22 06:01:25 +08:00
-- Linux defines
filter { " system:linux " }
defines {
" GNUC " ,
}
2024-05-24 15:02:51 +08:00
-- MinGw on Windows
2024-05-30 02:48:49 +08:00
-- common compiler/linker options: source: https://gcc.gnu.org/onlinedocs/gcc/Cygwin-and-MinGW-Options.html
2024-05-23 07:19:06 +08:00
---------
2024-05-24 15:02:51 +08:00
filter { " system:windows " , " action:gmake* " , }
2024-05-29 03:29:00 +08:00
-- MinGw on Windows common defines
-- MinGw on Windows doesn't have a definition for '_S_IFDIR' which is microsoft specific: https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/stat-functions
-- this is used in 'base.cpp' -> if ( buffer.st_mode & _S_IFDIR)
-- instead microsoft has an alternative but only enabled when _CRT_DECLARE_NONSTDC_NAMES is defined
-- https://learn.microsoft.com/en-us/cpp/c-runtime-library/compatibility
2024-05-24 15:02:51 +08:00
defines {
-- '_CRT_NONSTDC_NO_WARNINGS',
' _CRT_DECLARE_NONSTDC_NAMES ' ,
}
2024-05-29 03:29:00 +08:00
linkoptions {
-- I don't know why but if libgcc/libstdc++ as well as pthreads are not statically linked
-- none of the output binary .dlls will reach their DllMain() in x64dbg
-- even when they're force-loaded in any process they immediately unload
2024-05-30 02:11:52 +08:00
-- '-static-libgcc' ,'-static-libstdc++',
' -static ' ,
2024-05-29 03:29:00 +08:00
}
2024-05-29 03:29:35 +08:00
-- MinGw on Windows cannot compile 'creatwth.cpp' from Detours lib (error: 'DWordMult' was not declared in this scope)
-- because intsafe.h isn't included by default
filter { " system:windows " , " action:gmake* " , " files:**/detours/creatwth.cpp " }
buildoptions {
" -include intsafe.h " ,
}
2024-05-23 07:19:06 +08:00
2024-05-24 15:02:51 +08:00
2024-05-22 06:01:25 +08:00
-- post build change DOS stub + sign
---------
if os.target ( ) == " windows " then
2024-05-23 07:44:11 +08:00
-- token expansion like '%{cfg.platform}' happens later during project build
2024-05-27 09:03:27 +08:00
local dos_stub_exe = path.translate ( path.getabsolute ( ' resources/win/file_dos_stub/file_dos_stub_%{cfg.platform}.exe ' , _MAIN_SCRIPT_DIR ) , ' \\ ' )
local signer_tool = path.translate ( path.getabsolute ( ' third-party/build/win/cert/sign_helper.bat ' , _MAIN_SCRIPT_DIR ) , ' \\ ' )
2024-05-22 06:01:25 +08:00
-- change dos stub
2024-05-23 07:44:11 +08:00
filter { " system:windows " , " options:dosstub " , }
2024-05-22 06:01:25 +08:00
postbuildcommands {
2024-05-23 07:44:11 +08:00
' " ' .. dos_stub_exe .. ' " %[%{!cfg.buildtarget.abspath}] ' ,
2024-05-22 06:01:25 +08:00
}
-- sign
2024-05-22 08:09:18 +08:00
filter { " system:windows " , " options:winsign " , }
2024-05-22 06:01:25 +08:00
postbuildcommands {
' " ' .. signer_tool .. ' " %[%{!cfg.buildtarget.abspath}] ' ,
}
filter { } -- reset the filter and remove all active keywords
end
workspace " gbe "
location ( " build/project/%{_ACTION}/ " .. os_iden )
2024-05-27 09:03:27 +08:00
2024-05-22 08:03:02 +08:00
-- Project api_regular
2024-05-22 06:01:25 +08:00
---------
2024-05-22 08:03:02 +08:00
project " api_regular "
2024-05-22 06:01:25 +08:00
kind " SharedLib "
location " %{wks.location}/%{prj.name} "
2024-05-22 08:03:02 +08:00
targetdir ( " build/ " .. os_iden .. " /%{_ACTION}/%{cfg.buildcfg}/regular/%{cfg.platform} " )
2024-05-22 06:01:25 +08:00
-- name
---------
filter { " system:windows " , " platforms:x32 " , }
targetname " steam_api "
filter { " system:windows " , " platforms:x64 " , }
targetname " steam_api64 "
filter { " system:linux " , }
targetname " libsteam_api "
-- defines
---------
filter { } -- reset the filter and remove all active keywords
defines { -- added to all filters, later defines will be appended
common_emu_defines ,
}
-- include dir
---------
-- common include dir
filter { } -- reset the filter and remove all active keywords
includedirs {
common_include ,
}
-- x32 include dir
filter { " platforms:x32 " , }
includedirs {
x32_deps_include ,
}
-- x64 include dir
filter { " platforms:x64 " , }
includedirs {
x64_deps_include ,
}
-- common source & header files
---------
filter { } -- reset the filter and remove all active keywords
files { -- added to all filters, later defines will be appended
common_files ,
}
-- Windows common source files
filter { " system:windows " , }
removefiles {
" dll/wrap.cpp "
}
-- Windows x32 common source files
2024-05-22 08:09:18 +08:00
filter { " system:windows " , " platforms:x32 " , " options:winrsrc " , }
2024-05-22 06:01:25 +08:00
files {
" resources/win/api/32/resources.rc "
}
-- Windows x64 common source files
2024-05-22 08:09:18 +08:00
filter { " system:windows " , " platforms:x64 " , " options:winrsrc " , }
2024-05-22 06:01:25 +08:00
files {
" resources/win/api/64/resources.rc "
}
-- libs to link
---------
-- Windows libs to link
filter { " system:windows " , }
links {
common_link_win ,
}
-- Linux libs to link
filter { " system:linux " , }
links {
common_link_linux ,
}
-- libs search dir
---------
-- x32 libs search dir
filter { " platforms:x32 " , }
libdirs {
x32_deps_libdir ,
}
-- x64 libs search dir
filter { " platforms:x64 " , }
libdirs {
x64_deps_libdir ,
}
2024-05-22 08:03:02 +08:00
-- End api_regular
2024-05-22 06:01:25 +08:00
2024-05-22 08:03:02 +08:00
-- Project api_experimental
2024-05-22 06:01:25 +08:00
---------
2024-05-22 08:03:02 +08:00
project " api_experimental "
2024-05-22 06:01:25 +08:00
kind " SharedLib "
location " %{wks.location}/%{prj.name} "
targetdir ( " build/ " .. os_iden .. " /%{_ACTION}/%{cfg.buildcfg}/experimental/%{cfg.platform} " )
-- name
---------
filter { " system:windows " , " platforms:x32 " , }
targetname " steam_api "
filter { " system:windows " , " platforms:x64 " , }
targetname " steam_api64 "
filter { " system:linux " , }
targetname " libsteam_api "
-- defines
---------
filter { } -- reset the filter and remove all active keywords
defines { -- added to all filters, later defines will be appended
common_emu_defines ,
" EMU_OVERLAY " , " ImTextureID=ImU64 " ,
}
-- Windows defines
filter { " system:windows " }
defines {
" EMU_EXPERIMENTAL_BUILD " ,
}
-- include dir
---------
-- common include dir
filter { } -- reset the filter and remove all active keywords
includedirs {
common_include ,
}
-- x32 include dir
filter { " platforms:x32 " , }
includedirs {
x32_deps_include ,
x32_deps_overlay_include ,
}
-- x64 include dir
filter { " platforms:x64 " , }
includedirs {
x64_deps_include ,
x64_deps_overlay_include ,
}
-- common source & header files
---------
filter { } -- reset the filter and remove all active keywords
files { -- added to all filters, later defines will be appended
common_files ,
" overlay_experimental/**.cpp " , " overlay_experimental/**.hpp " ,
" overlay_experimental/**.c " , " overlay_experimental/**.h " ,
}
-- Windows common source files
filter { " system:windows " , }
files {
" libs/detours/**.cpp " , " libs/detours/**.hpp " ,
" libs/detours/**.c " , " libs/detours/**.h " ,
}
removefiles {
" dll/wrap.cpp "
}
-- Windows x32 common source files
2024-05-22 08:09:18 +08:00
filter { " system:windows " , " platforms:x32 " , " options:winrsrc " , }
2024-05-22 06:01:25 +08:00
files {
" resources/win/api/32/resources.rc "
}
-- Windows x64 common source files
2024-05-22 08:09:18 +08:00
filter { " system:windows " , " platforms:x64 " , " options:winrsrc " , }
2024-05-22 06:01:25 +08:00
files {
" resources/win/api/64/resources.rc "
}
-- libs to link
---------
-- Windows libs to link
filter { " system:windows " , }
links {
common_link_win ,
overlay_link_win ,
}
-- Linux libs to link
filter { " system:linux " , }
links {
common_link_linux ,
overlay_link_linux ,
}
-- libs search dir
---------
-- x32 libs search dir
filter { " platforms:x32 " , }
libdirs {
x32_deps_libdir ,
x32_deps_overlay_libdir ,
}
-- x64 libs search dir
filter { " platforms:x64 " , }
libdirs {
x64_deps_libdir ,
x64_deps_overlay_libdir ,
}
2024-05-22 08:03:02 +08:00
-- End api_experimental
2024-05-22 06:01:25 +08:00
-- Project steamclient_experimental
---------
project " steamclient_experimental "
kind " SharedLib "
location " %{wks.location}/%{prj.name} "
-- targetdir
---------
filter { " system:windows " , }
targetdir ( " build/ " .. os_iden .. " /%{_ACTION}/%{cfg.buildcfg}/steamclient_experimental " )
filter { " system:linux " , }
targetdir ( " build/ " .. os_iden .. " /%{_ACTION}/%{cfg.buildcfg}/experimental/%{cfg.platform} " )
-- name
---------
filter { " system:windows " , " platforms:x32 " , }
targetname " steamclient "
filter { " system:windows " , " platforms:x64 " , }
targetname " steamclient64 "
filter { " system:linux " , }
targetname " steamclient "
-- defines
---------
filter { } -- reset the filter and remove all active keywords
defines { -- added to all filters, later defines will be appended
common_emu_defines ,
" STEAMCLIENT_DLL " , " EMU_OVERLAY " , " ImTextureID=ImU64 " ,
}
-- Windows defines
filter { " system:windows " }
defines {
" EMU_EXPERIMENTAL_BUILD " ,
}
-- include dir
---------
-- common include dir
filter { } -- reset the filter and remove all active keywords
includedirs {
common_include ,
}
-- x32 include dir
filter { " platforms:x32 " , }
includedirs {
x32_deps_include ,
x32_deps_overlay_include ,
}
-- x64 include dir
filter { " platforms:x64 " , }
includedirs {
x64_deps_include ,
x64_deps_overlay_include ,
}
-- common source & header files
---------
filter { } -- reset the filter and remove all active keywords
files { -- added to all filters, later defines will be appended
common_files ,
" overlay_experimental/**.cpp " , " overlay_experimental/**.hpp " ,
" overlay_experimental/**.c " , " overlay_experimental/**.h " ,
}
-- Windows common source files
filter { " system:windows " , }
files {
" libs/detours/**.cpp " , " libs/detours/**.hpp " ,
" libs/detours/**.c " , " libs/detours/**.h " ,
}
removefiles {
" dll/wrap.cpp "
}
-- Windows x32 common source files
2024-05-22 08:09:18 +08:00
filter { " system:windows " , " platforms:x32 " , " options:winrsrc " , }
2024-05-22 06:01:25 +08:00
files {
" resources/win/client/32/resources.rc "
}
-- Windows x64 common source files
2024-05-22 08:09:18 +08:00
filter { " system:windows " , " platforms:x64 " , " options:winrsrc " , }
2024-05-22 06:01:25 +08:00
files {
" resources/win/client/64/resources.rc "
}
-- libs to link
---------
-- Windows libs to link
filter { " system:windows " , }
links {
common_link_win ,
overlay_link_win ,
}
-- Linux libs to link
filter { " system:linux " , }
links {
common_link_linux ,
overlay_link_linux ,
}
-- libs search dir
---------
-- x32 libs search dir
filter { " platforms:x32 " , }
libdirs {
x32_deps_libdir ,
x32_deps_overlay_libdir ,
}
-- x64 libs search dir
filter { " platforms:x64 " , }
libdirs {
x64_deps_libdir ,
x64_deps_overlay_libdir ,
}
-- End steamclient_experimental
-- Project tool_lobby_connect
---------
project " tool_lobby_connect "
kind " ConsoleApp "
location " %{wks.location}/%{prj.name} "
targetdir ( " build/ " .. os_iden .. " /%{_ACTION}/%{cfg.buildcfg}/tools/lobby_connect " )
targetname " lobby_connect_%{cfg.platform} "
-- defines
---------
filter { } -- reset the filter and remove all active keywords
defines { -- added to all filters, later defines will be appended
common_emu_defines ,
" NO_DISK_WRITES " , " LOBBY_CONNECT " ,
}
2024-05-29 03:52:23 +08:00
removedefines {
" CONTROLLER_SUPPORT " ,
}
2024-05-22 06:01:25 +08:00
-- include dir
---------
-- common include dir
filter { } -- reset the filter and remove all active keywords
includedirs {
common_include ,
}
-- x32 include dir
filter { " platforms:x32 " , }
includedirs {
x32_deps_include ,
}
-- x64 include dir
filter { " platforms:x64 " , }
includedirs {
x64_deps_include ,
}
-- common source & header files
---------
filter { } -- reset the filter and remove all active keywords
files { -- added to all filters, later defines will be appended
common_files ,
' tools/lobby_connect/lobby_connect.cpp '
}
2024-05-29 03:52:23 +08:00
removefiles {
" controller/gamepad.c " ,
}
2024-05-22 06:01:25 +08:00
-- Windows x32 common source files
2024-05-22 08:09:18 +08:00
filter { " system:windows " , " platforms:x32 " , " options:winrsrc " , }
2024-05-22 06:01:25 +08:00
files {
" resources/win/launcher/32/resources.rc "
}
-- Windows x64 common source files
2024-05-22 08:09:18 +08:00
filter { " system:windows " , " platforms:x64 " , " options:winrsrc " , }
2024-05-22 06:01:25 +08:00
files {
" resources/win/launcher/64/resources.rc "
}
-- libs to link
---------
-- Windows libs to link
filter { " system:windows " , }
links {
common_link_win ,
2024-05-23 07:17:08 +08:00
' Comdlg32 ' ,
2024-05-22 06:01:25 +08:00
}
-- Linux libs to link
filter { " system:linux " , }
links {
common_link_linux ,
}
-- libs search dir
---------
-- x32 libs search dir
filter { " platforms:x32 " , }
libdirs {
x32_deps_libdir ,
}
-- x64 libs search dir
filter { " platforms:x64 " , }
libdirs {
x64_deps_libdir ,
}
-- End tool_lobby_connect
-- Project tool_generate_interfaces
project " tool_generate_interfaces "
kind " ConsoleApp "
location " %{wks.location}/%{prj.name} "
targetdir ( " build/ " .. os_iden .. " /%{_ACTION}/%{cfg.buildcfg}/tools/generate_interfaces " )
targetname " generate_interfaces_%{cfg.platform} "
-- common source & header files
---------
files {
" tools/generate_interfaces/** "
}
-- End tool_generate_interfaces
-- Project lib_steamnetworkingsockets START
project " lib_steamnetworkingsockets "
kind " SharedLib "
location " %{wks.location}/%{prj.name} "
targetdir ( " build/ " .. os_iden .. " /%{_ACTION}/%{cfg.buildcfg}/steamnetworkingsockets/%{cfg.platform} " )
targetname " steamnetworkingsockets "
2024-05-22 08:03:02 +08:00
2024-05-22 06:01:25 +08:00
-- include dir
---------
-- common include dir
includedirs {
common_include ,
}
-- common source & header files
---------
files {
" networking_sockets_lib/** " ,
}
-- End lib_steamnetworkingsockets
-- Project lib_game_overlay_renderer
project " lib_game_overlay_renderer "
kind " SharedLib "
location " %{wks.location}/%{prj.name} "
-- targetdir
---------
filter { " system:windows " , }
targetdir ( " build/ " .. os_iden .. " /%{_ACTION}/%{cfg.buildcfg}/steamclient_experimental " )
filter { " system:linux " , }
targetdir ( " build/ " .. os_iden .. " /%{_ACTION}/%{cfg.buildcfg}/gameoverlayrenderer/%{cfg.platform} " )
-- name
---------
filter { " system:windows " , " platforms:x32 " , }
targetname " GameOverlayRenderer "
filter { " system:windows " , " platforms:x64 " , }
targetname " GameOverlayRenderer64 "
filter { " system:linux " , }
targetname " gameoverlayrenderer "
-- include dir
---------
-- common include dir
filter { } -- reset the filter and remove all active keywords
includedirs {
common_include ,
}
-- x32 include dir
filter { " platforms:x32 " , }
includedirs {
x32_deps_include ,
}
-- x64 include dir
filter { " platforms:x64 " , }
includedirs {
x64_deps_include ,
}
-- common source & header files
---------
filter { } -- reset the filter and remove all active keywords
files {
" game_overlay_renderer_lib/** "
}
-- x32 common source files
2024-05-22 08:09:18 +08:00
filter { " system:windows " , " platforms:x32 " , " options:winrsrc " , }
2024-05-22 06:01:25 +08:00
files {
" resources/win/game_overlay_renderer/32/resources.rc "
}
-- x64 common source files
2024-05-22 08:09:18 +08:00
filter { " system:windows " , " platforms:x64 " , " options:winrsrc " , }
2024-05-22 06:01:25 +08:00
files {
" resources/win/game_overlay_renderer/64/resources.rc "
}
-- End lib_game_overlay_renderer
-- WINDOWS ONLY TARGETS START
if os.target ( ) == " windows " then
2024-05-24 10:39:37 +08:00
-- Project steamclient_experimental_stub
2024-05-22 06:01:25 +08:00
---------
2024-05-24 10:39:37 +08:00
project " steamclient_experimental_stub "
2024-05-22 06:01:25 +08:00
-- https://stackoverflow.com/a/63228027
kind " SharedLib "
location " %{wks.location}/%{prj.name} "
targetdir ( " build/ " .. os_iden .. " /%{_ACTION}/%{cfg.buildcfg}/experimental/%{cfg.platform} " )
-- name
---------
filter { " platforms:x32 " , }
targetname " steamclient "
filter { " platforms:x64 " , }
targetname " steamclient64 "
-- common source & header files
---------
filter { } -- reset the filter and remove all active keywords
files { -- added to all filters, later defines will be appended
" steamclient/steamclient.cpp " ,
}
-- x32 common source files
2024-05-22 08:09:18 +08:00
filter { " platforms:x32 " , " options:winrsrc " , }
2024-05-22 06:01:25 +08:00
files {
" resources/win/client/32/resources.rc "
}
-- x64 common source files
2024-05-22 08:09:18 +08:00
filter { " platforms:x64 " , " options:winrsrc " , }
2024-05-22 06:01:25 +08:00
files {
" resources/win/client/64/resources.rc "
}
2024-05-24 10:39:37 +08:00
-- End steamclient_experimental_stub
2024-05-22 06:01:25 +08:00
2024-05-24 10:39:37 +08:00
-- Project steamclient_experimental_extra
project " steamclient_experimental_extra "
2024-05-22 06:01:25 +08:00
kind " SharedLib "
location " %{wks.location}/%{prj.name} "
targetdir ( " build/ " .. os_iden .. " /%{_ACTION}/%{cfg.buildcfg}/steamclient_experimental/extra_dlls " )
targetname " steamclient_extra_%{cfg.platform} "
-- include dir
---------
-- common include dir
filter { } -- reset the filter and remove all active keywords
includedirs {
common_include ,
' tools/steamclient_loader/win/extra_protection ' ,
}
-- x32 include dir
filter { " platforms:x32 " , }
includedirs {
x32_deps_include ,
}
-- x64 include dir
filter { " platforms:x64 " , }
includedirs {
x64_deps_include ,
}
-- common source & header files
---------
filter { } -- reset the filter and remove all active keywords
files {
" tools/steamclient_loader/win/extra_protection/** " ,
" helpers/pe_helpers.cpp " ,
" helpers/common_helpers.cpp " ,
-- detours
" libs/detours/**.cpp " , " libs/detours/**.hpp " ,
" libs/detours/**.c " , " libs/detours/**.h " ,
}
-- x32 common source files
2024-05-22 08:09:18 +08:00
filter { " platforms:x32 " , " options:winrsrc " , }
2024-05-22 06:01:25 +08:00
files {
" resources/win/client/32/resources.rc "
}
-- x64 common source files
2024-05-22 08:09:18 +08:00
filter { " platforms:x64 " , " options:winrsrc " , }
2024-05-22 06:01:25 +08:00
files {
" resources/win/client/64/resources.rc "
}
2024-05-24 10:39:37 +08:00
-- End steamclient_experimental_extra
2024-05-22 06:01:25 +08:00
2024-05-24 10:39:37 +08:00
-- Project steamclient_experimental_loader
project " steamclient_experimental_loader "
2024-05-22 06:01:25 +08:00
kind " WindowedApp "
location " %{wks.location}/%{prj.name} "
targetdir ( " build/ " .. os_iden .. " /%{_ACTION}/%{cfg.buildcfg}/steamclient_experimental " )
targetname " steamclient_loader_%{cfg.platform} "
2024-05-24 15:02:51 +08:00
--- common compiler/linker options
---------
-- MinGW on Windows
filter { " action:gmake* " , }
-- source: https://gcc.gnu.org/onlinedocs/gcc/Cygwin-and-MinGW-Options.html
linkoptions {
-- MinGW on Windows cannot link wWinMain by default
" -municode " ,
}
2024-05-22 06:01:25 +08:00
-- include dir
---------
-- common include dir
filter { } -- reset the filter and remove all active keywords
includedirs {
common_include ,
}
-- x32 include dir
filter { " platforms:x32 " , }
includedirs {
x32_deps_include ,
}
-- x64 include dir
filter { " platforms:x64 " , }
includedirs {
x64_deps_include ,
}
-- common source & header files
---------
filter { } -- reset the filter and remove all active keywords
files {
" tools/steamclient_loader/win/*.cpp " ,
" helpers/pe_helpers.cpp " ,
" helpers/common_helpers.cpp " ,
" helpers/dbg_log.cpp " ,
}
-- x32 common source files
2024-05-22 08:09:18 +08:00
filter { " platforms:x32 " , " options:winrsrc " , }
2024-05-22 06:01:25 +08:00
files {
" resources/win/launcher/32/resources.rc "
}
-- x64 common source files
2024-05-22 08:09:18 +08:00
filter { " platforms:x64 " , " options:winrsrc " , }
2024-05-22 06:01:25 +08:00
files {
" resources/win/launcher/64/resources.rc "
}
-- libs to link
---------
filter { } -- reset the filter and remove all active keywords
links {
-- common_link_win,
2024-05-23 07:17:08 +08:00
' user32 ' ,
2024-05-22 06:01:25 +08:00
}
2024-05-24 10:39:37 +08:00
-- End steamclient_experimental_loader
2024-05-22 06:01:25 +08:00
2024-05-23 07:44:53 +08:00
2024-05-24 10:40:19 +08:00
-- Project tool_file_dos_stub_changer
project " tool_file_dos_stub_changer "
2024-05-23 07:44:53 +08:00
kind " ConsoleApp "
location " %{wks.location}/%{prj.name} "
2024-05-24 10:40:19 +08:00
targetdir ( " build/ " .. os_iden .. " /%{_ACTION}/%{cfg.buildcfg}/file_dos_stub_changer " )
2024-05-23 07:44:53 +08:00
targetname " file_dos_stub_%{cfg.platform} "
-- include dir
---------
-- common include dir
filter { } -- reset the filter and remove all active keywords
includedirs {
common_include ,
}
-- common source & header files
---------
filter { } -- reset the filter and remove all active keywords
files {
" resources/win/file_dos_stub/file_dos_stub.cpp " ,
" helpers/pe_helpers.cpp " ,
" helpers/common_helpers.cpp " ,
}
2024-05-24 10:40:19 +08:00
-- End tool_file_dos_stub_changer
2024-05-23 07:44:53 +08:00
2024-05-22 06:01:25 +08:00
end
-- End WINDOWS ONLY TARGETS
2024-05-22 08:03:02 +08:00
2024-05-22 06:01:25 +08:00
-- LINUX ONLY TARGETS START
if os.target ( ) == " linux " then
2024-05-24 10:39:37 +08:00
-- Project steamclient_regular
2024-05-22 06:01:25 +08:00
---------
2024-05-24 10:39:37 +08:00
project " steamclient_regular "
2024-05-22 06:01:25 +08:00
kind " SharedLib "
location " %{wks.location}/%{prj.name} "
2024-05-22 08:03:02 +08:00
targetdir ( " build/ " .. os_iden .. " /%{_ACTION}/%{cfg.buildcfg}/regular/%{cfg.platform} " )
2024-05-22 06:01:25 +08:00
targetname " steamclient "
-- defines
---------
filter { } -- reset the filter and remove all active keywords
defines { -- added to all filters, later defines will be appended
common_emu_defines ,
" STEAMCLIENT_DLL " ,
}
-- include dir
---------
-- common include dir
filter { } -- reset the filter and remove all active keywords
includedirs {
common_include ,
}
-- x32 include dir
filter { " platforms:x32 " , }
includedirs {
x32_deps_include ,
}
-- x64 include dir
filter { " platforms:x64 " , }
includedirs {
x64_deps_include ,
}
-- common source & header files
---------
filter { } -- reset the filter and remove all active keywords
files { -- added to all filters, later defines will be appended
common_files ,
}
-- libs to link
---------
filter { } -- reset the filter and remove all active keywords
links { -- added to all filters, later defines will be appended
common_link_linux ,
}
-- libs search dir
---------
-- x32 libs search dir
filter { " platforms:x32 " , }
libdirs {
x32_deps_libdir ,
}
-- x64 libs search dir
filter { " platforms:x64 " , }
libdirs {
x64_deps_libdir ,
}
2024-05-24 10:39:37 +08:00
-- End steamclient_regular
2024-05-22 06:01:25 +08:00
end
-- End LINUX ONLY TARGETS
-- End Workspace