summaryrefslogtreecommitdiff
path: root/colm/CMakeLists.txt
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@colm.net>2019-09-08 21:11:17 -0600
committerAdrian Thurston <thurston@colm.net>2019-09-08 21:11:17 -0600
commitc860c61607117582abd8f23881eed87957197484 (patch)
tree4d4e65dddc710e15f008189a9308d95924350c3f /colm/CMakeLists.txt
parentf37c916aed2600951b8966a86020406b0b0542cf (diff)
downloadcolm-c860c61607117582abd8f23881eed87957197484.tar.gz
moved the original colm src dir to /colm
Diffstat (limited to 'colm/CMakeLists.txt')
-rw-r--r--colm/CMakeLists.txt175
1 files changed, 175 insertions, 0 deletions
diff --git a/colm/CMakeLists.txt b/colm/CMakeLists.txt
new file mode 100644
index 00000000..b961f9af
--- /dev/null
+++ b/colm/CMakeLists.txt
@@ -0,0 +1,175 @@
+# Check type size
+include(CheckTypeSize)
+check_type_size("long" SIZEOF_LONG)
+check_type_size("unsigned long" SIZEOF_UNSIGNED_LONG)
+check_type_size("unsigned long long" SIZEOF_UNSIGNED_LONG_LONG)
+check_type_size("void *" SIZEOF_VOID_P)
+
+# Check system headers
+include(CheckIncludeFile)
+check_include_file(sys/mman.h HAVE_SYS_MMAN_H)
+check_include_file(sys/wait.h HAVE_SYS_WAIT_H)
+check_include_file(unistd.h HAVE_UNISTD_H)
+
+# Prepare settings
+string(TOLOWER ${PROJECT_NAME} _PACKAGE_NAME)
+if("${CMAKE_BUILD_TYPE}" MATCHES "[Dd][Ee][Bb]")
+ set(DEBUG 1)
+endif()
+set(VERSION "${PROJECT_VERSION}")
+set(PUBDATE "${PROJECT_PUBDATE}")
+
+set(common_COMPILE_DEFINITIONS PREFIX="${CMAKE_INSTALL_PREFIX}")
+
+# Generate headers
+configure_file(version.h.cmake.in version.h @ONLY)
+configure_file(config.h.cmake.in config.h @ONLY)
+configure_file(defs.h.cmake.in defs.h @ONLY)
+configure_file(colm-config.cmake.in
+ "${PROJECT_BINARY_DIR}/${_PACKAGE_NAME}-config.cmake" @ONLY)
+
+# Runtime headers
+set(RUNTIME_HDR
+ bytecode.h debug.h pool.h input.h
+ pdarun.h map.h type.h tree.h struct.h program.h colm.h internal.h)
+
+# Buildtime headers stub
+foreach(_hdr ${RUNTIME_HDR} rtvector.h)
+ file(GENERATE
+ OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/include/colm/${_hdr}"
+ CONTENT "#include \"${CMAKE_CURRENT_LIST_DIR}/${_hdr}\"\n")
+endforeach()
+foreach(_hdr config.h defs.h)
+ file(GENERATE
+ OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/include/colm/${_hdr}"
+ CONTENT "#include \"../../${_hdr}\"\n")
+ list(APPEND RUNTIME_HDR "${CMAKE_CURRENT_BINARY_DIR}/${_hdr}")
+endforeach()
+
+# Other CMake modules
+include(GNUInstallDirs)
+
+# libcolm
+
+add_library(libcolm
+ map.c pdarun.c list.c input.c stream.c debug.c
+ codevect.c pool.c string.c tree.c iter.c
+ bytecode.c program.c struct.c commit.c
+ print.c)
+
+target_include_directories(libcolm
+ PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
+
+set_target_properties(libcolm PROPERTIES
+ OUTPUT_NAME colm)
+
+# libprog
+
+add_library(libprog
+ buffer.h bytecode.h colm.h debug.h dotgen.h fsmcodegen.h fsmgraph.h
+ input.h keyops.h map.h compiler.h
+ parsetree.h pcheck.h pdacodegen.h pdagraph.h pdarun.h pool.h redbuild.h
+ redfsm.h rtvector.h tree.h global.h colm.h parser.h cstring.h
+ internal.h
+ resolve.cc lookup.cc synthesis.cc parsetree.cc
+ fsmstate.cc fsmbase.cc fsmattach.cc fsmmin.cc
+ fsmgraph.cc pdagraph.cc pdabuild.cc pdacodegen.cc fsmcodegen.cc
+ redfsm.cc fsmexec.cc redbuild.cc closure.cc fsmap.cc
+ dotgen.cc pcheck.cc ctinput.cc declare.cc codegen.cc
+ exports.cc compiler.cc parser.cc reduce.cc)
+
+target_include_directories(libprog
+ PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/../aapl>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>)
+
+set_target_properties(libprog PROPERTIES
+ OUTPUT_NAME prog)
+
+# bootstrap0
+
+add_executable(bootstrap0
+ consinit.cc consinit.h main.cc)
+
+target_link_libraries(bootstrap0 libprog libcolm)
+
+set_property(TARGET bootstrap0 APPEND PROPERTY
+ COMPILE_DEFINITIONS CONS_INIT ${common_COMPILE_DEFINITIONS})
+
+set_property(TARGET bootstrap0 APPEND PROPERTY
+ COMPILE_FLAGS -fpermissive)
+
+# bootstrap1
+
+make_directory("${CMAKE_CURRENT_BINARY_DIR}/gen")
+
+add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/gen/parse1.c"
+ "${CMAKE_CURRENT_BINARY_DIR}/gen/if1.h"
+ "${CMAKE_CURRENT_BINARY_DIR}/gen/if1.cc"
+ COMMAND bootstrap0
+ ARGS -c -o parse1.c -e if1.h -x if1.cc
+ WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/gen")
+
+add_executable(bootstrap1
+ loadinit.h loadinit.cc main.cc
+ "${CMAKE_CURRENT_BINARY_DIR}/gen/parse1.c"
+ "${CMAKE_CURRENT_BINARY_DIR}/gen/if1.cc")
+
+target_link_libraries(bootstrap1 libprog libcolm)
+
+set_property(TARGET bootstrap1 APPEND PROPERTY
+ COMPILE_DEFINITIONS LOAD_INIT ${common_COMPILE_DEFINITIONS})
+
+# colm
+
+add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/gen/parse2.c"
+ "${CMAKE_CURRENT_BINARY_DIR}/gen/if2.h"
+ "${CMAKE_CURRENT_BINARY_DIR}/gen/if2.cc"
+ COMMAND bootstrap1
+ ARGS -c -o parse2.c -e if2.h -x if2.cc "${CMAKE_CURRENT_LIST_DIR}/colm.lm"
+ WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/gen")
+
+add_executable(colm
+ loadcolm.h loadcolm.cc main.cc
+ "${CMAKE_CURRENT_BINARY_DIR}/gen/parse2.c"
+ "${CMAKE_CURRENT_BINARY_DIR}/gen/if2.cc")
+
+target_link_libraries(colm libprog libcolm)
+
+set_property(TARGET colm APPEND PROPERTY
+ COMPILE_DEFINITIONS LOAD_COLM ${common_COMPILE_DEFINITIONS})
+
+if(${PROJECT_NAME}_MAKE_INSTALL)
+ if(NOT DEFINED CMAKE_INSTALL_CMAKEDIR)
+ set(CMAKE_INSTALL_CMAKEDIR
+ "${CMAKE_INSTALL_LIBDIR}/cmake/${_PACKAGE_NAME}"
+ CACHE STRING "CMake packages")
+ endif()
+ install(FILES ${RUNTIME_HDR}
+ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/colm")
+ install(TARGETS libcolm colm
+ EXPORT ${_PACKAGE_NAME}-targets
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")
+ install(EXPORT ${_PACKAGE_NAME}-targets
+ NAMESPACE ${_PACKAGE_NAME}::
+ DESTINATION "${CMAKE_INSTALL_CMAKEDIR}")
+ export(EXPORT ${_PACKAGE_NAME}-targets
+ NAMESPACE ${_PACKAGE_NAME}::
+ FILE "${PROJECT_BINARY_DIR}/${_PACKAGE_NAME}-targets.cmake")
+ include(CMakePackageConfigHelpers)
+ write_basic_package_version_file(
+ "${PROJECT_BINARY_DIR}/${_PACKAGE_NAME}-config-version.cmake"
+ VERSION ${PROJECT_VERSION}
+ COMPATIBILITY AnyNewerVersion)
+ install(FILES
+ "${PROJECT_BINARY_DIR}/${_PACKAGE_NAME}-config.cmake"
+ "${PROJECT_BINARY_DIR}/${_PACKAGE_NAME}-config-version.cmake"
+ DESTINATION "${CMAKE_INSTALL_CMAKEDIR}")
+endif()