|
| 1 | +# Copyright (C) 2007-2009 LuaDist. |
| 2 | +# Submited by David Manura |
| 3 | +# Redistribution and use of this file is allowed according to the terms of the MIT license. |
| 4 | +# For details see the COPYRIGHT file distributed with LuaDist. |
| 5 | +# Please note that the package source code is licensed under its own license. |
| 6 | + |
| 7 | +#~WARNING: The was derived from the Makefile and some parts |
| 8 | +# remain unimplemented: |
| 9 | +# gcc-2, x86-64, CFLAGS_P, bcheck.o, arm, TCC_UCLIBC, |
| 10 | +# CONFIG_CROSS |
| 11 | +# NOTE: tcc itself is broken on Cygwin. |
| 12 | + |
| 13 | + |
| 14 | +PROJECT(tcc C) |
| 15 | +CMAKE_MINIMUM_REQUIRED(VERSION 2.8) |
| 16 | +INCLUDE(dist.cmake) |
| 17 | + |
| 18 | +#~TODO: autodetect? |
| 19 | +SET(ARCH i386) |
| 20 | + |
| 21 | +# Build config.h |
| 22 | +CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in |
| 23 | + ${CMAKE_CURRENT_BINARY_DIR}/config.h) |
| 24 | + |
| 25 | +SET(CORE_FILES tcc.c libtcc.c tccpp.c tccgen.c tccelf.c tccasm.c |
| 26 | + tcc.h config.h libtcc.h tcctok.h) |
| 27 | +SET(I386_FILES ${CORE_FILES} i386-gen.c i386-asm.c i386-asm.h) |
| 28 | +SET(WIN32_FILES ${CORE_FILES} i386-gen.c i386-asm.c i386-asm.h tccpe.c) |
| 29 | +SET(X86_64_FILES ${CORE_FILES} x86_64-gen.c) |
| 30 | +SET(ARM_FILES ${CORE_FILES} arm-gen.c) |
| 31 | +SET(C67_FILES ${CORE_FILES} c67-gen.c tcccoff.c) |
| 32 | + |
| 33 | +# Set C compiler flags. |
| 34 | +INCLUDE(CheckCCompilerFlag) |
| 35 | +CHECK_C_COMPILER_FLAG(-fno-strict-aliasing, HAVE_NOSTRICTALIASING) |
| 36 | +IF(HAVE_NOSTRICTALIASING) |
| 37 | + ADD_DEFINITIONS(-fno-strict-aliasing) |
| 38 | +ENDIF(HAVE_NOSTRICTALIASING) |
| 39 | + |
| 40 | + |
| 41 | +# Set target and sources |
| 42 | +IF(WIN32 AND NOT CYGWIN) |
| 43 | + SET(NATIVE_TARGET -DTCC_TARGET_PE) |
| 44 | + SET(NATIVE_FILES ${WIN32_FILES}) |
| 45 | +ELSE() |
| 46 | + IF(${ARCH} STREQUAL i386) |
| 47 | + SET(NATIVE_TARGET -DTCC_TARGET_I386) |
| 48 | + SET(NATIVE_FILES ${I386_FILES}) |
| 49 | + ELSEIF(${ARCH} STREQUALS arm) |
| 50 | + SET(NATIVE_TARGET -DTCC_TARGET_ARM) |
| 51 | + #NOT-IMPL: |
| 52 | + # NATIVE_TARGET+=$(if $(wildcard /lib/ld-linux.so.3),-DTCC_ARM_EABI) |
| 53 | + # NATIVE_TARGET+=$(if $(shell grep -l "^Features.* \(vfp\|iwmmxt\) " |
| 54 | + # /proc/cpuinfo),-DTCC_ARM_VFP) |
| 55 | + MESSAGE(FATAL_ERROR "TODO - not implemented") |
| 56 | + ELSEIF(${ARCH} STREQUALS x86-64) |
| 57 | + SET(NATIVE_TARGET -DTCC_X86_64) |
| 58 | + ENDIF(${ARCH} STREQUAL i386) |
| 59 | + # (CMAKE_SIZEOF_VOID_P MATCHES "8") |
| 60 | +ENDIF(WIN32 AND NOT CYGWIN) |
| 61 | + |
| 62 | +# Set C flags. |
| 63 | +ADD_DEFINITIONS(${NATIVE_TARGET}) |
| 64 | + |
| 65 | + |
| 66 | +# Set libraries. |
| 67 | +IF(NOT WIN32) |
| 68 | + LINK_LIBRARIES(-ldl) |
| 69 | +ENDIF(NOT WIN32) |
| 70 | + |
| 71 | + |
| 72 | + |
| 73 | +# Set libtcc1 sources and tcc arguments |
| 74 | +SET(LIBTCC1_SRC lib/libtcc1.c) |
| 75 | +SET(TCC ${CMAKE_CURRENT_BINARY_DIR}/tcc) |
| 76 | +SET(TCC_ARGS) |
| 77 | +IF(WIN32 AND NOT CYGWIN) |
| 78 | + SET(LIBTCC1_SRC ${LIBTCC1_SRC} |
| 79 | + win32/lib/crt1.c win32/lib/wincrt1.c |
| 80 | + win32/lib/dllcrt1.c win32/lib/dllmain.c win32/lib/chkstk.S) |
| 81 | + SET(LIBTCC1_OBJS ${LIBTCC1_OBJS} |
| 82 | + crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o) |
| 83 | + SET(TCC_ARGS -Bwin32 -DTCC_TARGET_PE) |
| 84 | +ENDIF(WIN32 AND NOT CYGWIN) |
| 85 | +IF(ARCH STREQUAL i386) |
| 86 | + SET(LIBTCC1_SRC ${LIBTCC1_SRC} lib/alloca86.S lib/alloca86-bt.S) |
| 87 | + SET(LIBTCC1_OBJS ${LIBTCC1_OBJS} alloca86.o alloca86-bt.o) |
| 88 | +ENDIF(ARCH STREQUAL i386) |
| 89 | + |
| 90 | + |
| 91 | +# make 'include "config.h"' and 'include "../config.h"' work |
| 92 | +FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/child-dir) |
| 93 | +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} |
| 94 | + ${CMAKE_CURRENT_BINARY_DIR}/child-dir) |
| 95 | + |
| 96 | +# TCC executable. |
| 97 | +ADD_EXECUTABLE(tcc tcc.c) |
| 98 | + |
| 99 | +# libtcc |
| 100 | +ADD_LIBRARY(libtcc STATIC libtcc.c) |
| 101 | + |
| 102 | +# Extra utility executables. |
| 103 | +IF(WIN32 AND NOT CYGWIN) |
| 104 | + ADD_EXECUTABLE(tiny_impdef win32/tools/tiny_impdef.c) |
| 105 | +ENDIF(WIN32 AND NOT CYGWIN) |
| 106 | +ADD_EXECUTABLE(tiny_libmaker win32/tools/tiny_libmaker.c) |
| 107 | + |
| 108 | + |
| 109 | + |
| 110 | +SET(TCC_INCLUDE -I${CMAKE_CURRENT_BINARY_DIR}/child-dir) # make include "../config.h" work |
| 111 | +IF(WIN32 AND NOT CYGWIN) |
| 112 | + SET(TCC_INCLUDE ${TCC_INCLUDE} -I${CMAKE_CURRENT_SOURCE_DIR}/win32/include |
| 113 | + -I${CMAKE_CURRENT_SOURCE_DIR}/win32/include/winapi) |
| 114 | +ENDIF(WIN32 AND NOT CYGWIN) |
| 115 | + |
| 116 | + |
| 117 | +# libtcc1 sources built with tcc. |
| 118 | +FOREACH(src ${LIBTCC1_SRC}) |
| 119 | + GET_FILENAME_COMPONENT(srcname ${src} NAME_WE) |
| 120 | + GET_FILENAME_COMPONENT(srcext ${src} EXT) |
| 121 | + IF(${srcext} STREQUAL .c) |
| 122 | + SET(TCC_EXTRA_FLAGS -O2 -Wall) |
| 123 | + ELSE() # .S |
| 124 | + SET(TCC_EXTRA_FLAGS) |
| 125 | + ENDIF(${srcext} STREQUAL .c) |
| 126 | + ADD_CUSTOM_COMMAND(OUTPUT ${srcname}.o DEPENDS tcc ${src} COMMAND |
| 127 | + ${TCC} ${TCC_EXTRA_FLAGS} ${TCC_INCLUDE} |
| 128 | + -c ${CMAKE_CURRENT_SOURCE_DIR}/${src}) |
| 129 | +ENDFOREACH(src) |
| 130 | + |
| 131 | + |
| 132 | +# Link libtcc1 |
| 133 | +ADD_CUSTOM_COMMAND(OUTPUT libtcc1.a DEPENDS tiny_libmaker ${LIBTCC1_OBJS} |
| 134 | + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/tiny_libmaker rcs libtcc1.a |
| 135 | + ${LIBTCC1_OBJS} |
| 136 | +) |
| 137 | +ADD_CUSTOM_TARGET(libtcc1 ALL DEPENDS libtcc1.a) |
| 138 | + |
| 139 | + |
| 140 | +# Install files. |
| 141 | +INSTALL(TARGETS tcc RUNTIME DESTINATION ${INSTALL_BIN}) |
| 142 | +INSTALL(TARGETS libtcc ARCHIVE DESTINATION ${INSTALL_LIB}) |
| 143 | +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libtcc1.a DESTINATION ${INSTALL_LIB}/tcc) |
| 144 | +INSTALL(FILES libtcc.h DESTINATION ${INSTALL_INC}) |
| 145 | +INSTALL(FILES tcc-doc.html DESTINATION ${INSTALL_DOC}) |
| 146 | +INSTALL(FILES include/stdarg.h include/stddef.h include/stdbool.h include/float.h include/varargs.h include/tcclib.h DESTINATION ${INSTALL_LIB}/tcc/include) |
| 147 | +INSTALL(FILES README COPYING DESTINATION ${INSTALL_DATA}) |
| 148 | +IF(WIN32 AND NOT CYGWIN) |
| 149 | + INSTALL(TARGETS tcc RUNTIME DESTINATION ${INSTALL_BIN}) |
| 150 | + INSTALL(FILES |
| 151 | + win32/include/assert.h |
| 152 | + win32/include/conio.h |
| 153 | + win32/include/ctype.h |
| 154 | + win32/include/dir.h |
| 155 | + win32/include/direct.h |
| 156 | + win32/include/dirent.h |
| 157 | + win32/include/dos.h |
| 158 | + win32/include/errno.h |
| 159 | + win32/include/excpt.h |
| 160 | + win32/include/fcntl.h |
| 161 | + win32/include/fenv.h |
| 162 | + win32/include/float.h |
| 163 | + win32/include/inttypes.h |
| 164 | + win32/include/io.h |
| 165 | + win32/include/limits.h |
| 166 | + win32/include/locale.h |
| 167 | + win32/include/malloc.h |
| 168 | + win32/include/math.h |
| 169 | + win32/include/mem.h |
| 170 | + win32/include/memory.h |
| 171 | + win32/include/process.h |
| 172 | + win32/include/setjmp.h |
| 173 | + win32/include/share.h |
| 174 | + win32/include/signal.h |
| 175 | + win32/include/stdarg.h |
| 176 | + win32/include/stdbool.h |
| 177 | + win32/include/stddef.h |
| 178 | + win32/include/stdint.h |
| 179 | + win32/include/stdio.h |
| 180 | + win32/include/stdlib.h |
| 181 | + win32/include/string.h |
| 182 | + win32/include/tchar.h |
| 183 | + win32/include/time.h |
| 184 | + win32/include/unistd.h |
| 185 | + win32/include/values.h |
| 186 | + win32/include/varargs.h |
| 187 | + win32/include/wchar.h |
| 188 | + win32/include/wctype.h |
| 189 | + win32/include/_mingw.h |
| 190 | + DESTINATION ${INSTALL_LIB}/tcc/include) |
| 191 | + INSTALL(FILES |
| 192 | + win32/include/sys/fcntl.h |
| 193 | + win32/include/sys/file.h |
| 194 | + win32/include/sys/locking.h |
| 195 | + win32/include/sys/stat.h |
| 196 | + win32/include/sys/time.h |
| 197 | + win32/include/sys/timeb.h |
| 198 | + win32/include/sys/types.h |
| 199 | + win32/include/sys/unistd.h |
| 200 | + win32/include/sys/utime.h |
| 201 | + DESTINATION ${INSTALL_LIB}/tcc/include/sys) |
| 202 | + INSTALL(FILES |
| 203 | + win32/include/winapi/basetsd.h |
| 204 | + win32/include/winapi/basetyps.h |
| 205 | + win32/include/winapi/winbase.h |
| 206 | + win32/include/winapi/wincon.h |
| 207 | + win32/include/winapi/windef.h |
| 208 | + win32/include/winapi/windows.h |
| 209 | + win32/include/winapi/winerror.h |
| 210 | + win32/include/winapi/wingdi.h |
| 211 | + win32/include/winapi/winnetwk.h |
| 212 | + win32/include/winapi/winnls.h |
| 213 | + win32/include/winapi/winnt.h |
| 214 | + win32/include/winapi/winreg.h |
| 215 | + win32/include/winapi/winsvc.h |
| 216 | + win32/include/winapi/winuser.h |
| 217 | + win32/include/winapi/winver.h |
| 218 | + DESTINATION ${INSTALL_LIB}/tcc/include/winapi) |
| 219 | + INSTALL(FILES |
| 220 | + win32/lib/gdi32.def |
| 221 | + win32/lib/msvcrt.def |
| 222 | + win32/lib/kernel32.def |
| 223 | + win32/lib/user32.def |
| 224 | + DESTINATION ${INSTALL_LIB}) |
| 225 | +ENDIF(WIN32 AND NOT CYGWIN) |
0 commit comments