From ee96cbb5daa745d0cae642ed36a913a14f12dee3 Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Fri, 22 Feb 2019 12:41:19 +1100 Subject: [PATCH] build: add initial meson experiments --- meson.build | 640 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 640 insertions(+) create mode 100644 meson.build diff --git a/meson.build b/meson.build new file mode 100644 index 00000000..6dcc6bfa --- /dev/null +++ b/meson.build @@ -0,0 +1,640 @@ +project('cruft', 'cpp') + +pymod = import('python') +python = pymod.find_installation('python3') + +ragel = generator(find_program('ragel'), output: '@BASENAME@.cpp', arguments: [ '@INPUT@', '-o@OUTPUT@', '-G2' ]) + +if host_machine.endian() == 'big' + add_project_arguments('-DWORDS_BIGENDIAN') +endif + +add_global_arguments('-std=c++2a', language: 'cpp') +add_global_link_arguments('-lstdc++fs', language: 'cpp') + +add_global_arguments('-Drestrict=__restrict', language: 'cpp') + +sources = [ + ragel.process('uri.cpp.rl'), + ragel.process('version.cpp.rl'), + ragel.process('format.cpp.rl'), + ragel.process('time/parse8601.cpp.rl'), +] + +dependencies = [] + + +### Setup a directory to hold built sources we may need to export to clients. +##set (PREFIX "cruft/util") +##file (MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/prefix/${PREFIX}") +##target_include_directories( +## cruft +## PUBLIC +## "${CMAKE_CURRENT_BINARY_DIR}/prefix/" +##) +## +## +### Preemptively define an identity panic macro so that TCL doens't fuck us over +### by renaming a commonly used symbol. +##target_compile_definitions(cruft PUBLIC "-Dpanic=panic") +## +## +################################################################################# +cpp = meson.get_compiler('cpp') +execinfo = cpp.find_library('execinfo', required: false) # sym:backtrace +dbghelp = cpp.find_library('dbghelp', required: false) # sym:SymFromAddr +capture_stack_backtrace = cpp.has_function('RtlCaptureStackBackTrace') + +if execinfo.found() + sources += 'backtrace_execinfo.cpp' +elif dbghelp.found() + sources += 'backtrace_stackwalk.cpp' + dependencies += dbghelp +else + sources += 'backtrace_null.cpp' +endif + + +####----------------------------------------------------------------------------- +#### We shouldn't be building into the source directory, but I can't stand trying +#### to coax CMake into behaving here any longer. Feel free to fix it. +##add_custom_command ( +##OUTPUT +## "${CMAKE_CURRENT_BINARY_DIR}/prefix/${PREFIX}/preprocessor.hpp" +##COMMENT +## "[preprocessor.py] preprocessor.hpp" +##COMMAND +## "${PYTHON_EXECUTABLE}" +## "${CMAKE_CURRENT_SOURCE_DIR}/preprocessor.py" +## "${CMAKE_CURRENT_BINARY_DIR}/prefix/${PREFIX}/preprocessor.hpp" +## 320 +##DEPENDS +## "${CMAKE_CURRENT_SOURCE_DIR}/preprocessor.py" +##) + +preprocessor_hpp = custom_target( + 'preprocessor.hpp', + output: 'preprocessor.hpp', + input: 'preprocessor.py', + command: [python, '@INPUT@', '@OUTPUT@', '320'], +) + +################################################################################# +### Platform wrappers +systems = { + 'linux': 'linux', + 'freebsd': 'freebsd', + 'windows': 'win32' +} + +# TODO: handle missing system +sources += 'exe_@0@.cpp'.format(systems[host_machine.system()]) + + +sources += [ + 'posix/dir.cpp', + 'posix/dir.hpp', + 'posix/except.cpp', + 'posix/except.hpp', + 'posix/fd.cpp', + 'posix/fd.hpp', +] + + +if host_machine.system() == 'linux' + sources += [ + 'thread/event_futex.cpp', + 'thread/flag_futex.cpp', + ] +endif + + +if host_machine.system() != 'windows' + sources += [ + 'buffer/circular.cpp', + 'buffer/circular.hpp', + 'buffer/paged.cpp', + 'buffer/paged.hpp', + 'memory/system.cpp', + 'memory/system.hpp', + 'debug_posix.cpp', + 'io_posix.cpp', + 'io_posix.hpp', + 'library_posix.hpp', + 'library_posix.cpp', + 'posix/fwd.hpp', + 'posix/map.cpp', + 'posix/map.hpp', + 'posix/socket.cpp', + 'posix/socket.hpp', + 'time_posix.cpp', + ] +endif + + +####----------------------------------------------------------------------------- +##if (WIN32) +## list ( +## APPEND UTIL_FILES +## debug_win32.cpp +## exe_win32.cpp +## io_win32.cpp +## io_win32.hpp +## thread/event_win32.cpp +## library_win32.cpp +## library_win32.hpp +## time_win32.cpp +## win32/windows.hpp +## win32/except.cpp +## win32/except.hpp +## win32/file.cpp +## win32/file.hpp +## win32/handle.cpp +## win32/handle.hpp +## win32/registry.cpp +## win32/registry.hpp +## ) +## +## target_link_libraries (cruft ws2_32) +##endif () + + +sources += [ + 'thread/event.hpp', + 'thread/semaphore.hpp', + 'thread/flag.hpp', +] + + +if host_machine.system() == 'linux' + sources += [ + 'thread/event_futex.cpp', + 'thread/event_futex.hpp', + 'thread/semaphore_linux.hpp', + 'thread/semaphore_linux.cpp', + 'thread/flag_futex.cpp', + 'thread/flag_futex.hpp', + ] +else + error('Unknown platform for threading') +endif + +##elseif (WIN32) +## list (APPEND UTIL_FILES +## thread/event_std.cpp +## thread/event_std.hpp +## thread/semaphore_win32.hpp +## thread/semaphore_win32.cpp +## thread/flag_std.cpp +## thread/flag_std.hpp +## ) +##else () +## list (APPEND UTIL_FILES +## thread/flag_std.cpp +## thread/flag_std.hpp +## ) +##endif () +## +## +################################################################################# +### Common files +sources += [ + 'adapter.hpp', + 'adapter.cpp', + 'algo/search.hpp', + 'algo/sort.cpp', + 'algo/sort.hpp', + 'alloc/fwd.hpp', + 'alloc/affix.cpp', + 'alloc/affix.hpp', + 'alloc/aligned/direct.hpp', + 'alloc/aligned/foreign.hpp', + 'alloc/allocator.cpp', + 'alloc/allocator.hpp', + 'alloc/easy.hpp', + 'alloc/fallback.cpp', + 'alloc/fallback.hpp', + 'alloc/linear.cpp', + 'alloc/linear.hpp', + 'alloc/malloc.cpp', + 'alloc/malloc.hpp', + 'alloc/null.cpp', + 'alloc/null.hpp', + 'alloc/stack.cpp', + 'alloc/stack.hpp', + 'alloc/std.hpp', + 'alloc/traits.hpp', + 'alloc/traits.hpp', + 'annotation.hpp', + 'array/darray.hpp', + 'array/sarray.cpp', + 'array/sarray.hpp', + 'array/parray.cpp', + 'array/parray.hpp', + 'ascii.hpp', + 'backtrace.hpp', + 'bezier.cpp', + 'bezier1.cpp', + 'bezier2.cpp', + 'bezier3.cpp', + 'bezier.hpp', + 'bitwise.cpp', + 'bitwise.hpp', + 'buffer/simple.cpp', + 'buffer/simple.hpp', + 'buffer/traits.hpp', + 'cast.hpp', + 'cmdopt.cpp', + 'cmdopt.hpp', + 'colour.cpp', + 'colour.hpp', + 'coord/fwd.hpp', + 'coord/base.hpp', + 'coord.hpp', + 'coord/init.hpp', + 'coord/iostream.hpp', + 'coord/ops.hpp', + 'coord/store.hpp', + 'coord/traits.hpp', + 'cpp.cpp', + 'cpp.hpp', + 'cpuid.cpp', + 'cpuid.hpp', + 'cpuid_x86.cpp', + 'cpuid_x86.hpp', + 'debug.cpp', + 'debug.hpp', + 'encode/number.hpp', + 'encode/base.cpp', + 'encode/base.hpp', + 'endian.cpp', + 'endian.hpp', + 'except.cpp', + 'except.hpp', + 'exe.hpp', + 'extent.cpp', + 'extent.hpp', + 'fixed.cpp', + 'fixed.hpp', + 'float.cpp', + 'float.hpp', + 'format.hpp', + 'fourcc.cpp', + 'fourcc.hpp', + 'functor.hpp', + 'geom/fwd.hpp', + 'geom/aabb.cpp', + 'geom/aabb.hpp', + 'geom/cylinder.cpp', + 'geom/cylinder.hpp', + 'geom/ellipse.cpp', + 'geom/ellipse.hpp', + 'geom/frustum.cpp', + 'geom/frustum.hpp', + 'geom/iostream.cpp', + 'geom/iostream.hpp', + 'geom/line.hpp', + 'geom/line.cpp', + 'geom/ops.cpp', + 'geom/ops.hpp', + 'geom/plane.cpp', + 'geom/plane.hpp', + 'geom/ray.cpp', + 'geom/ray.hpp', + 'geom/rect.cpp', + 'geom/rect.hpp', + 'geom/sample/fwd.hpp', + 'geom/sample/surface.hpp', + 'geom/sample/volume.hpp', + 'geom/segment.cpp', + 'geom/segment.hpp', + 'geom/sphere.cpp', + 'geom/sphere.hpp', + 'geom/tri.cpp', + 'geom/tri.hpp', + 'hash.hpp', + 'hash/fwd.hpp', + 'hash/adler.cpp', + 'hash/adler.hpp', + 'hash/bsdsum.cpp', + 'hash/bsdsum.hpp', + 'hash/crc.cpp', + 'hash/crc.hpp', + 'hash/fasthash.cpp', + 'hash/fasthash.hpp', + 'hash/fletcher.cpp', + 'hash/fletcher.hpp', + 'hash/fnv1a.cpp', + 'hash/fnv1a.hpp', + 'hash/murmur/common.cpp', + 'hash/murmur/common.hpp', + 'hash/murmur.hpp', + 'hash/murmur/murmur1.cpp', + 'hash/murmur/murmur1.hpp', + 'hash/murmur/murmur2.cpp', + 'hash/murmur/murmur2.hpp', + 'hash/murmur/murmur3.cpp', + 'hash/murmur/murmur3.hpp', + 'hash/siphash.cpp', + 'hash/siphash.hpp', + 'hash/wang.hpp', + 'hash/xxhash.cpp', + 'hash/xxhash.hpp', + 'introspection.cpp', + 'introspection.hpp', + 'io.cpp', + 'io.hpp', + 'iterator.hpp', + 'job/fwd.hpp', + 'job/dispatch.hpp', + 'job/queue.cpp', + 'job/queue.hpp', + 'kmeans.hpp', + 'library.hpp', + 'log.cpp', + 'log.hpp', + 'maths.cpp', + 'maths.hpp', + 'maths/fast.hpp', + 'matrix.cpp', + 'matrix2.cpp', + 'matrix3.cpp', + 'matrix4.cpp', + 'matrix.hpp', + 'memory/deleter.cpp', + 'memory/deleter.hpp', + 'nocopy.hpp', + 'parallel/queue.cpp', + 'parallel/queue.hpp', + 'parse.cpp', + 'parse.hpp', + 'platform.hpp', + 'point.cpp', + 'point.hpp', + 'pointer.hpp', + 'polynomial.cpp', + 'polynomial.hpp', + 'pool.cpp', + 'pool.hpp', + #'"${CMAKE_CURRENT_BINARY_DIR}/prefix/${PREFIX}/preprocessor.hpp"', + preprocessor_hpp, + 'quaternion.cpp', + 'quaternion.hpp', + 'rand/lcg.cpp', + 'rand/lcg.hpp', + 'rand/xorshift.cpp', + 'rand/xorshift.hpp', + 'rand/mwc64x.cpp', + 'rand/mwc64x.hpp', + 'random.cpp', + 'random.hpp', + 'range.cpp', + 'range.hpp', + 'rational.cpp', + 'rational.hpp', + 'region.cpp', + 'region.hpp', + 'roots/bisection.hpp', + 'scoped.hpp', + 'si.cpp', + 'signal.cpp', + 'signal.hpp', + 'si.hpp', + 'singleton.hpp', + 'stats.cpp', + 'stats.hpp', + 'std.hpp', + 'stream.cpp', + 'stream.hpp', + 'string.cpp', + 'string.hpp', + 'stringid.cpp', + 'stringid.hpp', + 'strongdef.cpp', + 'strongdef.hpp', + 'tap.cpp', + 'tap.hpp', + 'term.cpp', + 'term.hpp', + 'thread/event.hpp', + 'thread/flag.hpp', + 'thread/monitor.cpp', + 'thread/monitor.hpp', + 'thread/ticketlock.cpp', + 'thread/ticketlock.hpp', + 'thread/spinlock.cpp', + 'thread/spinlock.hpp', + 'time.cpp', + 'time.hpp', + 'time/parse.hpp', + 'tuple/index.hpp', + 'tuple/type.hpp', + 'tuple/value.hpp', + 'typeidx.cpp', + 'typeidx.hpp', + 'types.hpp', + 'types/bits.hpp', + 'types/comparator.hpp', + 'types/description.cpp', + 'types/description.hpp', + 'types/string.cpp', + 'types/string.hpp', + 'types/tagged.hpp', + 'types/traits.hpp', + 'uri.hpp', + 'utf8.cpp', + 'utf8.hpp', + 'variadic.cpp', + 'variadic.hpp', + 'vector.cpp', + 'vector.hpp', + 'version.hpp', + 'view.cpp', + 'view.hpp', +] + + +libcruft = library('cruft', sources) + + +## +##option (SIMD "enable simd support" OFF) +## +##if (SIM) +## list (APPEND UTIL_FILES +## "coord/simd.cpp" +## "coord/simd.hpp" +## "coord/simd_sse.hpp" +## "coord/simd_neon.hpp" +## ) +##endif () +## + + +## +## +################################################################################# +##target_sources(cruft PRIVATE ${UTIL_FILES}) +##add_library(cruft-util ALIAS cruft) +##target_include_directories(cruft PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}") +## +## +##search_libs (SHM_LIBS shm_open rt) +##search_libs (DL_LIBS dlopen dl) +##search_libs (CLOCK_LIBS clock_gettime rt c) +##search_libs (MATH_LIBS cos m) +## +##target_link_libraries(cruft ${SHM_LIBS}) +##target_link_libraries(cruft ${DL_LIBS}) +##target_link_libraries(cruft ${CLOCK_LIBS}) +##target_link_libraries(cruft ${MATH_LIBS}) +## +### HACK: -ldl isn't getting discovered correctly so we add it unconditionally +### for the time being. +##if (NOT WIN32) +## target_link_libraries(cruft dl) +##endif () +## +## +################################################################################# +##foreach (tool cpuid poisson macro scratch) +## add_executable (util_${tool} tools/${tool}.cpp) +## set_target_properties (util_${tool} PROPERTIES OUTPUT_NAME ${tool}) +## target_link_libraries (util_${tool} cruft) +## target_include_directories(util_${tool} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) +##endforeach () +## +## +################################################################################# +##option (TESTS "enable unit testing" ON) +## +##if (TESTS) +## include(CTest) +## enable_testing() +## +## list ( +## APPEND TEST_BIN +## ascii +## algo/search +## algo/sort +## alloc/aligned/foreign +## alloc/aligned/direct +## alloc/easy +## alloc/linear +## alloc/stack +## affine +## array/darray +## array/sarray +## array/parray +## backtrace +## bezier +## bitwise +## buffer/simple +## cmdopt +## colour +## comparator +## coord +## encode/number +## encode/base +## endian +## exe +## extent +## fixed +## float +## format +## geom/aabb +## geom/ellipse +## geom/frustum +## geom/line +## geom/plane +## geom/ray +## geom/segment +## geom/sphere +## hash/checksum +## hash/crc +## hash/fasthash +## hash/fnv1a +## hash/murmur +## hash/siphash +## hash/xxhash +## hton +## io +## introspection +## iterator +## job/queue +## kmeans +## maths +## maths/fast +## matrix +## memory/deleter +## parallel/queue +## parse +## point +## polynomial +## pool +## preprocessor +## quaternion +## rand/buckets +## random +## range +## rational +## region +## roots/bisection +## signal +## singleton +## stream +## string +## stringid +## strongdef +## thread/event +## thread/flag +## thread/monitor +## thread/semaphore +## thread/spinlock +## thread/ticketlock +## time/8601 +## traits +## tuple/index +## tuple/value +## tuple/type +## typeidx +## types/tagged +## uri +## utf8 +## vector +## version +## view +## ) +## +## if (NOT WIN32) +## list (APPEND TEST_BIN +## buffer/circular +## buffer/paged +## ) +## endif () +## +## if (SIMD) +## list (APPEND TEST_BIN +## coord/simd +## ) +## endif() +## +## foreach(t ${TEST_BIN}) +## string(REPLACE "/" "_" name "test/${t}") +## add_executable(util_${name} test/${t}.cpp) +## target_link_libraries(util_${name} PRIVATE cruft) +## target_include_directories(util_${name} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) +## add_test(NAME util_${name} COMMAND util_${name}) +## set_tests_properties(util_${name} PROPERTIES FAIL_REGULAR_EXPRESSION "not ok -") +## endforeach(t) +## +## configure_file (test/cpp.py.in util_test_cpp.py @ONLY) +## add_test (NAME util_test_cpp COMMAND ${PYTHON_EXECUTABLE} util_test_cpp.py) +## set_property (TEST util_test_cpp APPEND PROPERTY DEPENDS util_macro) +## set_tests_properties(util_test_cpp PROPERTIES FAIL_REGULAR_EXPRESSION "not ok -") +##endif () +## +## +################################################################################# +##configure_file(libcruft.pc.in libcruft.pc) +##configure_file(Doxyfile.in Doxyfile)