Files
2026-01-29 11:29:56 +08:00

99 lines
4.8 KiB
CMake

cmake_minimum_required(VERSION 4.1.1)
project(runtime)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Debug")
endif()
message(STATUS "CMakeLists.txt for ${PROJECT_NAME}")
message(STATUS "CMAKE_BUILD_TYPE is ${CMAKE_BUILD_TYPE}")
# message(STATUS ${CMAKE_CURRENT_SOURCE_DIR}) # current CMakeLists.txt path, the same with ${PROJECT_SOURCE_DIR}
# message(STATUS ${CMAKE_SOURCE_DIR}) # root project path
# message(STATUS ${CMAKE_CURRENT_BINARY_DIR})
set(TCC_RUNTIME_LIB_PATH ${CMAKE_SOURCE_DIR}/runtime/lib)
set(TCC_RT_WIN32_LIB_PATH ${CMAKE_SOURCE_DIR}/runtime/win32/lib)
set(TCC_RUNTIME_LIB_SRC
${TCC_RUNTIME_LIB_PATH}/libtcc1.c
${TCC_RUNTIME_LIB_PATH}/alloca86_64-bt.S
${TCC_RUNTIME_LIB_PATH}/alloca86_64.S
)
if(APPLE)
list(APPEND TCC_RUNTIME_LIB_SRC
${TCC_RUNTIME_LIB_PATH}/va_list.c
)
elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
list(APPEND TCC_RUNTIME_LIB_SRC
${TCC_RUNTIME_LIB_PATH}/va_list.c
${TCC_RUNTIME_LIB_PATH}/bcheck.c
)
elseif(WIN32)
list(APPEND TCC_RUNTIME_LIB_SRC
${TCC_RUNTIME_LIB_PATH}/bcheck.c
${TCC_RT_WIN32_LIB_PATH}/crt1.c
${TCC_RT_WIN32_LIB_PATH}/crt1w.c
${TCC_RT_WIN32_LIB_PATH}/wincrt1.c
${TCC_RT_WIN32_LIB_PATH}/wincrt1w.c
${TCC_RT_WIN32_LIB_PATH}/dllcrt1.c
${TCC_RT_WIN32_LIB_PATH}/dllmain.c
${TCC_RT_WIN32_LIB_PATH}/chkstk.S
)
endif()
source_group(src FILES ${TCC_RUNTIME_LIB_SRC})
if(APPLE)
add_custom_target(libtcc1
COMMAND tcc -c ${TCC_RUNTIME_LIB_PATH}/libtcc1.c -o libtcc1.o -D_ANSI_SOURCE -B${CMAKE_SOURCE_DIR}/runtime
COMMAND tcc -c ${TCC_RUNTIME_LIB_PATH}/va_list.c -o va_list.o -D_ANSI_SOURCE -B${CMAKE_SOURCE_DIR}/runtime
COMMAND tcc -c ${TCC_RUNTIME_LIB_PATH}/alloca86_64-bt.S -o alloca86_64-bt.o -D_ANSI_SOURCE -B${CMAKE_SOURCE_DIR}/runtime
COMMAND tcc -c ${TCC_RUNTIME_LIB_PATH}/alloca86_64.S -o alloca86_64.o -D_ANSI_SOURCE -B${CMAKE_SOURCE_DIR}/runtime
COMMAND tcc -ar rcs libtcc1.a libtcc1.o alloca86_64.o alloca86_64-bt.o va_list.o
DEPENDS tcc
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES ${TCC_RUNTIME_LIB_SRC}
)
elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
add_custom_target(libtcc1
COMMAND tcc -c ${TCC_RUNTIME_LIB_PATH}/libtcc1.c -o libtcc1.o -D_ANSI_SOURCE -B${CMAKE_SOURCE_DIR}/runtime
COMMAND tcc -c ${TCC_RUNTIME_LIB_PATH}/va_list.c -o va_list.o -D_ANSI_SOURCE -B${CMAKE_SOURCE_DIR}/runtime
COMMAND tcc -c ${TCC_RUNTIME_LIB_PATH}/bcheck.c -o bcheck.o -D_ANSI_SOURCE -B${CMAKE_SOURCE_DIR}/runtime
COMMAND tcc -c ${TCC_RUNTIME_LIB_PATH}/alloca86_64-bt.S -o alloca86_64-bt.o -D_ANSI_SOURCE -B${CMAKE_SOURCE_DIR}/runtime
COMMAND tcc -c ${TCC_RUNTIME_LIB_PATH}/alloca86_64.S -o alloca86_64.o -D_ANSI_SOURCE -B${CMAKE_SOURCE_DIR}/runtime
COMMAND tcc -ar rcs libtcc1.a libtcc1.o alloca86_64.o alloca86_64-bt.o va_list.o bcheck.o
DEPENDS tcc
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES ${TCC_RUNTIME_LIB_SRC}
)
elseif(WIN32)
add_custom_target(libtcc1
COMMAND tcc -c ${TCC_RUNTIME_LIB_PATH}/libtcc1.c -o libtcc1.o -I${CMAKE_SOURCE_DIR}/runtime/include -B${CMAKE_SOURCE_DIR}/runtime/win32
COMMAND tcc -c ${TCC_RUNTIME_LIB_PATH}/bcheck.c -o bcheck.o -I${CMAKE_SOURCE_DIR}/runtime/include -B${CMAKE_SOURCE_DIR}/runtime/win32
COMMAND tcc -c ${TCC_RUNTIME_LIB_PATH}/alloca86_64-bt.S -o alloca86_64-bt.o -I${CMAKE_SOURCE_DIR}/runtime/include -B${CMAKE_SOURCE_DIR}/runtime/win32
COMMAND tcc -c ${TCC_RUNTIME_LIB_PATH}/alloca86_64.S -o alloca86_64.o -I${CMAKE_SOURCE_DIR}/runtime/include -B${CMAKE_SOURCE_DIR}/runtime/win32
COMMAND tcc -c ${TCC_RT_WIN32_LIB_PATH}/chkstk.S -o chkstk.o -I${CMAKE_SOURCE_DIR}/runtime/include -B${CMAKE_SOURCE_DIR}/runtime/win32
COMMAND tcc -c ${TCC_RT_WIN32_LIB_PATH}/crt1.c -o crt1.o -I${CMAKE_SOURCE_DIR}/runtime/include -B${CMAKE_SOURCE_DIR}/runtime/win32
COMMAND tcc -c ${TCC_RT_WIN32_LIB_PATH}/crt1w.c -o crt1w.o -I${CMAKE_SOURCE_DIR}/runtime/include -B${CMAKE_SOURCE_DIR}/runtime/win32
COMMAND tcc -c ${TCC_RT_WIN32_LIB_PATH}/wincrt1.c -o wincrt1.o -I${CMAKE_SOURCE_DIR}/runtime/include -B${CMAKE_SOURCE_DIR}/runtime/win32
COMMAND tcc -c ${TCC_RT_WIN32_LIB_PATH}/wincrt1w.c -o wincrt1w.o -I${CMAKE_SOURCE_DIR}/runtime/include -B${CMAKE_SOURCE_DIR}/runtime/win32
COMMAND tcc -c ${TCC_RT_WIN32_LIB_PATH}/dllcrt1.c -o dllcrt1.o -I${CMAKE_SOURCE_DIR}/runtime/include -B${CMAKE_SOURCE_DIR}/runtime/win32
COMMAND tcc -c ${TCC_RT_WIN32_LIB_PATH}/dllmain.c -o dllmain.o -I${CMAKE_SOURCE_DIR}/runtime/include -B${CMAKE_SOURCE_DIR}/runtime/win32
COMMAND tcc -ar rcs libtcc1.a libtcc1.o alloca86_64.o alloca86_64-bt.o bcheck.o chkstk.o crt1.o crt1w.o wincrt1.o wincrt1w.o dllcrt1.o dllmain.o
COMMAND tcc -impdef libtcc -o libtcc.def
DEPENDS tcc libtcc
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES ${TCC_RUNTIME_LIB_SRC}
)
endif()
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/libtcc1.a
DESTINATION lib/tcc
)
file(GLOB TCC_RUNTIME_HEADERS "./include/*.h")
install(
FILES ${TCC_RUNTIME_HEADERS}
DESTINATION lib/tcc/include
)