Apply patch from Daniel Schürmann: https://sourceforge.net/p/boomerang/bugs/78/
[boomerang.git] / boomerang / CMakeLists.txt
blob8ea2747e48c1826d13c8280ee491339536081005
1 PROJECT(Boomerang)\r
2 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)\r
3 # this will set th\r
4 \r
5 \r
6 SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_scripts;${CMAKE_MODULE_PATH})\r
7 \r
8 SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/compiled)\r
9 SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/compiled)\r
10 SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/compiled)\r
12 OPTION(BUILD_TESTING "Build the testing tree." OFF)\r
13 IF(BUILD_TESTING)\r
14         ENABLE_TESTING()\r
15 ENDIF(BUILD_TESTING)\r
17 INCLUDE(CheckIncludeFile)\r
18 INCLUDE(CheckTypeSize)\r
19 INCLUDE(CheckLibraryExists)\r
20 INCLUDE (TestBigEndian)\r
22 INCLUDE(BOOMERANG_Macros)\r
24 # The BOOMERANG_FRONTENDS will be filled ba appropriate ADD_FRONTEND macros\r
25 SET(BOOMERANG_FRONTENDS "" CACHE INTERNAL "")\r
26 SET(BOOMERANG_LOADERS "" CACHE INTERNAL "")\r
27 SET(BOOMERANG_CODE_GENERATORS "" CACHE INTERNAL "")\r
28 IF(MSVC)\r
29         ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE)\r
30 ENDIF(MSVC)\r
31 # this is the list of libraries that will be extended\r
32 # by various configured libraries\r
33 SET(boomerang_depends_on "")\r
35 \r
36 CHECK_INCLUDE_FILE(byteswap.h HAVE_BYTESWAP_H)\r
37 CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H)\r
38 CHECK_INCLUDE_FILE(fcntl.h HAVE_FCNTL_H)\r
39 CHECK_INCLUDE_FILE(gc.h HAVE_GC_H)\r
40 CHECK_INCLUDE_FILE(inttypes.h HAVE_INTTYPES_H)\r
41 CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)\r
42 CHECK_INCLUDE_FILE(malloc.h HAVE_MALLOC_H)\r
43 CHECK_INCLUDE_FILE(memory.h HAVE_MEMORY_H)\r
44 CHECK_INCLUDE_FILE(stddef.h HAVE_STDDEF_H)\r
45 CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)\r
46 CHECK_INCLUDE_FILE(stdlib.h HAVE_STDLIB_H)\r
47 CHECK_INCLUDE_FILE(strings.h HAVE_STRINGS_H)\r
48 CHECK_INCLUDE_FILE(string.h HAVE_STRING_H)\r
49 CHECK_INCLUDE_FILE(sys/stat.h HAVE_SYS_STAT_H)\r
50 CHECK_INCLUDE_FILE(sys/time.h HAVE_SYS_TIME_H)\r
51 CHECK_INCLUDE_FILE(sys/types.h HAVE_SYS_TYPES_H)\r
52 CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)\r
53 CHECK_INCLUDE_FILE(/opt/local/include/gc/gc.h HAVE__OPT_LOCAL_INCLUDE_GC_GC_H)\r
54 CHECK_INCLUDE_FILE(/opt/local/include/gc.h HAVE__OPT_LOCAL_INCLUDE_GC_H)\r
55 CHECK_INCLUDE_FILE(/sw/include/gc.h HAVE__SW_INCLUDE_GC_H)\r
56 CHECK_INCLUDE_FILE(/usr/include/gc/gc.h HAVE__USR_INCLUDE_GC_GC_H)\r
57 CHECK_INCLUDE_FILE(/usr/include/gc.h HAVE__USR_INCLUDE_GC_H)\r
58 CHECK_INCLUDE_FILE(/usr/local/include/gc.h HAVE__USR_LOCAL_INCLUDE_GC_H)\r
61 CHECK_TYPE_SIZE(char SIZEOF_CHAR)\r
62 CHECK_TYPE_SIZE(double SIZEOF_DOUBLE)\r
63 CHECK_TYPE_SIZE(float SIZEOF_FLOAT)\r
64 CHECK_TYPE_SIZE(int SIZEOF_INT)\r
65 CHECK_TYPE_SIZE("int *" SIZEOF_INT_P)\r
66 CHECK_TYPE_SIZE(long SIZEOF_LONG)\r
67 CHECK_TYPE_SIZE("long double" SIZEOF_LONG_DOUBLE)\r
68 CHECK_TYPE_SIZE("long long" SIZEOF_LONG_LONG)\r
69 CHECK_TYPE_SIZE(short SIZEOF_SHORT)\r
71 SET(VERSION "alpha 0.3.1 09/Sep/2006")\r
72 # this creates config.h boomerang config.h in-place\r
73 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/include/config.h.cmake \r
74                                 ${CMAKE_CURRENT_SOURCE_DIR}/include/config.h)\r
75 # if this is a problem comment out the above, and uncomment below\r
76 #CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake \r
77 #                               ${CMAKE_CURRENT_BINARY_DIR}/include/config.h)\r
78 #INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/include)\r
80 ADD_DEFINITIONS( -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS )\r
82 INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)\r
83 IF(USE_GC)\r
84         FIND_PACKAGE(BoehmGC REQUIRED)\r
85         SET(boomerang_libs ${boomerang_libs} ${BOEHMGC_LIBRARIES})\r
86         INCLUDE_DIRECTORIES(${BOEHMGC_INCLUDE_DIRS})\r
87         ADD_DEFINITIONS(${BOEHMGC_DEFINITIONS})\r
88 ELSE(USE_GC)\r
89         ADD_DEFINITIONS(-DNO_GARBAGE_COLLECTOR)\r
90 ENDIF(USE_GC)\r
92 IF(USE_FLEXPP_BISONPP)\r
93         FIND_PACKAGE(Bisonpp REQUIRED)\r
94         FIND_PACKAGE(Flexpp REQUIRED)\r
95 ENDIF(USE_FLEXPP_BISONPP)\r
97 #==========================#\r
98 # check if m4 is available #\r
99 #==========================#\r
101 MESSAGE("Searching for m4 scripting language")\r
102 FIND_PROGRAM(M4_PROGRAM m4)\r
103 IF(${M4_PROGRAM} MATCHES "NOTFOUND")\r
104   MESSAGE("   -> WARNING : could not find m4, cannot generate ssl files from m4 sources")\r
105 ELSE(${M4_PROGRAM} MATCHES "NOTFOUND")\r
106   MESSAGE("   -> ${M4_PROGRAM}")\r
107 ENDIF(${M4_PROGRAM} MATCHES "NOTFOUND")\r
109 ADD_SUBDIRECTORY(loader)\r
110 ADD_SUBDIRECTORY(c)\r
111 ADD_SUBDIRECTORY(codegen)\r
112 ADD_SUBDIRECTORY(db)\r
113 ADD_SUBDIRECTORY(type)\r
114 ADD_SUBDIRECTORY(transform)\r
115 ADD_SUBDIRECTORY(util)\r
116 ADD_SUBDIRECTORY(frontend)\r
119 SET(CMAKE_INCLUDE_PATH ${PROJECT_SOURCE_DIR}/include)\r
121 ADD_LIBRARY(driver STATIC driver.cpp)\r
123 SET(boomerang_SRCS\r
124    boomerang.cpp\r
125    log.cpp\r
126    loader/BinaryFileFactory.cpp\r
129 ADD_EXECUTABLE(boomerang ${boomerang_SRCS})\r
130 TARGET_LINK_LIBRARIES(boomerang \r
131         driver \r
132         ${BOOMERANG_LOADERS} \r
133         ${BOOMERANG_FRONTENDS} \r
134         boomerang_db\r
135         boomerang_type_solvers\r
136         boomerang_transform\r
137         boomerang_util\r
138         boomerang_DSLs\r
139         ${BOOMERANG_CODE_GENERATORS}\r
140         ${boomerang_libs}\r
141         ${CMAKE_DL_LIBS}\r
144 install(TARGETS boomerang DESTINATION bin)\r
145 install(FILES  include/*.h DESTINATION include)\r
147 # this is put at the end so that first cmake configure will assume USE_GC NO, \r
148 # and will not check for existence of Boehm GC\r
149 OPTION(USE_GC "Use Boehm garbage collector, only developers should turn this off" true)\r
151 #Markus: Re-add usage of bison++ and flex++.\r
152 OPTION(USE_FLEXPP_BISONPP "Use Coetmeur's bison++ and flex++, only developers should turn this on" false)\r
154 IF(BUILD_TESTING)\r
155         FIND_PACKAGE(CppUnit REQUIRED)\r
156         INCLUDE_DIRECTORIES(${CPPUNIT_INCLUDE_DIR})\r
158         ENABLE_TESTING()\r
159         \r
160         FILE(GLOB_RECURSE UnitTests_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*Test.cpp" )\r
161         FILE(GLOB_RECURSE UnitTests_INCLUDES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*Test.h" )\r
163         #hackishness\r
164         INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/frontend)\r
165         ADD_EXECUTABLE(UnitTester \r
166                 testAll.cpp \r
167                 boomerang.cpp\r
168                 log.cpp\r
169                 loader/microX86dis.c\r
170                 loader/BinaryFileFactory.cpp \r
171                 loader/BinaryFileStub.cpp \r
172                 ${UnitTests_SRCS} \r
173                 ${UnitTests_INCLUDES}\r
174         )\r
176         FOREACH(test ${UnitTests_SRCS})\r
177                         GET_FILENAME_COMPONENT(TestName ${test} NAME_WE)\r
178                         ADD_TEST(${TestName} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/UnitTester "${PROJECT_SOURCE_DIR}" ${TestName})\r
179         ENDFOREACH(test)\r
180         TARGET_LINK_LIBRARIES(UnitTester ${CPPUNIT_LIBRARIES}\r
181                 ${BOOMERANG_LOADERS} \r
182                 ${BOOMERANG_FRONTENDS} \r
183                 boomerang_db\r
184                 boomerang_type_solvers\r
185                 boomerang_transform\r
186                 boomerang_util\r
187                 boomerang_DSLs\r
188                 ${BOOMERANG_CODE_GENERATORS}\r
189                 ${boomerang_libs}\r
190                 ${CMAKE_DL_LIBS}        \r
191         )\r
193 ENDIF(BUILD_TESTING)\r