source: git/modules/CreateOmallocHeader.cmake @ f5d2647

spielwiese
Last change on this file since f5d2647 was 8cc501, checked in by Kai Krüger <krueger@…>, 14 years ago
Added files to compile with cmake. Still experimental. Might not work git-svn-id: file:///usr/local/Singular/svn/trunk@13240 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 4.2 KB
Line 
1# -*- mode: cmake; -*-
2#
3#  omalloc
4#  create header
5#
6
7## which malloc to use
8## OPTION(WITH_MALLOC "system|dlmalloc|gmalloc|pmalloc|external default: malloc")
9
10include(CheckCSourceRuns)
11
12function(omalloc_header GEN_MALLOC_HEADER GEN_MALLOC_SOURCE
13                        GEN_HAVE_MALLOC_SOURCE
14                        GEN_OMALLOC_USES_MALLOC WITH_MALLOC)
15  set(_GEN_MALLOC_HEADER omMallocSystem.h)
16  set(_GEN_MALLOC_SOURCE "")
17  set(_GEN_OMALLOC_USES_MALLOC 0)
18message(STATUS "omalloc: '${WITH_MALLOC}'")
19
20  if(${WITH_MALLOC} STREQUAL "system")
21    set(_GEN_MALLOC_HEADER omMallocSystem.h)
22    set(_GEN_OMALLOC_USES_MALLOC 1)
23  elseif(${WITH_MALLOC} STREQUAL "gmalloc")
24    set(_GEN_MALLOC_HEADER gmalloc.h)
25    set(_GEN_MALLOC_SOURCE gmalloc.c)
26  elseif(${WITH_MALLOC} STREQUAL "pmalloc")
27    set(_GEN_MALLOC_HEADER pmalloc.h)
28    set(_GEN_MALLOC_SOURCE pmalloc.c)
29  elseif(${WITH_MALLOC} STREQUAL "external")
30  #  set(_GEN_MALLOC_HEADER $with_external_malloc_h)
31  #  set(_GEN_MALLOC_SOURCE $with_external_malloc_c)
32    set(_GEN_OMALLOC_USES_MALLOC 1)
33  elseif(${WITH_MALLOC} STREQUAL "dlmalloc")
34    set(_GEN_MALLOC_HEADER dlmalloc.h)
35    set(_GEN_MALLOC_SOURCE dlmalloc.c)
36    set(_GEN_OMALLOC_USES_MALLOC 1)
37  else(${WITH_MALLOC} STREQUAL "system")
38    set(_GEN_MALLOC_HEADER omMallocSystem.h)
39    set(_GEN_OMALLOC_USES_MALLOC 1)
40  endif(${WITH_MALLOC} STREQUAL "system")
41
42  if(NOT {_GEN_MALLOC_SOURCE} EQUAL "")
43    set(_GEN_HAVE_MALLOC_SOURCE 1)
44  else(NOT {_GEN_MALLOC_SOURCE} EQUAL "")
45    set(_GEN_HAVE_MALLOC_SOURCE 0)
46  endif(NOT {_GEN_MALLOC_SOURCE} EQUAL "")
47
48  set(${GEN_MALLOC_HEADER} ${_GEN_MALLOC_HEADER} PARENT_SCOPE)
49  set(${GEN_MALLOC_SOURCE} ${_GEN_MALLOC_SOURCE} PARENT_SCOPE)
50  set(${GEN_HAVE_MALLOC_SOURCE} ${_GEN_HAVE_MALLOC_SOURCE} PARENT_SCOPE)
51  set(${GEN_OMALLOC_USES_MALLOC} ${_GEN_OMALLOC_USES_MALLOC} PARENT_SCOPE)
52
53  # check
54  message(STATUS "whether malloc provides SizeOfAddr")
55  set(TESTFILE "${CMAKE_CURRENT_BINARY_DIR}/dummy.c")
56  set(_TEST_SOURCE "#include \"${_GEN_MALLOC_HEADER}\"
57#ifdef OM_HAVE_MALLOC_SOURCE
58#include \"${_GEN_MALLOC_SOURCE}\"
59#endif
60
61main()
62{
63  void* addr = OM_MALLOC_MALLOC(512);
64  if (OM_MALLOC_SIZEOF_ADDR(addr) < 512)
65    exit(1);
66  exit(0);
67}")
68
69##  file(WRITE ${TESTFILE} "#include \"${${GEN_MALLOC_HEADER}}\"
70#ifdef OM_HAVE_MALLOC_SOURCE
71#include \"${${GEN_MALLOC_SOURCE}}\"
72#endif
73##
74##main()
75##{
76##  void* addr = OM_MALLOC_MALLOC(512);
77##  if (OM_MALLOC_SIZEOF_ADDR(addr) < 512)
78##    exit(1);
79##  exit(0);
80##}")
81##try_run(RUN_RESULT_VAR COMPILE_RESULT_VAR
82##          "." ${TESTFILE}
83##        CMAKE_FLAGS -I${CMAKE_CURRENT_SOURCE_DIR} -D__STDC__=1
84##)
85#          [COMPILE_DEFINITIONS <flags>]
86#          [COMPILE_OUTPUT_VARIABLE comp]
87#          [RUN_OUTPUT_VARIABLE run]
88#          [OUTPUT_VARIABLE var]
89#          [ARGS <arg1> <arg2>...])
90
91CHECK_C_SOURCE_RUNS(${_TEST_SOURCE} RUN_RESULT_VAR)
92  message(STATUS "compile : '${COMPILE_RESULT_VAR}'")
93  message(STATUS "run     : '${RUN_RESULT_VAR}'")
94  message(STATUS "rc     : '${_TEST_SOURCE}'")
95
96  add_custom_target(omalloc_header DEPENDS ${GEN_MALLOC_HEADER})
97endfunction()
98
99MARK_AS_ADVANCED(
100  OM_MALLOC_HEADER
101  OM_MALLOC_SOURCE
102  OM_HAVE_MALLOC_SOURCE
103  OMALLOC_USES_MALLOC
104  OM_HAVE_VALLOC_MMAP
105  OM_HAVE_VALLOC_MALLOC
106)
107
108#
109#
110#
111function(omalloc_create_omtables_inc GEN_TARGET GEN_FILE GENCMD NAME)
112  message(STATUS "generate incfile ${NAME}.inc ...")
113  set(_GEN_TARGET "${NAME}-inc")
114  set(_GEN_FILE   ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.inc)
115
116  add_custom_command(
117    OUTPUT ${_GEN_FILE}
118    COMMAND ${GENCMD} > ${_GEN_FILE}
119    DEPENDS ${GENCMD}
120    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
121    COMMENT "Creating '${NAME}.inc'..."
122    )
123
124  set(${GEN_FILE}   ${_GEN_FILE}   PARENT_SCOPE)
125  set(${GEN_TARGET} ${_GEN_TARGET} PARENT_SCOPE)
126endfunction()
127
128#
129#
130#
131function(omalloc_create_omtables_h GEN_TARGET GEN_H_FILE GENCMD NAME)
132  message(STATUS "generate header ${NAME}.h ...")
133  set(_GEN_TARGET "gen-header-${NAME}")
134  set(_GEN_H_FILE ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.h)
135
136  add_custom_command(
137    OUTPUT ${_GEN_H_FILE}
138    COMMAND ${GENCMD} 1 > ${_GEN_H_FILE}
139    DEPENDS ${GENCMD}
140    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
141    COMMENT "Creating '${NAME}.h'..."
142    )
143
144  set(${GEN_H_FILE} ${_GEN_H_FILE} PARENT_SCOPE)
145  set(${GEN_TARGET} ${_GEN_TARGET} PARENT_SCOPE)
146endfunction()
Note: See TracBrowser for help on using the repository browser.