Fixed static builds, added GTK+ builds, and cleaned out things in general for cmake.
This commit is contained in:
parent
7bdeefedeb
commit
e4a66b786e
|
@ -30,8 +30,10 @@ set(CMAKE_OSX_DEPLOYMENT_TARGET "10.8")
|
||||||
|
|
||||||
project(libui)
|
project(libui)
|
||||||
|
|
||||||
set(EXECUTABLE_OUTPUT_PATH "${PROJECT_BINARY_DIR}/out")
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/out")
|
||||||
set(LIBRARY_OUTPUT_PATH "${PROJECT_BINARY_DIR}/out")
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/out")
|
||||||
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/out")
|
||||||
|
set(CMAKE_PDB_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/out")
|
||||||
|
|
||||||
# now that we called project(), load our config variables
|
# now that we called project(), load our config variables
|
||||||
macro(cfgcopy _prefix)
|
macro(cfgcopy _prefix)
|
||||||
|
@ -58,7 +60,8 @@ if(APPLE)
|
||||||
set(_VERSION "A")
|
set(_VERSION "A")
|
||||||
|
|
||||||
set(_PLATFORM_LIBS
|
set(_PLATFORM_LIBS
|
||||||
"-lobjc -framework Foundation -framework AppKit")
|
-lobjc "-framework Foundation" "-framework AppKit"
|
||||||
|
)
|
||||||
|
|
||||||
# always use our rpath
|
# always use our rpath
|
||||||
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
||||||
|
@ -71,26 +74,22 @@ elseif(WIN32)
|
||||||
|
|
||||||
# note that usp10 comes before gdi32
|
# note that usp10 comes before gdi32
|
||||||
# TODO prune this list
|
# TODO prune this list
|
||||||
set(_PLATFORM_LIBS_BASE
|
set(_PLATFORM_LIBS
|
||||||
user32 kernel32 usp10 gdi32 comctl32 uxtheme msimg32 comdlg32 d2d1 dwrite ole32 oleaut32 oleacc uuid)
|
user32 kernel32 usp10 gdi32 comctl32 uxtheme msimg32 comdlg32 d2d1 dwrite ole32 oleaut32 oleacc uuid
|
||||||
if(MSVC)
|
)
|
||||||
string(REPLACE ";" ".lib " _PLATFORM_LIBS "${_PLATFORM_LIBS_BASE}")
|
|
||||||
set(_PLATFORM_LIBS "${_PLATFORM_LIBS}.lib")
|
|
||||||
else()
|
|
||||||
string(REPLACE ";" " -l" _PLATFORM_LIBS "${_PLATFORM_LIBS_BASE}")
|
|
||||||
set(_PLATFORM_LIBS "-l${_PLATFORM_LIBS}")
|
|
||||||
endif()
|
|
||||||
else()
|
else()
|
||||||
set(_OSDIR unix)
|
set(_OSDIR unix)
|
||||||
set(_SETVERSION TRUE)
|
set(_SETVERSION TRUE)
|
||||||
set(_VERSION "0")
|
set(_VERSION "0")
|
||||||
|
|
||||||
|
find_package(PkgConfig REQUIRED)
|
||||||
pkg_check_modules(GTK REQUIRED gtk+-3.0)
|
pkg_check_modules(GTK REQUIRED gtk+-3.0)
|
||||||
set(_LIBUI_CFLAGS "${GTK_CFLAGS}")
|
string(REPLACE ";" " " _LIBUI_CFLAGS "${GTK_CFLAGS}")
|
||||||
set(_PLATFORM_LIBS "${GTK_LDFLAGS} -lm -ldl")
|
set(_PLATFORM_LIBS "${GTK_LDFLAGS} -lm -ldl")
|
||||||
|
|
||||||
# always use our rpath
|
# always use our rpath
|
||||||
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
||||||
|
set(CMAKE_INSTALL_RPATH "\$ORIGIN")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
|
@ -120,11 +119,6 @@ else()
|
||||||
# don't amend CMAKE_STATIC_LINKER_FLAGS; that's for ar
|
# don't amend CMAKE_STATIC_LINKER_FLAGS; that's for ar
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# and add the platform libraries to the three places that need it: shared library links and the two static executable links
|
|
||||||
append(CMAKE_SHARED_LINKER_FLAGS " ${_PLATFORM_LIBS}")
|
|
||||||
append2(CMAKE_EXE_LINKER_FLAGS_STATIC CMAKE_EXE_LINKER_FLAGS_RUNTIMESTATIC
|
|
||||||
" ${_PLATFORM_LIBS}")
|
|
||||||
|
|
||||||
add_subdirectory("common")
|
add_subdirectory("common")
|
||||||
add_subdirectory("${_OSDIR}")
|
add_subdirectory("${_OSDIR}")
|
||||||
if(_SHARED)
|
if(_SHARED)
|
||||||
|
@ -136,6 +130,7 @@ if(_SHARED)
|
||||||
set_target_properties(libui PROPERTIES
|
set_target_properties(libui PROPERTIES
|
||||||
SOVERSION "${_VERSION}")
|
SOVERSION "${_VERSION}")
|
||||||
endif()
|
endif()
|
||||||
|
target_link_libraries(libui PRIVATE ${_PLATFORM_LIBS})
|
||||||
else()
|
else()
|
||||||
_add_static(libui
|
_add_static(libui
|
||||||
$<TARGET_OBJECTS:libui-common>
|
$<TARGET_OBJECTS:libui-common>
|
||||||
|
@ -150,6 +145,9 @@ macro(_add_exec _name)
|
||||||
WIN32 EXCLUDE_FROM_ALL
|
WIN32 EXCLUDE_FROM_ALL
|
||||||
${ARGN})
|
${ARGN})
|
||||||
target_link_libraries(${_name} libui)
|
target_link_libraries(${_name} libui)
|
||||||
|
if(NOT _SHARED)
|
||||||
|
target_link_libraries(${_name} ${_PLATFORM_LIBS})
|
||||||
|
endif()
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
add_subdirectory("test")
|
add_subdirectory("test")
|
||||||
|
|
|
@ -42,21 +42,26 @@ set_target_properties(libui-darwin PROPERTIES
|
||||||
COMPILE_FLAGS "${_LIBUI_CFLAGS}"
|
COMPILE_FLAGS "${_LIBUI_CFLAGS}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# thanks to Mr-Hide in irc.freenode.net/#cmake
|
||||||
macro(_add_static _name)
|
macro(_add_static _name)
|
||||||
add_library(${_name} STATIC "${ARGN}")
|
add_library(${_name}-temporary STATIC "${ARGN}")
|
||||||
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/sharedhidden)
|
set_target_properties(${_name}-temporary PROPERTIES
|
||||||
|
ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
|
||||||
|
set(_aname $<TARGET_FILE:${_name}-temporary>)
|
||||||
|
set(_lname ${_name}-combined.list)
|
||||||
|
set(_oname ${_name}-combined.o)
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
TARGET ${_name} POST_BUILD
|
OUTPUT ${_oname}
|
||||||
COMMAND
|
COMMAND
|
||||||
${CMAKE_AR} x $<TARGET_FILE:${_name}>
|
nm -m ${_aname} | sed -E -n "'s/^[0-9a-f]* \\([A-Z_]+,[a-z_]+\\) external //p'" > ${_lname}
|
||||||
COMMAND
|
COMMAND
|
||||||
nm -m *.o | sed -E -n "'s/^[0-9a-f]* \\([A-Z_]+,[a-z_]+\\) external //p'" > ${_name}.lst
|
ld -exported_symbols_list ${_lname} -r -all_load ${_aname} -o ${_oname}
|
||||||
COMMAND
|
|
||||||
ld -exported_symbols_list ${_name}.lst -r *.o -o ../_combined_${_name}.o
|
|
||||||
COMMAND
|
|
||||||
rm $<TARGET_FILE:${_name}>
|
|
||||||
COMMAND
|
|
||||||
${CMAKE_AR} rcs $<TARGET_FILE:${_name}> ../_combined_${_name}.o
|
|
||||||
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/sharedhidden
|
|
||||||
COMMENT "Removing hidden symbols")
|
COMMENT "Removing hidden symbols")
|
||||||
|
add_library(${_name} STATIC ${_oname})
|
||||||
|
# otherwise cmake won't know which linker to use
|
||||||
|
set_target_properties(${_name} PROPERTIES
|
||||||
|
LINKER_LANGUAGE C)
|
||||||
|
set(_aname)
|
||||||
|
set(_lname)
|
||||||
|
set(_oname)
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
|
@ -5,12 +5,15 @@ include_directories(..)
|
||||||
_add_exec(controlgallery
|
_add_exec(controlgallery
|
||||||
controlgallery/main.c
|
controlgallery/main.c
|
||||||
)
|
)
|
||||||
|
|
||||||
_add_exec(histogram
|
_add_exec(histogram
|
||||||
histogram/main.c
|
histogram/main.c
|
||||||
)
|
)
|
||||||
|
|
||||||
_add_exec(cpp-multithread
|
_add_exec(cpp-multithread
|
||||||
cpp-multithread/main.cpp
|
cpp-multithread/main.cpp
|
||||||
)
|
)
|
||||||
|
target_link_libraries(cpp-multithread pthread)
|
||||||
|
|
||||||
add_custom_target(examples
|
add_custom_target(examples
|
||||||
DEPENDS
|
DEPENDS
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
# 1 june 2016
|
||||||
|
|
||||||
|
include_directories(.. . ../common)
|
||||||
|
|
||||||
|
add_library(libui-unix OBJECT
|
||||||
|
alloc.c
|
||||||
|
area.c
|
||||||
|
box.c
|
||||||
|
button.c
|
||||||
|
checkbox.c
|
||||||
|
child.c
|
||||||
|
colorbutton.c
|
||||||
|
combobox.c
|
||||||
|
control.c
|
||||||
|
datetimepicker.c
|
||||||
|
debug.c
|
||||||
|
draw.c
|
||||||
|
drawmatrix.c
|
||||||
|
drawpath.c
|
||||||
|
drawtext.c
|
||||||
|
editablecombo.c
|
||||||
|
entry.c
|
||||||
|
fontbutton.c
|
||||||
|
graphemes.c
|
||||||
|
group.c
|
||||||
|
label.c
|
||||||
|
main.c
|
||||||
|
menu.c
|
||||||
|
multilineentry.c
|
||||||
|
progressbar.c
|
||||||
|
radiobuttons.c
|
||||||
|
separator.c
|
||||||
|
slider.c
|
||||||
|
spinbox.c
|
||||||
|
stddialogs.c
|
||||||
|
tab.c
|
||||||
|
text.c
|
||||||
|
util.c
|
||||||
|
window.c
|
||||||
|
)
|
||||||
|
set_target_properties(libui-unix PROPERTIES
|
||||||
|
COMPILE_FLAGS "${_LIBUI_CFLAGS}"
|
||||||
|
)
|
||||||
|
|
||||||
|
# thanks to Mr-Hide in irc.freenode.net/#cmake
|
||||||
|
macro(_add_static _name)
|
||||||
|
add_library(${_name}-temporary STATIC "${ARGN}")
|
||||||
|
set_target_properties(${_name}-temporary PROPERTIES
|
||||||
|
ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
|
||||||
|
set(_aname $<TARGET_FILE:${_name}-temporary>)
|
||||||
|
set(_oname ${_name}-combined.o)
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${_oname}
|
||||||
|
COMMAND
|
||||||
|
ld -r --whole-archive ${_aname} -o ${_oname}
|
||||||
|
COMMAND
|
||||||
|
objcopy --localize-hidden ${_oname}
|
||||||
|
COMMENT "Removing hidden symbols")
|
||||||
|
add_library(${_name} STATIC ${_oname})
|
||||||
|
# otherwise cmake won't know which linker to use
|
||||||
|
set_target_properties(${_name} PROPERTIES
|
||||||
|
LINKER_LANGUAGE C)
|
||||||
|
set(_aname)
|
||||||
|
set(_oname)
|
||||||
|
endmacro()
|
Loading…
Reference in New Issue