@@ -93,23 +93,35 @@ SETUP_COMPILER()
93
93
set (THREADS_PREFER_PTHREAD_FLAG ON )
94
94
find_package (Threads REQUIRED)
95
95
96
- MACRO (DAS_AOT_EXT input genList mainTarget dasAotTool dasAotToolArg)
96
+
97
+ MACRO (ADD_AOT_EXT_FILE genList mainTarget input )
97
98
get_filename_component (input_src ${input} ABSOLUTE )
98
99
get_filename_component (input_dir ${input_src} DIRECTORY )
99
100
get_filename_component (input_name ${input} NAME )
100
101
set (out_dir ${input_dir} /_aot_generated)
101
102
set (out_src "${out_dir} /${mainTarget} _${input_name} .cpp" )
103
+ set_source_files_properties (${out_src} PROPERTIES GENERATED TRUE )
104
+ list (APPEND ${genList} ${out_src} )
105
+ ENDMACRO ()
106
+
107
+ MACRO (DAS_AOT_EXT input genList mainTarget dasAotTool dasAotToolArg)
108
+ ADD_AOT_EXT_FILE(${genList} ${mainTarget} ${input} )
109
+ list (GET ${genList} -1 out_src)
110
+ get_filename_component (input_src ${input} ABSOLUTE )
111
+ get_filename_component (out_dir ${out_src} DIRECTORY )
102
112
file (MAKE_DIRECTORY ${out_dir} )
103
- ADD_CUSTOM_COMMAND (
104
- DEPENDS ${input_src}
105
- DEPENDS ${dasAotTool}
113
+ ADD_CUSTOM_COMMAND (
114
+ DEPENDS ${input_src}
115
+ # todo: we can't depend on dasAotTool due to cyclic dependencies,
116
+ # however we can force cmake to build it before (aka resolve dependency manually) which is not done yet
117
+ # DEPENDS ${dasAotTool}
106
118
OUTPUT ${out_src}
107
119
COMMENT "AOT precompiling ${input_src} -> ${out_src} "
108
120
COMMAND ${dasAotTool} ${dasAotToolArg} ${input_src} ${out_src}
109
121
)
110
- list (APPEND ${genList} ${out_src} )
111
122
set (custom_name ${mainTarget} _${input_name} _aot)
112
123
ADD_CUSTOM_TARGET (${custom_name} DEPENDS ${out_src} )
124
+ set_source_files_properties (${out_src} PROPERTIES GENERATED TRUE )
113
125
SET_TARGET_PROPERTIES (${custom_name} PROPERTIES FOLDER _${mainTarget} _aot)
114
126
ADD_DEPENDENCIES (${mainTarget} ${custom_name} )
115
127
ENDMACRO ()
@@ -118,22 +130,34 @@ MACRO(DAS_AOT input genList mainTarget dasAotTool)
118
130
DAS_AOT_EXT(${input} ${genList} ${mainTarget} ${dasAotTool} -aot)
119
131
ENDMACRO ()
120
132
121
- MACRO (DAS_AOT_STANDALONE input genList mainTarget dasAotTool )
133
+ MACRO (ADD_STANDALONE_FILE genList input )
122
134
get_filename_component (input_src ${input} ABSOLUTE )
123
135
get_filename_component (input_dir ${input_src} DIRECTORY )
124
136
get_filename_component (input_name ${input} NAME )
125
- get_filename_component (ctx_name ${input} NAME_WE )
126
137
set (out_dir ${input_dir} /_standalone_ctx_generated)
138
+ set (out_inc ${out_dir} /${input_name} .h)
127
139
set (out_src ${out_dir} /${input_name} .cpp)
140
+ set_source_files_properties (${out_inc} PROPERTIES GENERATED TRUE )
141
+ set_source_files_properties (${out_src} PROPERTIES GENERATED TRUE )
142
+ list (APPEND ${genList} ${out_inc} )
143
+ list (APPEND ${genList} ${out_src} )
144
+ ENDMACRO ()
145
+
146
+ MACRO (DAS_AOT_STANDALONE input genList mainTarget dasAotTool)
147
+ get_filename_component (ctx_name ${input} NAME_WE )
148
+ ADD_STANDALONE_FILE(${genList} ${input} )
149
+ list (GET ${genList} -1 out_src)
150
+ get_filename_component (out_dir ${out_src} DIRECTORY )
128
151
file (MAKE_DIRECTORY ${out_dir} )
129
152
ADD_CUSTOM_COMMAND (
130
153
DEPENDS ${input_src}
131
- DEPENDS ${dasAotTool}
154
+ # todo: we can't depend on dasAotTool due to cyclic dependencies,
155
+ # however we can force cmake to build it before (aka resolve dependency manually)
156
+ # DEPENDS ${dasAotTool}
132
157
OUTPUT ${out_src}
133
158
COMMENT "AOT precompiling ${input_src} -> ${out_src} "
134
159
COMMAND ${dasAotTool} -aot ${input_src} ${out_dir} -standalone-context ${ctx_name} -standalone-class Standalone
135
160
)
136
- list (APPEND ${genList} ${out_src} )
137
161
set (custom_name ${mainTarget} _${input_name} _standalone)
138
162
ADD_CUSTOM_TARGET (${custom_name} DEPENDS ${out_src} )
139
163
set_source_files_properties (${out_src} PROPERTIES GENERATED TRUE )
@@ -713,76 +737,8 @@ list(SORT DAS_LIB_SRC)
713
737
714
738
include_directories (include )
715
739
include_directories (3rdparty/fmt/include )
716
- ADD_LIBRARY (libDaScript ${PARSER_GENERATED_SRC} ${PARSER_SRC} ${VECMATH_SRC} ${AST_SRC} ${BUILTIN_SRC}
717
- ${MISC_SRC} ${SIMULATE_SRC} ${SIMULATE_FUSION_SRC} ${TEST_SRC} ${MAIN_SRC}
718
- ${DAGOR_NOISE_SRC} ${FLAT_HASH_MAP_SRC} ${FAST_FLOAT_SRC} ${DASCRIPT_FMT_SRC} )
719
- ADD_DEPENDENCIES (libDaScript need_and_resolve)
720
- ADD_PROJECT_XXD_DEPENDS(libDaScript)
721
- target_include_directories (libDaScript PUBLIC
722
- ${DAS_SMMALLOC_DIR}
723
- ${CMAKE_SOURCE_DIR} /3rdparty/uriparser/include
724
- ${CMAKE_SOURCE_DIR} /include
725
- )
726
- target_link_libraries (libDaScript libUriParser)
727
- #target_link_libraries(libDaScript fmt::fmt)
728
- IF (LINUX_UUID)
729
- target_link_libraries (libDaScript uuid)
730
- ENDIF ()
731
- IF (UNIX AND NOT APPLE )
732
- TARGET_LINK_LIBRARIES (libDaScript ${CMAKE_DL_LIBS} )
733
- ENDIF ()
734
- IF (HAIKU)
735
- TARGET_LINK_LIBRARIES (libDaScript network uuid)
736
- ENDIF ()
737
- SETUP_CPP11(libDaScript)
738
-
739
- add_custom_target (standaloneGenerated)
740
- SET (STANDALONE_SRC)
741
- DAS_AOT_STANDALONE("src/das/ast/ast_print.das" STANDALONE_SRC standaloneGenerated daslang)
742
-
743
- ADD_LIBRARY (libDaScriptStandalone ${PARSER_GENERATED_SRC} ${PARSER_SRC} ${VECMATH_SRC} ${AST_SRC} ${BUILTIN_SRC}
744
- ${MISC_SRC} ${SIMULATE_SRC} ${SIMULATE_FUSION_SRC} ${TEST_SRC} ${MAIN_SRC}
745
- ${DAGOR_NOISE_SRC} ${FLAT_HASH_MAP_SRC} ${FAST_FLOAT_SRC} ${DASCRIPT_FMT_SRC} ${STANDALONE_SRC} )
746
- ADD_DEPENDENCIES (libDaScriptStandalone need_and_resolve)
747
- ADD_DEPENDENCIES (libDaScriptStandalone standaloneGenerated)
748
- ADD_PROJECT_XXD_DEPENDS(libDaScriptStandalone)
749
- target_include_directories (libDaScriptStandalone PUBLIC
750
- ${DAS_SMMALLOC_DIR}
751
- ${CMAKE_SOURCE_DIR} /3rdparty/uriparser/include
752
- ${CMAKE_SOURCE_DIR} /include
753
- )
754
- target_compile_definitions (libDaScriptStandalone PUBLIC STANDALONE_MODE)
755
- target_link_libraries (libDaScriptStandalone libUriParser)
756
- #target_link_libraries(libDaScript fmt::fmt)
757
- IF (LINUX_UUID)
758
- target_link_libraries (libDaScriptStandalone uuid)
759
- ENDIF ()
760
- IF (UNIX AND NOT APPLE )
761
- TARGET_LINK_LIBRARIES (libDaScriptStandalone ${CMAKE_DL_LIBS} )
762
- ENDIF ()
763
- IF (HAIKU)
764
- TARGET_LINK_LIBRARIES (libDaScriptStandalone network uuid)
765
- ENDIF ()
766
- SETUP_CPP11(libDaScriptStandalone)
767
- #target_precompile_headers(libDaScript PUBLIC include/daScript/misc/platform.h)
768
-
769
-
770
- if (NOT ${DAS_AOT_EXAMPLES_DISABLED} )
771
-
772
- if (${DAS_TOOLS_DISABLED} )
773
- # error, we need tools to generate aot
774
- message (FATAL_ERROR "DAS_AOT_EXAMPLES_DISABLED requires DAS_TOOLS_DISABLED to be OFF" )
775
- endif ()
776
740
777
- add_custom_target (dasAotStub)
778
- SET (AOT_GENERATED_SRC)
779
-
780
- MACRO (DAS_AOT_LIB_FILES aotStdlibFiles genList mainTarget dasAotTool)
781
- FOREACH (inF IN LISTS ${aotStdlibFiles} )
782
- DAS_AOT_LIB("${inF} " AOT_GENERATED_SRC dasAotStub daslang)
783
- ENDFOREACH ()
784
- ENDMACRO ()
785
- set (AotDaslibList
741
+ set (AotDaslibList
786
742
daslib/algorithm.das
787
743
daslib/apply.das
788
744
daslib/apply_in_context.das
@@ -863,19 +819,112 @@ if(NOT ${DAS_AOT_EXAMPLES_DISABLED})
863
819
daslib/uriparser_boost.das
864
820
daslib/utf8_utils.das
865
821
daslib/validate_code.das
822
+ )
823
+
824
+ SET (AOT_GENERATED_SRC)
825
+ FOREACH (inF IN LISTS AotDaslibList)
826
+ ADD_AOT_EXT_FILE(AOT_GENERATED_SRC dasAotStub ${inF} )
827
+ ENDFOREACH ()
828
+
829
+ # one-shot target
830
+ set (AOT_STAGE0_PATH ${CMAKE_CURRENT_BINARY_DIR} /_daslib_gen_stage0)
831
+ foreach (FILE ${AOT_GENERATED_SRC} )
832
+ get_filename_component (FILENAME ${FILE} NAME )
833
+ message ("FILENAME ${FILENAME} " )
834
+ set (DST_FILE ${AOT_STAGE0_PATH} /${FILENAME} )
835
+ add_custom_command (
836
+ OUTPUT ${DST_FILE}
837
+ COMMAND ${CMAKE_COMMAND} -E copy
838
+ ${FILE}
839
+ ${DST_FILE}
840
+ )
841
+ list (APPEND AOT_GENERATED_SRC_STAGE0 "${DST_FILE} " )
842
+ endforeach ()
843
+
844
+ add_custom_target (dasAotStub)
845
+ SOURCE_GROUP_FILES("aot stub" AOT_GENERATED_SRC)
846
+
847
+ set (StandaloneFilesList
848
+ src/das/ast/ast_print.das
849
+ )
866
850
851
+ SET (STANDALONE_SRC)
852
+ FOREACH (inF IN LISTS StandaloneFilesList)
853
+ ADD_STANDALONE_FILE(STANDALONE_SRC ${inF} )
854
+ ENDFOREACH ()
855
+
856
+ set (STANDALONE_STAGE0_PATH ${CMAKE_CURRENT_BINARY_DIR} /_standalone_gen_stage0)
857
+ foreach (FILE ${STANDALONE_SRC} )
858
+ get_filename_component (FILENAME ${FILE} NAME )
859
+ set (DST_FILE ${STANDALONE_STAGE0_PATH} /${FILENAME} )
860
+ add_custom_command (
861
+ OUTPUT ${DST_FILE}
862
+ COMMAND ${CMAKE_COMMAND} -E copy
863
+ ${FILE}
864
+ ${DST_FILE}
867
865
)
866
+ list (APPEND STANDALONE_SRC_STAGE0 "${DST_FILE} " )
867
+ endforeach ()
868
+
869
+
870
+ MACRO (SETUP_LIBDASCRIPT library aotFiles standaloneFiles)
871
+ ADD_LIBRARY (${library} STATIC ${PARSER_GENERATED_SRC} ${PARSER_SRC} ${VECMATH_SRC} ${AST_SRC} ${BUILTIN_SRC}
872
+ ${MISC_SRC} ${SIMULATE_SRC} ${SIMULATE_FUSION_SRC} ${TEST_SRC} ${MAIN_SRC}
873
+ ${DAGOR_NOISE_SRC} ${FLAT_HASH_MAP_SRC} ${FAST_FLOAT_SRC} ${DASCRIPT_FMT_SRC}
874
+ ${standaloneFiles} ${aotFiles} )
875
+ ADD_DEPENDENCIES (${library} need_and_resolve)
876
+ ADD_PROJECT_XXD_DEPENDS(${library} )
877
+ target_include_directories (${library} PUBLIC
878
+ ${DAS_SMMALLOC_DIR}
879
+ ${CMAKE_SOURCE_DIR} /3rdparty/uriparser/include
880
+ ${CMAKE_SOURCE_DIR} /include
881
+ )
882
+ target_link_libraries (${library} libUriParser)
883
+ #target_link_libraries(${library} fmt::fmt)
884
+ IF (LINUX_UUID)
885
+ target_link_libraries (${library} uuid)
886
+ ENDIF ()
887
+ IF (UNIX AND NOT APPLE )
888
+ TARGET_LINK_LIBRARIES (${library} ${CMAKE_DL_LIBS} )
889
+ ENDIF ()
890
+ IF (HAIKU)
891
+ TARGET_LINK_LIBRARIES (${library} network uuid)
892
+ ENDIF ()
893
+ SETUP_CPP11(${library} )
894
+ #target_precompile_headers(${library} PUBLIC include/daScript/misc/platform.h)
895
+ ENDMACRO ()
896
+
897
+ SETUP_LIBDASCRIPT(libDaScriptStage0 "${AOT_GENERATED_SRC_STAGE0} " "${STANDALONE_SRC_STAGE0} " )
898
+ SETUP_LIBDASCRIPT(libDaScript "${AOT_GENERATED_SRC} " "${STANDALONE_SRC} " )
899
+
900
+ add_custom_target (standaloneGenerated)
901
+
902
+ FOREACH (inF IN LISTS StandaloneFilesList)
903
+ DAS_AOT_STANDALONE(${inF} standaloneSrc2 standaloneGenerated daslang-stage0)
904
+ ENDFOREACH ()
905
+
906
+
907
+ SET (AOT_GENERATED_SRC2)
908
+ FOREACH (inF IN LISTS AotDaslibList)
909
+ DAS_AOT_LIB("${inF} " AOT_GENERATED_SRC2 dasAotStub daslang-stage0)
910
+ ENDFOREACH ()
911
+
912
+ ADD_DEPENDENCIES (libDaScript standaloneGenerated dasAotStub)
913
+
914
+ if (NOT ${DAS_AOT_EXAMPLES_DISABLED} )
915
+
916
+ if (${DAS_TOOLS_DISABLED} )
917
+ # error, we need tools to generate aot
918
+ message (FATAL_ERROR "DAS_AOT_EXAMPLES_DISABLED requires DAS_TOOLS_DISABLED to be OFF" )
919
+ endif ()
868
920
869
- DAS_AOT_LIB_FILES(AotDaslibList AOT_GENERATED_SRC dasAotStub daslang)
870
- SOURCE_GROUP_FILES("aot stub" AOT_GENERATED_SRC)
871
921
#UNITIZE_BUILD("daslib" AOT_GENERATED_SRC)
872
922
873
923
SET (AOT_STUB_SRC
874
924
utils/daScript/aot_stub.cpp
875
925
)
876
926
add_library (libDaScriptAot STATIC ${AOT_GENERATED_SRC} ${AOT_STUB_SRC} )
877
- ADD_DEPENDENCIES (libDaScriptAot dasAotStub daslang libDaScript)
878
- ADD_DEPENDENCIES (libDaScriptStandalone dasAotStub)
927
+ ADD_DEPENDENCIES (libDaScriptAot dasAotStub libDaScript)
879
928
TARGET_LINK_LIBRARIES (libDaScriptAot libDaScript)
880
929
SETUP_CPP11(libDaScriptAot)
881
930
endif ()
@@ -891,22 +940,22 @@ if (NOT ${DAS_TOOLS_DISABLED})
891
940
892
941
SOURCE_GROUP_FILES("main" DAS_DASCRIPT_MAIN_SRC)
893
942
894
- SET (SRC_LIBRARIES libDaScript libDaScriptTest Threads::Threads ${DAS_MODULES_LIBS} )
895
- SET (SRC_LIBRARIES_BOOTSTRAPPED libDaScriptStandalone libDaScriptTest Threads::Threads ${DAS_MODULES_LIBS} )
896
-
897
- add_executable (daslang-boostrapped ${DAS_DASCRIPT_MAIN_SRC} ${AOT_GENERATED_SRC} )
898
- TARGET_LINK_LIBRARIES (daslang-boostrapped ${SRC_LIBRARIES_BOOTSTRAPPED} )
943
+ SET (SRC_LIBRARIES libDaScriptTest Threads::Threads ${DAS_MODULES_LIBS} )
899
944
945
+ MACRO (SETUP_COMPILER_BINARY target_name library_name)
946
+ add_executable (${target_name} ${DAS_DASCRIPT_MAIN_SRC} )
947
+ TARGET_LINK_LIBRARIES (${target_name} ${library_name} ${SRC_LIBRARIES} )
948
+ ADD_DEPENDENCIES (${target_name} ${library_name} libDaScriptTest ${DAS_MODULES_LIBS} )
949
+ SETUP_CPP11(${target_name} )
950
+ SETUP_LTO(${target_name} )
951
+ INSTALL (TARGETS ${target_name}
952
+ RUNTIME DESTINATION ${DAS_INSTALL_BINDIR}
953
+ )
954
+ ENDMACRO ()
900
955
901
- add_executable (daslang ${DAS_DASCRIPT_MAIN_SRC} )
902
- TARGET_LINK_LIBRARIES (daslang ${SRC_LIBRARIES} )
903
- # ADD_DEPENDENCIES(daslang libDaScript libDaScriptTest ${DAS_MODULES_LIBS})
904
- SETUP_CPP11(daslang)
905
- SETUP_LTO(daslang)
906
-
907
- INSTALL (TARGETS daslang
908
- RUNTIME DESTINATION ${DAS_INSTALL_BINDIR}
909
- )
956
+ SETUP_COMPILER_BINARY(daslang-stage0 libDaScriptStage0)
957
+ set_property (TARGET daslang-stage0 PROPERTY GENERATED TRUE )
958
+ SETUP_COMPILER_BINARY(daslang libDaScript)
910
959
911
960
file (GLOB DASLIB_SOURCES
912
961
${PROJECT_SOURCE_DIR} /daslib/*.das
@@ -916,7 +965,7 @@ if (NOT ${DAS_TOOLS_DISABLED})
916
965
)
917
966
918
967
add_executable (das-fmt ${PROJECT_SOURCE_DIR} /utils/dasFormatter/main.cpp)
919
- TARGET_LINK_LIBRARIES (das-fmt ${SRC_LIBRARIES} )
968
+ TARGET_LINK_LIBRARIES (das-fmt libDaScript ${SRC_LIBRARIES} )
920
969
921
970
SETUP_CPP11(das-fmt)
922
971
SETUP_LTO(das-fmt)
0 commit comments