From 3bc03070aa169dc4c97b23c031e960fab1c2d56e Mon Sep 17 00:00:00 2001 From: Edremon <106028744+Edremon@users.noreply.github.com.> Date: Thu, 22 Aug 2024 01:53:27 +0000 Subject: [PATCH] fix building with wine wrapped MSVC --- premake5-deps.lua | 57 +++++++++++++++++++++++++++++++++++------------ premake5.lua | 14 ++++++++---- 2 files changed, 53 insertions(+), 18 deletions(-) diff --git a/premake5-deps.lua b/premake5-deps.lua index 9fd7232d..40d4a0e1 100644 --- a/premake5-deps.lua +++ b/premake5-deps.lua @@ -40,6 +40,22 @@ newoption { default = nil } +newoption { + category = "tools", + trigger = "cmake-toolchain", + description = "Use cmake toolchain", + value = 'path/to/toolchain.cmake', + default = nil +} + +newoption { + category = "tools", + trigger = "custom-extractor", + description = "Use custom extractor", + value = 'path/to/7z.exe', + default = nil +} + -- deps extraction newoption { category = "extract", @@ -177,11 +193,16 @@ if not third_party_dir or not os.isdir(third_party_dir) then error('third-party dir is missing') end -if os.host() == 'windows' then - extractor = extractor .. '.exe' -end -if not extractor or not os.isfile(extractor) then - error('extractor is missing from third-party dir. extractor: ' .. extractor) +if _OPTIONS["custom-extractor"] then + extractor = _OPTIONS["custom-extractor"] + print('using custom extractor: ' .. _OPTIONS["custom-extractor"]) +else + if os.host() == 'windows' then + extractor = extractor .. '.exe' + end + if not extractor or not os.isfile(extractor) then + error('extractor is missing from third-party dir. extractor: ' .. extractor) + end end @@ -241,11 +262,14 @@ local function cmake_build(dep_folder, is_32, extra_cmd_defs, c_flags_init, cxx_ table.insert(all_cxxflags_init, '/MT') table.insert(all_cxxflags_init, '/D_MT') - - if is_32 then - cmd_gen = cmd_gen .. ' -A Win32' - else - cmd_gen = cmd_gen .. ' -A x64' + + local cmake_generator = os.getenv("CMAKE_GENERATOR") or "" + if cmake_generator == "" and os.host() == 'windows' or cmake_generator:find("Visual Studio") then + if is_32 then + cmd_gen = cmd_gen .. ' -A Win32' + else + cmd_gen = cmd_gen .. ' -A x64' + end end else error("unsupported action for cmake build: " .. _ACTION) @@ -283,6 +307,9 @@ local function cmake_build(dep_folder, is_32, extra_cmd_defs, c_flags_init, cxx_ -- write toolchain file local toolchain_file_content = '' + if _OPTIONS["cmake-toolchain"] then + toolchain_file_content='include(' .. _OPTIONS["cmake-toolchain"] .. ')\n\n' + end if #cflags_init_str > 0 then toolchain_file_content = toolchain_file_content .. 'set(CMAKE_C_FLAGS_INIT "' .. cflags_init_str .. '" )\n' end @@ -361,10 +388,12 @@ end -- chmod tools if os.host() == "linux" then - local ok_chmod, err_chmod = os.chmod(extractor, "777") - if not ok_chmod then - error("cannot chmod: " .. err_chmod) - return + if not _OPTIONS["custom-extractor"] then + local ok_chmod, err_chmod = os.chmod(extractor, "777") + if not ok_chmod then + error("cannot chmod: " .. err_chmod) + return + end end if not _OPTIONS["custom-cmake"] then diff --git a/premake5.lua b/premake5.lua index b2f122a4..79ceef9f 100644 --- a/premake5.lua +++ b/premake5.lua @@ -99,7 +99,7 @@ local function genproto() local out_dir = 'proto_gen/' .. os_iden - if os.host() == "windows" then + if os.target() == "windows" then protoc_exe = protoc_exe .. '.exe' end @@ -114,8 +114,8 @@ local function genproto() error("Error: " .. err_mk) return end - - if os.host() == "linux" then + + if os.target() == "linux" then local ok_chmod, err_chmod = os.chmod(protoc_exe, "777") if not ok_chmod then error("Error: " .. err_chmod) @@ -123,6 +123,10 @@ local function genproto() end end + if (os.host() == "linux" and os.target() == "windows") then + protoc_exe = 'wine ' .. protoc_exe + end + return os.execute(protoc_exe .. ' dll/net.proto -I./dll/ --cpp_out=' .. out_dir) end @@ -406,7 +410,9 @@ local overlay_link = { --------- local x32_ssq_libdir = path.join(deps_dir, "libssq/build32") local x64_ssq_libdir = path.join(deps_dir, "libssq/build64") -if _ACTION and string.match(_ACTION, 'vs.+') then + +local cmake_generator = os.getenv("CMAKE_GENERATOR") or "" +if cmake_generator == "" and os.host() == 'windows' or cmake_generator:find("Visual Studio") then x32_ssq_libdir = x32_ssq_libdir .. "/Release" x64_ssq_libdir = x64_ssq_libdir .. "/Release" end