Merge pull request #24 from Edremon/mingw

Fix building with wine wrapped MSVC
This commit is contained in:
Detanup01 2024-08-23 20:20:33 +02:00 committed by GitHub
commit 0684fa0c72
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 53 additions and 18 deletions

View File

@ -40,6 +40,22 @@ newoption {
default = nil 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 -- deps extraction
newoption { newoption {
category = "extract", 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') error('third-party dir is missing')
end end
if os.host() == 'windows' then if _OPTIONS["custom-extractor"] then
extractor = extractor .. '.exe' extractor = _OPTIONS["custom-extractor"]
end print('using custom extractor: ' .. _OPTIONS["custom-extractor"])
if not extractor or not os.isfile(extractor) then else
error('extractor is missing from third-party dir. extractor: ' .. extractor) 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 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, '/MT')
table.insert(all_cxxflags_init, '/D_MT') table.insert(all_cxxflags_init, '/D_MT')
if is_32 then local cmake_generator = os.getenv("CMAKE_GENERATOR") or ""
cmd_gen = cmd_gen .. ' -A Win32' if cmake_generator == "" and os.host() == 'windows' or cmake_generator:find("Visual Studio") then
else if is_32 then
cmd_gen = cmd_gen .. ' -A x64' cmd_gen = cmd_gen .. ' -A Win32'
else
cmd_gen = cmd_gen .. ' -A x64'
end
end end
else else
error("unsupported action for cmake build: " .. _ACTION) 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 -- write toolchain file
local toolchain_file_content = '' 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 if #cflags_init_str > 0 then
toolchain_file_content = toolchain_file_content .. 'set(CMAKE_C_FLAGS_INIT "' .. cflags_init_str .. '" )\n' toolchain_file_content = toolchain_file_content .. 'set(CMAKE_C_FLAGS_INIT "' .. cflags_init_str .. '" )\n'
end end
@ -361,10 +388,12 @@ end
-- chmod tools -- chmod tools
if os.host() == "linux" then if os.host() == "linux" then
local ok_chmod, err_chmod = os.chmod(extractor, "777") if not _OPTIONS["custom-extractor"] then
if not ok_chmod then local ok_chmod, err_chmod = os.chmod(extractor, "777")
error("cannot chmod: " .. err_chmod) if not ok_chmod then
return error("cannot chmod: " .. err_chmod)
return
end
end end
if not _OPTIONS["custom-cmake"] then if not _OPTIONS["custom-cmake"] then

View File

@ -99,7 +99,7 @@ local function genproto()
local out_dir = 'proto_gen/' .. os_iden local out_dir = 'proto_gen/' .. os_iden
if os.host() == "windows" then if os.target() == "windows" then
protoc_exe = protoc_exe .. '.exe' protoc_exe = protoc_exe .. '.exe'
end end
@ -114,8 +114,8 @@ local function genproto()
error("Error: " .. err_mk) error("Error: " .. err_mk)
return return
end end
if os.host() == "linux" then if os.target() == "linux" then
local ok_chmod, err_chmod = os.chmod(protoc_exe, "777") local ok_chmod, err_chmod = os.chmod(protoc_exe, "777")
if not ok_chmod then if not ok_chmod then
error("Error: " .. err_chmod) error("Error: " .. err_chmod)
@ -123,6 +123,10 @@ local function genproto()
end end
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) return os.execute(protoc_exe .. ' dll/net.proto -I./dll/ --cpp_out=' .. out_dir)
end end
@ -406,7 +410,9 @@ local overlay_link = {
--------- ---------
local x32_ssq_libdir = path.join(deps_dir, "libssq/build32") local x32_ssq_libdir = path.join(deps_dir, "libssq/build32")
local x64_ssq_libdir = path.join(deps_dir, "libssq/build64") 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" x32_ssq_libdir = x32_ssq_libdir .. "/Release"
x64_ssq_libdir = x64_ssq_libdir .. "/Release" x64_ssq_libdir = x64_ssq_libdir .. "/Release"
end end