summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2020-11-21 11:51:44 +0800
committerruki <[email protected]>2020-11-21 11:51:44 +0800
commitca6a421a88efb8bf4bc6728fd3602b600fadd32f (patch)
tree12a3d182328805705bfda10141cbf6623dc581a4
parentf55755fb7ced11ebb6330c63ad28d470913df5bd (diff)
improve ldflags/shflags for tools/cmake
-rw-r--r--xmake/modules/package/tools/cmake.lua102
1 files changed, 56 insertions, 46 deletions
diff --git a/xmake/modules/package/tools/cmake.lua b/xmake/modules/package/tools/cmake.lua
index 7706a9dfe..93929c764 100644
--- a/xmake/modules/package/tools/cmake.lua
+++ b/xmake/modules/package/tools/cmake.lua
@@ -95,6 +95,54 @@ function _get_asflags(package, opt)
end
end
+-- get ldflags
+function _get_ldflags(package, opt)
+ opt = opt or {}
+ local result = {}
+ if opt.cross then
+ table.join2(result, package:build_getenv("ldflags"))
+ end
+ if #result > 0 then
+ return table.concat(result, ' ')
+ end
+end
+
+-- get shflags
+function _get_shflags(package, opt)
+ opt = opt or {}
+ local result = {}
+ if opt.cross then
+ table.join2(result, package:build_getenv("shflags"))
+ end
+ if #result > 0 then
+ return table.concat(result, ' ')
+ end
+end
+
+-- get configs for generic
+function _get_configs_for_generic(package, configs, opt)
+ local cflags = _get_cflags(package, opt)
+ if cflags then
+ table.insert(configs, "-DCMAKE_C_FLAGS=" .. cflags)
+ end
+ local cxxflags = _get_cxxflags(package, opt)
+ if cxxflags then
+ table.insert(configs, "-DCMAKE_CXX_FLAGS=" .. cxxflags)
+ end
+ local asflags = _get_asflags(package, opt)
+ if asflags then
+ table.insert(configs, "-DCMAKE_ASM_FLAGS=" .. asflags)
+ end
+ local ldflags = _get_ldflags(package, opt)
+ if ldflags then
+ table.insert(configs, "-DCMAKE_EXE_LINKER_FLAGS=" .. ldflags)
+ end
+ local shflags = _get_shflags(package, opt)
+ if shflags then
+ table.insert(configs, "-DCMAKE_SHARED_LINKER_FLAGS=" .. shflags)
+ end
+end
+
-- get configs for windows
function _get_configs_for_windows(package, configs, opt)
local cmake_generator = opt.cmake_generator
@@ -113,18 +161,7 @@ function _get_configs_for_windows(package, configs, opt)
table.insert(configs, '-DCMAKE_C_FLAGS_DEBUG="/' .. vs_runtime .. 'd"')
table.insert(configs, '-DCMAKE_C_FLAGS_RELEASE="/' .. vs_runtime .. '"')
end
- local cflags = _get_cflags(package, opt)
- if cflags then
- table.insert(configs, "-DCMAKE_C_FLAGS=" .. cflags)
- end
- local cxxflags = _get_cxxflags(package, opt)
- if cxxflags then
- table.insert(configs, "-DCMAKE_CXX_FLAGS=" .. cxxflags)
- end
- local asflags = _get_asflags(package, opt)
- if asflags then
- table.insert(configs, "-DCMAKE_ASM_FLAGS=" .. asflags)
- end
+ _get_configs_for_generic(package, opt)
end
-- get configs for android
@@ -144,18 +181,7 @@ function _get_configs_for_android(package, configs, opt)
table.insert(configs, "-DANDROID_STL=" .. ndk_cxxstl)
end
end
- local cflags = _get_cflags(package, opt)
- if cflags then
- table.insert(configs, "-DCMAKE_C_FLAGS=" .. cflags)
- end
- local cxxflags = _get_cxxflags(package, opt)
- if cxxflags then
- table.insert(configs, "-DCMAKE_CXX_FLAGS=" .. cxxflags)
- end
- local asflags = _get_asflags(package, opt)
- if asflags then
- table.insert(configs, "-DCMAKE_ASM_FLAGS=" .. asflags)
- end
+ _get_configs_for_generic(package, opt)
end
-- get configs for appleos
@@ -167,8 +193,8 @@ function _get_configs_for_appleos(package, configs, opt)
envs.CMAKE_CXX_FLAGS = _get_cxxflags(package, opt)
envs.CMAKE_ASM_FLAGS = _get_asflags(package, opt)
envs.CMAKE_STATIC_LINKER_FLAGS = table.concat(table.wrap(package:build_getenv("arflags")), ' ')
- envs.CMAKE_EXE_LINKER_FLAGS = table.concat(table.wrap(package:build_getenv("ldflags")), ' ')
- envs.CMAKE_SHARED_LINKER_FLAGS = table.concat(table.wrap(package:build_getenv("shflags")), ' ')
+ envs.CMAKE_EXE_LINKER_FLAGS = _get_ldflags(package, opt)
+ envs.CMAKE_SHARED_LINKER_FLAGS = _get_shflags(package, opt)
if package:is_plat("watchos") then
envs.CMAKE_SYSTEM_NAME = "watchOS"
else
@@ -211,8 +237,8 @@ function _get_configs_for_mingw(package, configs, opt)
envs.CMAKE_CXX_FLAGS = _get_cxxflags(package, opt)
envs.CMAKE_ASM_FLAGS = _get_asflags(package, opt)
envs.CMAKE_STATIC_LINKER_FLAGS = table.concat(table.wrap(package:build_getenv("arflags")), ' ')
- envs.CMAKE_EXE_LINKER_FLAGS = table.concat(table.wrap(package:build_getenv("ldflags")), ' ')
- envs.CMAKE_SHARED_LINKER_FLAGS = table.concat(table.wrap(package:build_getenv("shflags")), ' ')
+ envs.CMAKE_EXE_LINKER_FLAGS = _get_ldflags(package, opt)
+ envs.CMAKE_SHARED_LINKER_FLAGS = _get_shflags(package, opt)
envs.CMAKE_SYSTEM_NAME = "Windows"
-- avoid find and add system include/library path
envs.CMAKE_FIND_ROOT_PATH = sdkdir
@@ -245,8 +271,8 @@ function _get_configs_for_cross(package, configs, opt)
envs.CMAKE_CXX_FLAGS = _get_cxxflags(package, opt)
envs.CMAKE_ASM_FLAGS = _get_asflags(package, opt)
envs.CMAKE_STATIC_LINKER_FLAGS = table.concat(table.wrap(package:build_getenv("arflags")), ' ')
- envs.CMAKE_EXE_LINKER_FLAGS = table.concat(table.wrap(package:build_getenv("ldflags")), ' ')
- envs.CMAKE_SHARED_LINKER_FLAGS = table.concat(table.wrap(package:build_getenv("shflags")), ' ')
+ envs.CMAKE_EXE_LINKER_FLAGS = _get_ldflags(package, opt)
+ envs.CMAKE_SHARED_LINKER_FLAGS = _get_shflags(package, opt)
envs.CMAKE_SYSTEM_NAME = "Linux"
-- avoid find and add system include/library path
envs.CMAKE_FIND_ROOT_PATH = sdkdir
@@ -263,22 +289,6 @@ function _get_configs_for_cross(package, configs, opt)
end
end
--- get configs for generic
-function _get_configs_for_generic(package, configs, opt)
- local cflags = _get_cflags(package, opt)
- if cflags then
- table.insert(configs, "-DCMAKE_C_FLAGS=" .. cflags)
- end
- local cxxflags = _get_cxxflags(package, opt)
- if cxxflags then
- table.insert(configs, "-DCMAKE_CXX_FLAGS=" .. cxxflags)
- end
- local asflags = _get_asflags(package, opt)
- if asflags then
- table.insert(configs, "-DCMAKE_ASM_FLAGS=" .. asflags)
- end
-end
-
-- get cmake generator for msvc
function _get_cmake_generator_for_msvc()
local vsvers =