Skip to content

Commit 953d386

Browse files
committed
Forced rebuild of runtime.ll
1 parent 1dcb6eb commit 953d386

3 files changed

Lines changed: 97 additions & 4 deletions

File tree

CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ if(LLVM_VERSION_MAJOR LESS 21)
1010
message(FATAL_ERROR "LLVM 21+ required, found ${LLVM_VERSION_MAJOR}")
1111
endif()
1212
option(ENABLE_LLVM "Enable LLVM-based compiler" ON)
13-
set(RUNTIME_TARGET_FLAGS "")
13+
set(COMPILER_FOR_RUNTIME "clang++")
1414
if(EMSCRIPTEN)
15-
set(RUNTIME_TARGET_FLAGS "-target" "wasm32-unknown-unknown")
15+
set(COMPILER_FOR_RUNTIME "em++")
1616
endif()
1717
add_custom_command(
1818
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/runtime.ll
19-
COMMAND clang++ ${RUNTIME_TARGET_FLAGS} -S -emit-llvm -O3 ${CMAKE_CURRENT_SOURCE_DIR}/runtime.cpp -o ${CMAKE_CURRENT_SOURCE_DIR}/runtime.ll
19+
COMMAND ${COMPILER_FOR_RUNTIME} ${RUNTIME_TARGET_FLAGS} -S -emit-llvm -O3 ${CMAKE_CURRENT_SOURCE_DIR}/runtime.cpp -o ${CMAKE_CURRENT_SOURCE_DIR}/runtime.ll
2020
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/runtime.cpp
2121
VERBATIM
2222
)

\

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
cmake_minimum_required(VERSION 3.13)
2+
project(qc LANGUAGES CXX C)
3+
set(CMAKE_CXX_STANDARD 23)
4+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
5+
if(APPLE OR EMSCRIPTEN)
6+
set(CMAKE_CXX_STANDARD 20)
7+
endif()
8+
find_package(LLVM REQUIRED CONFIG)
9+
if(LLVM_VERSION_MAJOR LESS 21)
10+
message(FATAL_ERROR "LLVM 21+ required, found ${LLVM_VERSION_MAJOR}")
11+
endif()
12+
option(ENABLE_LLVM "Enable LLVM-based compiler" ON)
13+
set(COMPILER_FOR_RUNTIME "clang++")
14+
if(EMSCRIPTEN)
15+
set(COMPILER_FOR_RUNTIME "em++")
16+
endif()
17+
add_custom_command(
18+
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/runtime.ll
19+
COMMAND ${COMPILER_FOR_RUNTIME} ${RUNTIME_TARGET_FLAGS} -S -emit-llvm -O3 ${CMAKE_CURRENT_SOURCE_DIR}/runtime.cpp -o ${CMAKE_CURRENT_SOURCE_DIR}/runtime.ll
20+
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/runtime.cpp
21+
VERBATIM
22+
)
23+
add_custom_command(
24+
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/runtime_embed.cpp
25+
COMMAND ${CMAKE_COMMAND}
26+
-DRUNTIME_LL=${CMAKE_CURRENT_SOURCE_DIR}/runtime.ll
27+
-DOUTPUT=${CMAKE_CURRENT_BINARY_DIR}/runtime_embed.cpp
28+
-DTEMPLATE=${CMAKE_CURRENT_SOURCE_DIR}/runtime_embed.cpp.in
29+
-P ${CMAKE_CURRENT_SOURCE_DIR}/embed_runtime.cmake
30+
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/runtime.ll
31+
VERBATIM
32+
)
33+
set(SOURCES
34+
compiler.cpp
35+
compiler_run.cpp
36+
${CMAKE_CURRENT_BINARY_DIR}/runtime_embed.cpp
37+
)
38+
add_executable(qc ${SOURCES})
39+
target_compile_options(qc PRIVATE
40+
-O3
41+
$<$<CXX_COMPILER_ID:GNU>:-fconstexpr-ops-limit=1000000000>
42+
)
43+
if(ENABLE_LLVM)
44+
separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND "${LLVM_DEFINITIONS}")
45+
add_definitions(${LLVM_DEFINITIONS_LIST})
46+
add_definitions(-D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS)
47+
target_compile_definitions(qc PRIVATE ENABLE_LLVM)
48+
target_include_directories(qc PRIVATE ${LLVM_INCLUDE_DIRS})
49+
set(LLVM_COMPONENTS
50+
Core Support IRReader Passes Analysis TransformUtils
51+
ScalarOpts InstCombine IPO Target MC AsmPrinter CodeGen
52+
)
53+
if(EMSCRIPTEN)
54+
list(APPEND LLVM_COMPONENTS
55+
WebAssemblyCodeGen WebAssemblyAsmParser WebAssemblyDesc
56+
)
57+
else()
58+
list(APPEND LLVM_COMPONENTS
59+
X86CodeGen AllTargetsDescs AllTargetsAsmParsers AllTargetsCodeGens
60+
WebAssemblyCodeGen WebAssemblyAsmParser WebAssemblyDesc
61+
)
62+
endif()
63+
llvm_map_components_to_libnames(llvm_libs ${LLVM_COMPONENTS})
64+
target_link_libraries(qc PRIVATE ${llvm_libs} ${LLVM_SYSTEM_LIBS})
65+
endif()
66+
target_include_directories(qc PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
67+
if(EMSCRIPTEN)
68+
message(STATUS "Detected Emscripten environment - Applying WASM configuration")
69+
add_definitions(-D__EMSCRIPTEN__)
70+
add_definitions(-D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS)
71+
if(NOT LLVM_WASM_PATH)
72+
set(LLVM_WASM_PATH "/usr/lib/llvm-21")
73+
endif()
74+
include_directories("${LLVM_WASM_PATH}/include")
75+
set_target_properties(qc PROPERTIES
76+
OUTPUT_NAME "qc"
77+
SUFFIX ".js"
78+
LINK_FLAGS "\
79+
-s WASM=1 \
80+
-s FORCE_FILESYSTEM=1 \
81+
-s EXPORTED_FUNCTIONS='[\"_run_quantumc_code\"]' \
82+
-s EXPORTED_RUNTIME_METHODS='[\"ccall\",\"cwrap\",\"FS\"]' \
83+
-s ALLOW_MEMORY_GROWTH=1 \
84+
--preload-file ${CMAKE_SOURCE_DIR}/stdlib.qc@/stdlib.qc \
85+
-s STACK_SIZE=134217728 \
86+
-s MODULARIZE=1 \
87+
-s EXPORT_NAME=\"QuantumC\" \
88+
-s TOTAL_MEMORY=805306368 \
89+
-s ASSERTIONS=1 \
90+
-Oz \
91+
-s NO_DISABLE_EXCEPTION_CATCHING"
92+
)
93+
endif()

version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
x0.17.71
1+
x0.17.71

0 commit comments

Comments
 (0)