2016-05-30 11:00:08 -05:00
|
|
|
# 30 may 2016
|
|
|
|
cmake_minimum_required(VERSION 2.8.12)
|
2016-05-30 20:32:38 -05:00
|
|
|
set(CMAKE_OSX_DEPLOYMENT_TARGET, "10.8")
|
2016-05-30 11:00:08 -05:00
|
|
|
project(libui)
|
|
|
|
|
2016-05-30 13:32:05 -05:00
|
|
|
set(_NOSHARED FALSE)
|
|
|
|
if(WIN32)
|
|
|
|
if(NOT MSVC)
|
|
|
|
set(_NOSHARED TRUE)
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
macro(nosharedmingw _target)
|
|
|
|
add_custom_target(${_target}
|
|
|
|
COMMAND exit 1
|
|
|
|
COMMENT "Sorry, libui for Windows cannot be built as a DLL with MinGW. You will need to either build as a static library or build with MSVC.")
|
|
|
|
endmacro(nosharedmingw)
|
|
|
|
|
2016-05-30 11:00:08 -05:00
|
|
|
if(APPLE)
|
|
|
|
set(_OSDIR darwin)
|
|
|
|
set(_OSSRCEXT m)
|
2016-05-30 12:28:27 -05:00
|
|
|
set(_SETVERSION TRUE)
|
|
|
|
set(_VERSION "A")
|
2016-05-30 14:40:44 -05:00
|
|
|
|
2016-05-30 20:32:38 -05:00
|
|
|
set(_PLATFORM_LIBS
|
|
|
|
"-lobjc -framework Foundation -framework AppKit")
|
2016-05-30 11:00:08 -05:00
|
|
|
|
|
|
|
# always use our rpath
|
|
|
|
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
|
|
|
# the / is required by some older versions of OS X
|
|
|
|
set(CMAKE_INSTALL_RPATH "@executable_path/")
|
|
|
|
set(CMAKE_MACOSX_RPATH TRUE)
|
2016-05-30 13:32:05 -05:00
|
|
|
elseif(WIN32)
|
2016-05-30 11:00:08 -05:00
|
|
|
set(_OSDIR windows)
|
|
|
|
set(_OSSRCEXT cpp)
|
2016-05-30 12:28:27 -05:00
|
|
|
set(_SETVERSION FALSE)
|
2016-05-30 20:32:38 -05:00
|
|
|
|
|
|
|
# note that usp10 comes before gdi32
|
|
|
|
# TODO prune this list
|
|
|
|
set(_PLATFORM_LIBS_BASE
|
|
|
|
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()
|
2016-05-30 13:32:05 -05:00
|
|
|
else()
|
2016-05-30 12:28:27 -05:00
|
|
|
set(_OSDIR unix)
|
|
|
|
set(_OSSRCEXT c)
|
|
|
|
set(_SETVERSION TRUE)
|
|
|
|
set(_VERSION "0")
|
|
|
|
|
2016-05-30 20:32:38 -05:00
|
|
|
pkg_check_modules(GTK REQUIRED gtk+-3.0)
|
|
|
|
set(_PLATFORM_CFLAGS "${GTK_CFLAGS}")
|
|
|
|
set(_PLATFORM_LIBS "${GTK_LDFLAGS} -lm -ldl")
|
|
|
|
|
2016-05-30 12:28:27 -05:00
|
|
|
# always use our rpath
|
|
|
|
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
2016-05-30 13:32:05 -05:00
|
|
|
endif()
|
2016-05-30 11:00:08 -05:00
|
|
|
|
2016-05-30 14:40:44 -05:00
|
|
|
if(MSVC)
|
|
|
|
# TODO
|
|
|
|
else()
|
2016-05-30 20:32:38 -05:00
|
|
|
set(_COMMON_FLAGS_BASE
|
|
|
|
"-Wall -Wextra -pedantic -Wno-unused-parameter -Wno-switch")
|
2016-05-30 14:40:44 -05:00
|
|
|
# don't use C_VERSION or CXX_VERSION because they use GNU standards
|
2016-05-30 20:32:38 -05:00
|
|
|
set(_COMMON_CFLAGS "${_COMMON_FLAGS_BASE} --std=c99")
|
|
|
|
set(_COMMON_CXX_FLAGS "${_COMMON_FLAGS_BASE} --std=c++11")
|
|
|
|
|
2016-05-30 14:40:44 -05:00
|
|
|
if(NOT WIN32)
|
|
|
|
set(_PICFLAG "-fPIC")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
set(_LIBUI_CFLAGS
|
2016-05-30 20:32:38 -05:00
|
|
|
"-D_UI_EXTERN='__attribute__((visibility(\"default\"))) extern' -fvisibility=hidden ${_PLATFORM_CFLAGS}")
|
2016-05-30 14:40:44 -05:00
|
|
|
set(_LIBUI_LDFLAGS
|
2016-05-30 20:32:38 -05:00
|
|
|
"-fvisibility=hidden")
|
2016-05-30 14:40:44 -05:00
|
|
|
endif()
|
2016-05-30 20:32:38 -05:00
|
|
|
|
|
|
|
set(_COMMON_C_FLAGS
|
|
|
|
"${CMAKE_C_FLAGS} ${_COMMON_C_FLAGS}")
|
|
|
|
set(_COMMON_CXX_FLAGS
|
|
|
|
"${CMAKE_CXX_FLAGS} ${_COMMON_C_FLAGS}")
|
|
|
|
|
|
|
|
set(_LIBUI_SHARED_CFLAGS
|
|
|
|
"${_COMMON_CFLAGS} ${_LIBUI_CFLAGS} ${_PICFLAG}")
|
|
|
|
set(_LIBUI_STATIC_CFLAGS
|
|
|
|
"${_COMMON_CFLAGS} ${_LIBUI_CFLAGS}")
|
|
|
|
set(_LIBUI_SHARED_CXXFLAGS
|
|
|
|
"${_COMMON_CXXFLAGS} ${_LIBUI_CFLAGS} ${_PICFLAG}")
|
|
|
|
set(_LIBUI_STATIC_CXXFLAGS
|
|
|
|
"${_COMMON_CXXFLAGS} ${_LIBUI_CFLAGS}")
|
|
|
|
set(_LIBUI_SHARED_LDFLAGS
|
|
|
|
"${CMAKE_SHARED_LINKER_FLAGS} ${_COMMON_LDFLAGS} ${_LIBUI_LDFLAGS} ${_PLATFORM_LDFLAGS} ${_PICFLAG}")
|
|
|
|
set(_LIBUI_STATIC_LDFLAGS
|
|
|
|
"${_COMMON_LDFLAGS} ${_LIBUI_LDFLAGS}")
|
|
|
|
|
|
|
|
set(_EXE_SHARED_CFLAGS
|
|
|
|
"${_COMMON_CFLAGS} ${_PICFLAG}")
|
|
|
|
set(_EXE_STATIC_CFLAGS
|
|
|
|
"${_COMMON_CFLAGS}")
|
|
|
|
set(_EXE_SHARED_CXXFLAGS
|
|
|
|
"${_COMMON_CXXFLAGS} ${_PICFLAG}")
|
|
|
|
set(_EXE_STATIC_CXXFLAGS
|
|
|
|
"${_COMMON_CXXFLAGS}")
|
|
|
|
set(_EXE_SHARED_LDFLAGS
|
|
|
|
"${CMAKE_SHARED_LINKER_FLAGS} ${_COMMON_LDFLAGS} ${_PICFLAG}")
|
|
|
|
set(_EXE_STATIC_LDFLAGS
|
|
|
|
"${_COMMON_LDFLAGS} ${_PLATFORM_LDFLAGS}")
|
|
|
|
|
|
|
|
set(_LIBUI_HEADERS . common ${_OSDIR})
|
|
|
|
file(GLOB _LIBUI_SOURCES
|
2016-05-30 11:00:08 -05:00
|
|
|
common/*.c
|
|
|
|
${_OSDIR}/*.${_OSSRCEXT})
|
|
|
|
|
2016-05-30 20:32:38 -05:00
|
|
|
macro(_begin_shared _cflags _cxxflags _ldflags)
|
|
|
|
set(CMAKE_C_FLAGS "${_cflags}")
|
|
|
|
set(CMAKE_CXX_FLAGS "${_cxxflags}")
|
|
|
|
set(CMAKE_SHARED_LINKER_FLAGS "${_ldflags}")
|
|
|
|
endmacro()
|
|
|
|
|
2016-05-30 14:40:44 -05:00
|
|
|
macro(libui _name _mode)
|
2016-05-30 12:28:27 -05:00
|
|
|
add_library(${_name} ${_mode} ${SOURCES})
|
|
|
|
set_target_properties(${_name} PROPERTIES
|
|
|
|
OUTPUT_NAME ui)
|
2016-05-30 14:40:44 -05:00
|
|
|
if("${_mode}" STREQUAL "SHARED")
|
|
|
|
# only put version number on shared build
|
2016-05-30 12:28:27 -05:00
|
|
|
set_target_properties(${_name} PROPERTIES
|
|
|
|
SOVERSION ${_VERSION})
|
2016-05-30 14:40:44 -05:00
|
|
|
else()
|
|
|
|
# don't build libui-static by default
|
2016-05-30 12:28:27 -05:00
|
|
|
set_target_properties(${_name} PROPERTIES
|
|
|
|
EXCLUDE_FROM_ALL 1)
|
2016-05-30 13:32:05 -05:00
|
|
|
endif()
|
|
|
|
set_target_properties(${_name} PROPERTIES
|
2016-05-30 14:40:44 -05:00
|
|
|
COMPILE_FLAGS "${_LIBUI_CFLAGS}")
|
|
|
|
set_target_properties(${_name} PROPERTIES
|
|
|
|
LINK_FLAGS "${_PICFLAG} ${_LIBUI_LDFLAGS}")
|
2016-05-30 13:32:05 -05:00
|
|
|
endmacro()
|
2016-05-30 12:28:27 -05:00
|
|
|
|
|
|
|
libui(libui SHARED ${_SETVERSION} FALSE)
|
2016-05-30 13:32:05 -05:00
|
|
|
if(${_NOSHARED})
|
|
|
|
nosharedmingw(libui-static)
|
|
|
|
else()
|
|
|
|
libui(libui-static STATIC FALSE TRUE)
|
|
|
|
endif()
|
2016-05-30 12:28:27 -05:00
|
|
|
|
|
|
|
include_directories(test)
|
|
|
|
file(GLOB TESTSOURCES test/*.c)
|
|
|
|
|
2016-05-30 13:32:05 -05:00
|
|
|
macro(executable_base _name _outname _libui _static)
|
|
|
|
add_executable(${_name} ${XSRC})
|
2016-05-30 12:28:27 -05:00
|
|
|
set_target_properties(${_name} PROPERTIES
|
2016-05-30 13:32:05 -05:00
|
|
|
OUTPUT_NAME ${_outname}
|
2016-05-30 12:28:27 -05:00
|
|
|
EXCLUDE_FROM_ALL 1)
|
|
|
|
target_link_libraries(${_name} ${_libui})
|
2016-05-30 13:32:05 -05:00
|
|
|
# be sure to include libui libraries in the output
|
|
|
|
if(${_static})
|
|
|
|
set_target_properties(${_name} PROPERTIES
|
|
|
|
LINK_FLAGS "${_LIBUI_LDFLAGS}")
|
2016-05-30 14:40:44 -05:00
|
|
|
else()
|
|
|
|
set_target_properties(${_name} PROPERTIES
|
|
|
|
LINK_FLAGS "${_PICFLAG}")
|
2016-05-30 13:32:05 -05:00
|
|
|
endif()
|
|
|
|
endmacro()
|
|
|
|
|
|
|
|
macro(executable _name _outname _dir)
|
|
|
|
include_directories(${_dir})
|
|
|
|
file(GLOB XSRC ${_dir}/*.c ${_dir}/*.cpp)
|
|
|
|
executable_base(${_name} ${_outname} libui FALSE)
|
|
|
|
if(${_NOSHARED})
|
|
|
|
nosharedmingw(${_name}-static)
|
|
|
|
else()
|
|
|
|
executable_base(${_name}-static ${_outname} libui-static TRUE)
|
|
|
|
endif()
|
|
|
|
set(XSRC)
|
|
|
|
endmacro()
|
|
|
|
|
|
|
|
executable(tester test test)
|
|
|
|
executable(controlgallery controlgallery examples/controlgallery)
|
|
|
|
executable(histogram histogram examples/histogram)
|
|
|
|
executable(cpp-multithread cpp-multithread examples/cpp-multithread)
|
2016-05-30 11:00:08 -05:00
|
|
|
|
2016-05-30 13:32:05 -05:00
|
|
|
add_custom_target(examples
|
|
|
|
DEPENDS
|
|
|
|
controlgallery
|
|
|
|
histogram
|
|
|
|
cpp-multithread)
|
|
|
|
add_custom_target(examples-static
|
|
|
|
DEPENDS
|
|
|
|
controlgallery-static
|
|
|
|
histogram-static
|
|
|
|
cpp-multithread-static)
|